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

creazione app su dropbox

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):

Installare SDK Dropbox in Python

 
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:

download monitor

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:

configurazione utorrent 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.