Initialisation
Pour cela dropbox fournit un SDK python installable via pip. Sur raspbian (whezzy) pip n’est pas installé par défaut, son installation est donc nécessaire:
sudo apt-get install python-pip sudo pip install dropbox
Il faut ensuite créer une « App » dans dropbox pour pouvoir y accéder par les API…
Ca se passe sur le portail developpeur de dropbox (il faut bien sûr un compte dropbox)
URL : https://www.dropbox.com/developers/apps
Une fois l’application créée il faut obtenir un token d’acces, un script python permet d’en obtenir un simplement en fournissant les codes de l’application :
#!/usr/bin/python import dropbox # Get your app key and secret from the Dropbox developer website app_key = 'azertyuiop' app_secret = 'dsfdsgsgfgfdgdf' flow = dropbox.client.DropboxOAuth2FlowNoRedirect(app_key, app_secret) # Have the user sign in and authorize this token authorize_url = flow.start() print '------------- creation d un token ------------' print '1. Go to: ' + authorize_url print '2. Click "Allow" (you might have to log in first)' print '3. Copy the authorization code.' code = raw_input("Enter the authorization code here: ").strip() access_token, user_id = flow.finish(code) print 'TOKEN: ' + access_token + ' USER_ID: ' + user_id
Script de sauvegarde
Le script est configuré avec le token d’accès. Il n’y a pas de lifetime sur les jetons (il me semble), nul besoin donc d’automatiser la MAJ du jeton. Le script ci-dessous permet donc de sauvegarder un répertoire que l’on fournit en argument. Un autre argument optionnel permet de définir le répertoire de destination:
#!/usr/bin/python import dropbox import os import json import sys if len(sys.argv)==1: print 'erreur arg' exit(1) if len(sys.argv)==2: path = sys.argv[1] path = path + "/" if len(sys.argv)==3: path = sys.argv[1] dpath = sys.argv[2] dpath = dpath + "/" else: dpath="" print '---- debut sauvegarde ----' access_token = "pipo-1zu_YjAAdsfdsfdsfeIBT1uXmfItt3JXRblchTd39vn" client = dropbox.client.DropboxClient(access_token) dirs = os.listdir(path) for file in dirs: if os.path.isfile(path+file): f = open(path+file, 'rb') response = client.put_file('/'+ dpath + file, f) print "uploaded:", response["path"] exit(1)