Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to download files with Box API & Python

I have currently the upload portion of my code working, how would I go about converting this into a program that will download the respective files from the box folder?

This is the upload program:

import requests
import json

#the user acces token
access_token =  'UfUNeHhv4gIxFCn5WEXHgBJwfG8gHT2o'
#the name of the file as you want it to appear in box
dst_filename = 'box_file'
#the actual file path
src_directory = 'C:\Python\cache\\'
#the name of the file to be transferred
src_filename = 'Wildlife.wmv'
#the id of the folder you want to upload to
parent_id = '0'
counter = 1

for counter in range(1, 6):
  src_file = (src_directory + src_filename + '-' + str(counter))
  print(src_file)
  box_filename = (dst_filename + '-' + str(counter))
  headers = { 'Authorization': 'Bearer {0}'.format(access_token)}
  url = 'https://upload.box.com/api/2.0/files/content'
  #open(src_file,'rb') - opens the source file with the buffered reader
  files = { 'filename': (box_filename, open(src_file,'rb')) }
  data = { "parent_id": parent_id }
  response = requests.post(url, data=data, files=files, headers=headers)
  #file_info = response.json()
  #print(file_info)
  print(response)
  print(url, data, files, headers)
  counter = counter + 1

This is the sample curl request that the Box API documentation gives for downloading files.

curl -L https://api.box.com/2.0/files/FILE_ID/content \
-H "Authorization: Bearer ACCESS_TOKEN" \
-o FILE_PATH/file_name.txt

Part two of this question: Is there a way to alter this program (and the download program) to process all of the files within a folder no matter what the name of the file is?

I am new to programming, so please forgive my lack of skills/knowledge in this area.

like image 606
Steve-O Avatar asked Apr 12 '15 20:04

Steve-O


2 Answers

I know this was asked long back, but still I believe many people are searching for the way to do it.

Please check Box SDK for more details.

And I'm using OAuth2.0 - Custom App. You can create the credentials from the developer console.

Here's the code.

from boxsdk import OAuth2, Client
#from boxsdk import Folder

auth = OAuth2(
    client_id='fbxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9',
    client_secret='bPxxxxxxxxxxxxxxxxxxxxxxxxx4Or',
    access_token='QExxxxxxxxxxxxxxxxxxxxxxxxxxwt',
)
client = Client(auth)

root_folder = client.root_folder().get()

items = root_folder.get_items()
for item in items:
    print('{0} {1} is named "{2}"'.format(item.type.capitalize(), item.id, item.name))
    with open(item.name, 'wb') as open_file:
        client.file(item.id).download_to(open_file)
        open_file.close()

Hope this will help you. Thanks to the Python boxsdk 2.0.0 Doc.

like image 84
Parvathirajan Natarajan Avatar answered Sep 19 '22 06:09

Parvathirajan Natarajan


Assume you are getting your authorization correct you can download file by adding few lines to code to your Existing code. This will copy data from box file to local file here name is FileFromBox.xlx

with open('FileFromBox.xls', 'wb') as open_file:
    client.file('FileId_of_box_file').download_to(open_file)
    open_file.close()
like image 41
Rohit Avatar answered Sep 20 '22 06:09

Rohit