We are aware of the issue with the badge emails resending to everyone, we apologise for the inconvenience - learn more here.

Forum Discussion

rahulj1's avatar
rahulj1
Explorer | Level 4
2 years ago

Access Shared Folder with API

Hi Team,

 

can any one please help me to get access in shared folder to extract the meta data like subfolder size and file count.

I was unable to locate the shared folder through api always it says, lookup not found:

Error: ApiError('e266db43b6334ae9bacaa86ee7c566b4', ListFolderError('path', LookupError('not_found', None)))

 

Below is my folder structure in dropbox:

 

trying with below code to get all of root folder but I am getting only App folder

#Code I am using to get all the folder

dbx = dropbox.Dropbox(access_token)

try:
    folder = ''
    response = dbx.files_list_folder(folder)
    # If no AuthError is raised, it means the scope is working correctly
    print("Scope is working correctly.")
    print(response)
except dropbox.exceptions.AuthError as e:
    print(f"AuthError: {e}")
 
as output I am receiving only one folder which is Apps folder 
 
Output: entries=[FolderMetadata(id='id:CUbXpRMh8dwAAAAAAAAACg', name='Apps', parent_shared_folder_id=NOT_SET, path_display='/Apps', path_lower='/apps', preview_url=NOT_SET, property_groups=NOT_SET, shared_folder_id=NOT_SET, sharing_info=NOT_SET)], has_more=False)
  • Greg-DB's avatar
    Greg-DB
    Icon for Dropbox Staff rankDropbox Staff

    I see you're trying to access the contents of a folder in your "team space". By default, API calls operate in the "member folder" of the connected account, not the "team space". You can configure API calls to operate in the "team space" instead though. To do so, you'll need to set the "Dropbox-API-Path-Root" header. You can find information on this in the Team Files Guide. With the Python SDK, you would do so using the with_path_root method.

    • rahulj1's avatar
      rahulj1
      Explorer | Level 4

      I have tried with this below code snippet still I am getting error

       

      from json import JSONDecodeError
      import requests
      import dropbox
      from dropbox.exceptions import AuthError, ApiError

      # Authenticate your app
      access_token = 'My Access Token'
      dbx = dropbox.DropboxTeam(access_token)

      def get_user_id(email😞
          try:
              # Get the list of team members
              members = dbx.team_members_list()

              # Find the user with the specified email
              for member in members.members:
                  if member.profile.email == email:
                      return member.profile.team_member_id
                 
          except AuthError as e:
              print('Error authenticating with Dropbox API:', e)
              return None        


      def list_files_in_folder(folder_path😞
          try:
              # Set the API endpoint URL

              # Set the request headers
              headers = {
                  'Authorization': f'Bearer {access_token}',
                  'Content-Type': 'application/json',
                  'Dropbox-API-Select-User': user_id  # Replace user_id with the desired user's ID
              }

              # Set the request parameters
              data = {
                  'path': folder_path,
                  'recursive': True
              }

              # Send the request
              response = requests.post(url, headers=headers, json=data)
              response_data = response.json()
              print(response.text)

              # Process the entries in the folder
              for entry in response_data['entries']:
                  print(entry['name'])  # Print the name of the file or folder

                  if entry['.tag'] == 'folder':
                      # Recursively list files in subfolders
                      list_files_in_folder(entry['path_display'])

          except AuthError as e:
              print('Error authenticating with Dropbox API:', e)
          except ApiError as e:
              print('Error listing folder:', e)
          except JSONDecodeError as e:
              print('Error decoding JSON response:', e)

      # Set the folder path
      folder_path = ' '  # Replace with the actual folder path

      # Get the user ID for a specific email
      user_email = ' User Name'  # Replaced with the desired user's email
      user_id = get_user_id(user_email)

      # List files in the folder for the specific user
      list_files_in_folder(folder_path)
       
       
      Still getting below error
      {"error_summary": "path/not_found/.", "error": {".tag": "path", "path": {".tag": "not_found"}}}
      {"error_summary": "path/not_found/.", "error": {".tag": "path", "path": {".tag": "not_found"}}}
      • Greg-DB's avatar
        Greg-DB
        Icon for Dropbox Staff rankDropbox Staff

        rahulj1 Please review my previous message. In order to access the team space, you'll need to set the "Dropbox-API-Path-Root" header, which can be done in the Python SDK using the with_path_root method. In your latest code, you still don't seem to be using the "Dropbox-API-Path-Root" header or with_path_root method.

         

        Also, in this latest code I see you've implemented some of your own code for performing the HTTP request to /2/files/list_folder, however that is not necessary as it is provided natively by the official Dropbox SDK, via the files_list_folder method, like you had in your original code.

         

        Here's a very basic example of how you might use with_path_root and files_list_folder with the Dropbox Python SDK.

        import dropbox
        
        dbx = dropbox.Dropbox(ACCESS_TOKEN)
        
        root_namespace_id = dbx.users_get_current_account().root_info.root_namespace_id
        
        path = ""
        print(dbx.with_path_root(dropbox.common.PathRoot.root(root_namespace_id)).files_list_folder(path))

        (This is assuming a user-linked access token, more like your original code sample.)

About Dropbox API Support & Feedback

Node avatar for Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

5,877 PostsLatest Activity: 39 minutes ago
325 Following

If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X or Facebook.

For more info on available support options for your Dropbox plan, see this article.

If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!