Salvare tweet in un CSV con Python

Qualche tempo fa volevo provare ad eseguire esperimenti con dei tweet raccolti in base a delle parole chiave. Avevo perciò bisogno di salvarli in un formato di testo che fosse facilmente analizzabile. Approfittando di questa "necessità", ho deciso di rispolverare il buon vecchio Python e provare a tirare su un progetto il più strutturato ed ordinato possibile nel tentativo di migliorare le mie capacità di programmazione.

Il task in sé non è dei più difficili, e non so alla fine se effettivamente ho raggiunto l'obiettivo prefissato di creare un codice leggero, manutenibile e leggibile. Tuttavia, ho deciso di presentarlo in questo breve articolo.
Tutto il codice è stato caricato sul nostro repository github.

Scopo del progetto

Utilizzando le API messe a disposizione da Twitter, vogliamo raccogliere tweet di un certo argomento e salvarli in un file CSV.

Credenziali

Per prima cosa, dobbiamo ottenere le credenziali per poter utilizzare le API di Twitter. Per fare ciò, avremo bisogno di un account Twitter e di seguire le istruzioni sul sito degli sviluppatori. Al termine della procedura, avremo quattro chiavi da utilizzare per l'autenticazione:

  • Consumer Key
  • Consumer Secret
  • Access Token Key
  • Access Token Secret

Limitazioni

  • Il programma al momento supporta due possibili ricerche: per parola/e chiave o per utente.
  • Con la versione gratuita delle API di Twitter potrete raccogliere al massimo 100 tweet con una ricerca per keyword o 200 tweet chiedendo direttamente i tweet di uno specifico utente.

Componenti Python

Il progetto si basa sulle seguenti componenti Python:

  • virtualenv
  • pandas
  • python-twitter
  • argparse
  • configparser

Poiché di virtualenv e pandas abbiamo già trattato sul nostro sito, vediamo brevemente gli altri tre moduli utilizzati dal programma.

python-twitter

Il modulo python-twitter è un wrapper python verso le API di Twitter. Il pacchetto è utilizzato all'interno del progetto nel modulo di gestione dei tweet. Le classi e metodi chiamati sono:

  • Status: classe che rappresenta un tweet.
  • User: classe che rappresenta un utente Twitter.
  • GetSearch(): metodo che accetta un termine di ricerca (term=allafinedelpalo) o un indirizzo di ricerca (raw_query='q=allafinedelpalo') e restituisce una lista di oggetti Status relativi alla parola chiave cercata.
  • GetUserTimeline(): metodo che prende in ingresso il nome di un account Twitter (screen_name='allafinedelpalo') e restituisce una lista di oggetti Status presenti nella bacheca dell'utente cercato.

argparse

Grazie al modulo argparse è possibile gestire gli argomenti in ingresso ad un programma python in modo snello ed elegante. Il pacchetto mette a disposizione una serie di funzionalità utili sia alla gestione dei parametri di input che alla gestione dei messaggi di help e usage dei programmi. Mostriamo nel seguito un estratto della classe main.py dove viene definito l'oggetto che gestirà i parametri in ingresso al programma.

configparser

Il modulo configparser è utilizzato per gestire file di configurazione in differenti formati (.ini, .xml, .yaml, .json, ...). All'interno dei pacchetti di gestione dei tweet e di gestione del csv si trova una cartella resources. Lo scopo della cartella è di raccogliere tutti i file che non contengono codice, ma che sono utilizzati dal programma. In particolare, per la gestione dei tweet dovrete creare un twitter_api_credentials.ini contenente i valori delle vostre quattro credenziali di autenticazione per utilizzare le API di Twitter, ed aggiungere il file alla cartella resources ci >tweets_handler/. Per il modulo di gestione dei csv, troverete invece il file interesting_attributes.ini in cui dovrete specificare gli attributi dell'oggetto Status che vorrete salvare nel CSV finale. Entrambi i file saranno letti dal programma utilizzando l'oggetto ConfigParser del modulo omonimo.

Inizializzare il programma

Una volta che avrete clonato o scaricato il programma dal nostro repository github, dovrete procedere alla creazione del suo ambiente virtuale e all'installazione dei moduli elencati nel file requirements.txt.
virtualenv env-twi
source env-twi/bin/activate
pip install -r requirements.txt

Struttura del programma

Oltre al corretto funzionamento dello script, lo scopo del lavoro era anche cercare di creare un progetto gestibile e leggibile. Per questo motivo ho deciso di seguire il più possibile le direttive PEP8 per python e di organizzare le due fasi dello script in due sotto-pacchetti, come mostrato nella struttura ad albero che segue:

Utilizzo del programma

Grazie al modulo argparse, digitando python main.py -h vi sarà mostrato l'usage del programma:

Controllando che sia attivato l'ambiente virtuale, provate adesso a digitare il seguente comando:
python main.py by-user ThePSF .
Sarà creato un file CSV con gli ultimi 200 tweet del canale Twitter di Python Software.

Sviluppi futuri

Sebbene il programma sia già funzionante, ci sono ancora due aspetti che vorrei sistemare in futuro:

  • Gestire altri attributi di Status oltre a user, created_at e text.
  • Strutturare in maniera corretta le possibili eccezioni del programma: nella release v.1.0.1 ho banalmente aggiunto la gestione del caso in cui non siano trovati tweet per la parola chiave cercata.

Se avete suggerimenti, dubbi, domande o precisazioni, vi invito come sempre a lasciare un commento in fondo a questo articolo.

Alessio Antonielli

Ingegnere informatico, appassionato di cinema, musica, videogiochi e serie tv. Insomma, le solite cose che vi aspettereste da un ex studente di Ingegneria Informatica, giusto per rafforzare lo stereotipo…

Salvare tweet in un CSV con Python ultima modifica: 2017-10-10T10:49:57+00:00 da Alessio Antonielli


Advertisment ad adsense adlogger