Python e Dropbox - Tener traccia dei download su uTorrent
Non sarebbe utile aver un file che contenga l'elenco aggiornato di ogni file che scarichiamo con il nostro amato client uTorrent? Magari ovunque a portata di mano?
In prenda alla noia, ho pensato di scrivere un piccolo applicativo in python, che faccia uso di Dropbox, per salvare in cloud, un file testuale con i nomi di ogni file che viene scaricato da uTorrent.
Il primo passo è quello di creare un'app su dropbox!
Potete utilizzare le credenziali dell'app che io stesso ho creato, oppure procedere e crearne una vostra, quindi sostituire nel codice in python l'app_key o l'app_secret.
Nel caso vogliate procedere realizzando una vostra app, recatevi sulla console degli sviluppatori di dropbox e cliccate su Create App
Ora che l'app è stata creata, per poter far funzionare lo script in python abbiamo bisogno dell'sdk di dropbox. Che dobbiamo installare come modulo esterno. In questo modo tramite pip (per versioni di python 3 o superiori):
import sys
import os
import time
import webbrowser
import re # regular expression
import dropbox # C:\Python34>python -m pip install dropbox
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
# Getting started with Dropbox in Python: https://www.dropbox.com/developers/core/start/python
app_key = 'xmi@@@@@@@'
app_secret = 'i2cnfc@@@@@@@@'
flow = dropbox.client.DropboxOAuth2FlowNoRedirect(app_key, app_secret)
# Occhio è importante che l'access token venga conservato in modo sicuro.
token_file = "./access_token.txt" #file che contiene l'access token
if os.path.isfile(token_file):
f2=open(token_file, 'r')
access_token = f2.read()
f2.close()
else:
f2=open(token_file, 'w+')
# Have the user sign in and authorize this token
authorize_url = flow.start()
print('1. Go to: ' + authorize_url)
webbrowser.open(authorize_url) # apriamo nel browser automaticamente l'URL.
print('2. Click "Allow" (you might have to log in first)')
print('3. Copy the authorization code.')
code = input("Enter the authorization code here: ").strip()
# This will fail if the user enters an invalid authorization code
access_token, user_id = flow.finish(code)
f2.write(access_token) # scriviamo l'access token nel file
f2.close()
client = dropbox.client.DropboxClient(access_token)
print('linked account: ', client.account_info())
def ripulisci(stringa):
stringa = stringa.strip()
stringa = stringa.lower()
words_to_filter = ["dvdrip", "bdrip", "satrip", "hdrip", "divx", "xvid", "bluray", "ld", "ac3", "mp4", "x264", "mkv", "1080p", "480p"]
for x in words_to_filter:
stringa = stringa.replace(x, "").strip()
stringa = re.sub(r'\s+', ' ', stringa) # rimuoviamo spazi bianchi all'interno della stringa
return stringa
if len(sys.argv) > 1:
titolo = ""
sys.argv.pop(0) # rimuoviamo nome script py
for x in sys.argv:
if x != "##":
titolo = titolo + x + " "
else:
break
titolo = ripulisci(titolo)
print(titolo)
# salviamo il titolo in append al file su dropbox...
try:
# file gia' presente, aggiorniamo:
f, metadata = client.get_file_and_metadata('/downloaded_files.txt')
out = open('./downloaded_files.txt', 'wb') # scarichiamo file aggiornato
out.write(f.read())
out.close()
f2 = open('./downloaded_files.txt', 'a+')
print(titolo, file=f2) # aggiungiamo nuovo titolo
f2.close()
f2 = open('./downloaded_files.txt', 'rb')
response = client.put_file('/downloaded_files.txt', f2, overwrite=True) # upload file aggiornato
print('Uploaded: ', response)
f2.close()
f.close()
while True:
try:
os.remove('./downloaded_files.txt') # rimuoviamo file locale
break
except:
print(sys.exc_info()[0])
time.sleep(3) # se non ci riusciamo potrebbe essere ancora in upload, aspettiamo.
except dropbox.rest.ErrorResponse:
# file non trovato lo creiamo.
f = open('downloaded_files.txt', 'a+')
print(titolo, file=f)
f.close()
f = open('downloaded_files.txt', 'rb')
response = client.put_file('/downloaded_files.txt', f)
print('Uploaded: ', response)
f2.close()
f.close()
while True:
try:
os.remove('./downloaded_files.txt') # rimuoviamo file locale
break
except:
print(sys.exc_info()[0])
time.sleep(3) # se non ci riusciamo potrebbe essere ancora in upload, aspettiamo.
else:
print("Nessun parametro in ingresso...")
Consigliamo di eseguire lo script in python, la prima volta facendoci doppio click sopra, così da aprire la scheda del browser dove ci chiederà di autenticarci e di acconsentire all'uso dell'app:
Dopodichè inseriamo il codice d'autorizzazione nello script python e diamo l'invio.
In questo modo viene creato un file access_token.txt nella stessa cartella in cui risiede lo script, che conterrà il token per l'accesso all'app e di conseguenza al file presente nel proprio account dropbox in cui verranno inseriti man mano i files che vengono scaricati tramite utorrent.
Ottenuto il token, passiamo a configurare uTorrent, Opzioni > Impostazioni > Avanzate > Esegui programma:
Occhio a inserire, dopo il percorso allo script python, il parametro %N e il simbolo di delimitazione ##, oltre il quale potete inserire altri parametri, quindi modificare il codice, e sbizzarrirvi.


