Domoticz – Sauvegarde Dropbox

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

domoticz_dropbox

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)