Cose che ho letto

mercoledì 27 febbraio 2013

Python e Fecebook, come loggarsi, le API e il parsing

Lo scopo di questo articolo è mostrare con qualche semplice esempio, come sia possibile far interagire Python e Facebook. Nello specifico vedremo come loggarci, controllare la presenza di notifiche e leggerle.


Mettiamo in chairo che non è una guida passo passo, ma un'infarinatura generale accompagnata da nozioni ed esempi funzionanti.

 Fino a poco tempo fa era relativamente semplice, in quanto facebook stesso metteva a disposizione gli strumenti, come sdk, librerie e documentazione, per lavorare su applicazioni facebook con il pitone. Per qualche motivo il supporto è stato chiuso, ed è il motivo per cui molte librerie che troverete online non funzioneranno i siti di riferimento non vengono più aggiornati da tempo.
La soluzione è quindi adottare qualche escamotage per raggiungere i nostri scopi.

Innanzitutto scaricate questo archivio con i 2 programmi di esempio che ho preparato.

Il primo passo è comune ad entrambi i metodi che voglio illustrarvi oggi, ossia effettuare il login con il nostro programma. La procedura è quella normale, ossia aprire un browser e compilare i campi, solo che invece del classico firefox o chrome, useremo un minibrowser per python, Mechanize.

Metodo Parsing

Il file è ben commentato ed è abbastanza facile capire la struttura del programma ed apportare notifiche. Comunque per farla breve, una volta creato il browser con le sue varie opzioni, apriamo la versione mobile facebook, in quanto più leggera da elaborare, e quindi adatta ai nostri scopi, e compiliamo i campi necessari per accedere.
Cominciamo la fase di parsing della pagina cercando la parola "Notifiche", di seguito a questa parola, controlliamo la presenza di un numero, se questo è presente ci sono delle notifiche. Stampiamo a a video questo numero con annessa data e ora, se invece non ci sono notifiche, attendiamo un tot prima di ricaricare la pagina e ricontrollare.
Per leggere il contenuto, ci spostiamo nella pagina notifiche, e cerchiamo nel testo le strighe che delimitano il titolo della notifica, per esempio sarebbe bello <notifica>A Marco piace il tuo link</notfica>, il discorso non è così purtroppo, però tramite vie sperimentali ho appurato quali sono gli identificatori usati da facebook. Ripetiamo questa operazione tante volte quante sono le notifiche che ci aspettiamo di trovare dopo la lettura della home.
NB: aprendo questa pagina settiamo come lette le notifiche!
Una volta ottenuta la stringa contenente la notifica, la puliamo da tutto ciò che resta del linguaggio che forma la pagina e otteniamo una bella notifica da stampare a video.

I vantaggi del parsing sono che non richiede chissà quali basi di programmazione e di come lavorare con le pagine web, ma le problematiche che comporta sono, una scarsa compatibilità a lungo andare, infatti ogni tanto il linguaggio della pagina potrebbe essere aggiornato, il numero limitato delle operazioni che si possono effettuare, l'eccessiva quantità di codice da scrivere per eseguire operazioni semplici, e la scarsa riusabilità di quest'ultimo.

Metodo API

Se state leggendo vuol dire che sapete già cosa sono, o che comunque ve lo state andando a leggere in questo momento.
Per usare le API è necessario disporre di un applicazione, e dei relativi dati di accesso. Cominciate quindi a creare la vostra applicazione a questo indirizzo.
Per i nostri scopi non servono impostazioni particolari,
  • dategli semplicemente un nome a vostro piacimento
  • impostate Website with Facebook Login
  • lasciate tutto il resto come sta.
Lo scopo dell'applicazione è fare da tramite tra il programma e i dati dell'utente che accede a facebook e la apre. Esatatmente come quando aprite un gioco e vi chiede l'autorizzazione di accedere alla vostra foto del profilo e all'elenco dei vostri amici.

Anche in questo caso il file è completamente commentato, comunque:

Per interagire con le applicazioni, facebook ha scelto il protocollo OAuth2, che si basa sullo scambio di chiavi di accesso tra il programma e il sito. La prima operazione da fare è quindi procurarsi un access token. Per farlo chiamiamo tramite il nostro minibrowser, uno specifico url a cui passiamo l'id e l'url della nostra applicazione e i permessi che desideriamo avere, nel nostro caso, manage_notification.
Quello che otteniamo è un token a vita breve, 10 minuti circa, per avere qualcosa di più duraturo per i nostri scopi, scambiamo questo token con uno a vita lunga, 2 mesi, chiamando un altro url a cui passeremo il vecchio token e altri dati della nostra applicazione.
Come saprete le API si basano sui metodi GET e POST, ossia ricavare e settare informazioni. Nonostante questa operazione si possa realizzare sempre tramite la chiamata di certi url, risulta più facile appoggiarsi a una libreria, pyface in particolare è la migliore che abbia testato; non fornisce molti strumenti o metodi, ma l'essenziale per lavorare, e risulta stabile e semplice da usare.
Quindi armati del nostro token, siamo liberi di fare il GET nelle nostre notifiche, leggerne il contenuto, ricavarne l'id, ed usarlo per settarle come lette con un POST.

Il bello delle API è che ci si può fare tutto, qualsiasi manipolazione di informazioni vi venga in mente, il brutto è che per usarle serve o una certa esperienza, o parecchio tempo da buttare su google, sui forum, sulla documentazione, su codici non funzionanti, su stupidi esempi a maledire chiunque abbia inventato certi sistemi. Ossia quello che ho fatto io per una settimana =D

Per oggi è tutto, se avete qualche domanda sarò lieto di rispondere nel limite delle mie conoscenze ;)

Stavolta i ringraziamenti vanno al mio amico Frank che mi ha sOpportato mentre imparavo ad usare le api, e a questo utilissimo articolo su come utilizzare il browser per python per costruire un facebook notifier con Arduino, che vi consiglio di leggere per integrare quanto avete appena appreso.



Nessun commento:

Posta un commento