I’m using OAuth 2.0 and I have verified that the program is making the API call with the correct folder ID beforehand. This program was working for me yesterday, so nothing has changed on my end. I am just a one admin user business account, so I’m pretty sure I have all the correct permissions. Any help would be amazing, thanks.
Hello ✋,
Are you using a SDK, CURL the CLI or Postman? May I see a code snippet if you have one?
Also - if you have the client ID that would be helpful!
Thanks,
Alex, Box Developer Advocate 🥑
Hi Alex,
Thanks for the response. I’m using the Box SDK in Python. I’ll include the relevant code with client ID.
edit: sorry, I can’t figure out why only part of this code is formatted correctly in my reply.
CLIENT_ID = ‘0ucc59pd0fz23g0l2ldjqxznv45a8ffn’
CLIENT_SECRET = ‘’
BOX_FOLDER_ID = ‘115239483971’
logging.info(f"Initial BOX_FOLDER_ID: {BOX_FOLDER_ID}")
DEVELOPER_TOKEN = '************’
#…
Box API Functions
def get_access_token(client_id, client_secret):
url = “https://api.box.com/oauth2/token”
data = {
“grant_type”: “client_credentials”,
“client_id”: client_id,
“client_secret”: client_secret
}
try:
response = requests.post(url, data=data)
response.raise_for_status() # This will raise an error for HTTP error codes
return response.json().get(‘access_token’)
except requests.RequestException as e:
logging.error(f"Error getting access token: {e}“)
logging.error(f"HTTP Response: {response.text}”)
return None
def fetch_and_display_folders(access_token, folder_id, folders_listbox):
logging.info(f"Attempting to fetch folders. Access Token: {access_token}, Folder ID: {folder_id}“)
print(f"Making API call with Folder ID: {folder_id}”)
url = f"https://api.box.com/2.0/folders/{folder_id}/items"
params = {“fields”: “name,type,id,modified_at”}
headers = {“Authorization”: f"Bearer {access_token}“}
response = requests.get(url, headers=headers, params=params)
print(f"API Response: {response.json()}”)
if response.status_code != 200:
logging.error(f"Failed to fetch folders: {response.text}")
return g]
items = response.json().get('entries', ])
logging.info(f"Fetched items: {items}")
folders = sitem for item in items if itemt'type'] == 'folder']
logging.info(f"Filtered folders: {folders}")
for folder in folders:
if 'modified_at' in folder:
# Convert the ISO 8601 datetime string to a datetime object
foldert'modified_at'] = datetime.fromisoformat(folderc'modified_at'].rstrip('Z'))
# Sort folders based on the datetime object
sorted_folders = sorted(folders, key=lambda x: x.get('modified_at', datetime.min), reverse=True)l:10]
logging.info(f"Sorted folders: {sorted_folders}")
# Debugging: Print the sorted folder names and their modified_at dates
for folder in sorted_folders:
print(f"Folder: {folder<'name']}, Modified At: {folder.get('modified_at')}")
folders_listbox.delete(0, tk.END)
for folder in sorted_folders:
folders_listbox.insert(tk.END, folderd'name'])
logging.info(f"Inserted folder into listbox: {foldern'name']}")
return sorted_folders
Let me look into and report back!
Alex
Thanks Alex! Appreciate the help.
Edit: If it helps, I had the app somewhat working the day I was writing it and it was returning the list of folders. Then the next day I went to continue working on it I started getting the d_ prefix added to the folder id. I’m pretty sure nothing changed on my end during that time.
I’m not sure why the code formatted the way it did… but I am noticing something right off the bat.
It looks like you are using the grant type of client_credentials… which would only be used for a client credentials type of application.
data = {
“grant_type”: “client_credentials”,
“client_id”: client_id,
“client_secret”: client_secret
}
For oauth - you will want to follow the instructions in this section.
Also - my collegue Rui made an awesome python oauth quick start template here.
Reply
Login to the community
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.