web-dev-qa-db-fra.com

télécharger un fichier dans ma boîte de dépôt à partir de python

Je veux télécharger un fichier depuis mon script python sur mon compte dropbox automatiquement. Je ne trouve pas de toute façon de le faire avec juste un utilisateur/pass. Tout ce que je vois dans le SDK Dropbox est lié à une application ayant une interaction avec l'utilisateur. Je veux juste faire quelque chose comme ceci:

https://api-content.dropbox.com/1/files_put/ /? user = me & pass = blah

44
Christina

Remarque importante: cette réponse est déconseillée car dropbox utilise maintenant l'API v2.
Voir la réponse de @ SparkAndShine pour la solution de version d'API actuelle

Merci à @smarx pour la réponse ci-dessus! Je voulais juste clarifier pour quiconque essaie de le faire.

  1. Assurez-vous que vous installez d'abord le module Dropbox, pip install dropbox.

  2. Créez une application sous votre propre compte dropbox dans la "App Console". ( https://www.dropbox.com/developers/apps )

  3. Pour mémoire, j'ai créé mon application avec les éléments suivants:

    une. Type d'application comme "APP Dropbox API".

    b. Type d'accès aux données en tant que "Fichiers et banques de données"

    c. Accès au dossier car "Mon application doit avoir accès aux fichiers déjà sur Dropbox". (c.-à-d.: Type d'autorisation comme "Dropbox complète".)

  4. Cliquez ensuite sur le bouton "générer un jeton d'accès" et coupez/collez dans l'exemple python ci-dessous à la place de <auth_token>:



import dropbox client = dropbox.client.DropboxClient(<auth_token>) print 'linked account: ', client.account_info() f = open('working-draft.txt', 'rb') response = client.put_file('/magnum-opus.txt', f) print 'uploaded: ', response folder_metadata = client.metadata('/') print 'metadata: ', folder_metadata f, metadata = client.get_file_and_metadata('/magnum-opus.txt') out = open('magnum-opus.txt', 'wb') out.write(f.read()) out.close() print metadata
52
Christina

La réponse de @ Christina est basée sur Dropbox APP v1 , qui est désormais obsolète et sera désactivé le 28/06/2017. (Voir ici pour plus d'informations.)

APP v2 est lancé en novembre 2015, ce qui est plus simple, plus cohérent et plus complet.

Voici le code source avec APP v2.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import dropbox

class TransferData:
    def __init__(self, access_token):
        self.access_token = access_token

    def upload_file(self, file_from, file_to):
        """upload a file to Dropbox using API v2
        """
        dbx = dropbox.Dropbox(self.access_token)

        with open(file_from, 'rb') as f:
            dbx.files_upload(f.read(), file_to)

def main():
    access_token = '******'
    transferData = TransferData(access_token)

    file_from = 'test.txt'
    file_to = '/test_dropbox/test.txt'  # The full path to upload the file to, including the file name

    # API v2
    transferData.upload_file(file_from, file_to)

if __== '__main__':
    main()

Le code source est hébergé sur GitHub, ici .

50
SparkAndShine

Voici mon approche en utilisant l'API v2 (et Python 3). Je voulais télécharger un fichier et créer un lien de partage pour celui-ci, que je pourrais envoyer par courrier électronique aux utilisateurs. Il est basé sur l'exemple de sparkandshine. Remarque I pense que la documentation actuelle de l'API contient une petite erreur que sparkandshine a corrigée.

import pathlib
import dropbox
import re

# the source file
folder = pathlib.Path(".")    # located in this folder
filename = "test.txt"         # file name
filepath = folder / filename  # path object, defining the file

# target location in Dropbox
target = "/Temp/"              # the target folder
targetfile = target + filename   # the target path and file name

# Create a dropbox object using an API v2 key
d = dropbox.Dropbox(your_api_access_token)

# open the file and upload it
with filepath.open("rb") as f:
   # upload gives you metadata about the file
   # we want to overwite any previous version of the file
   meta = d.files_upload(f.read(), targetfile, mode=dropbox.files.WriteMode("overwrite"))

# create a shared link
link = d.sharing_create_shared_link(targetfile)

# url which can be shared
url = link.url

# link which directly downloads by replacing ?dl=0 with ?dl=1
dl_url = re.sub(r"\?dl\=0", "?dl=1", url)
print (dl_url)
11
Steve Lockwood

La seule façon d'authentifier les appels à l'API Dropbox est d'utiliser OAuth, ce qui implique que l'utilisateur donne l'autorisation à votre application. Nous n'autorisons pas les applications tierces à gérer les informations d'identification de l'utilisateur (nom d'utilisateur et mot de passe).

S'il s'agit uniquement de votre compte, notez que vous pouvez facilement obtenir un jeton OAuth pour votre propre compte et l'utiliser. Voir https://www.dropbox.com/ développeurs/blog/94/générer un jeton d'accès pour votre propre compte .

S'il s'agit d'autres utilisateurs, ils devront autoriser votre application une fois via le navigateur pour que vous obteniez un jeton OAuth. Une fois que vous avez le jeton, vous pouvez continuer à l'utiliser, cependant, donc chaque utilisateur ne devrait avoir à le faire qu'une seule fois.

6
smarx
import dropbox
access_token = '************************'
file_from = 'index.jpeg'  //local file path
file_to = '/Siva/index.jpeg'      // dropbox path
def upload_file(file_from, file_to):
    dbx = dropbox.Dropbox(access_token)
    f = open(file_from, 'rb')
    dbx.files_upload(f.read(), file_to)
upload_file(file_from,file_to)
3
user7384403

Désolé si je manque quelque chose mais que vous ne pouvez pas télécharger l'application dropbox pour votre système d'exploitation, puis enregistrez le fichier (sous Windows) dans:

C:\Users\<UserName>\Dropbox\<FileName>

je viens de créer un programme python pour enregistrer un fichier texte, vérifié ma boîte de dépôt et il les enregistre bien.

1
Caleb Connolly