Per chi si fosse perso le puntate precedenti: Parte prima, Parte seconda, Parte terza, Parte Quarta
In questa puntata affrontiamo un tema quasi di diritto della privacy. Il mio sistema twitta un sacco di immagini quando è attivo, ma a me, una volta viste, non piace molto che queste restino sui server di Twitter, anche se l’account è riservato.
Oggi mettiamo su un pezzetto di codice che, se attivato, cancellerà tutti i tweet dell’utente gestito dal motion control. Ho creato una procedura separata dal resto del sistema (che vedremo tra qualche puntata) perché l’attività, sopratutto se i tweet sono molti, ci mette parecchio tempo, più del minuto di intervallo tra un controllo dei comandi e l’altro.
In definitiva, questo sarà l’algoritmo
- mando il comando via DM per cancellare i tweet
- il sistema mi risponde che ha impostato la procedura e che sarà eseguita al massimo entro un’ora
- viene generato un file specifico che farà da “semaforo” per la procedura che cancella i tweet
- ogni ora la procedura che cancella i tweet viene eseguita
- se il file di semaforo è presente
- i tweet vengono cancellati
- viene mandato un messaggio di conferma
- il file semaforo viene cancellato
- Se il file semaforo non è presente non viene eseguito nulla
Sembra difficile, ma, come il resto del progetto, vi accorgerete che è più facile del previsto.
Create il nuovo file “rimuovitutti.py”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #!/usr/bin/env python2.7 # twitterwin.py by Alex Eames http://raspi.tv/?p=5281 import tweepy import sys import datetime import time import os file_semaforo_cancella = "/home/pi/tweepy/cancella_tutti_tweet" #file creato per autorizzare la cancellazione dei tweet file_di_log = "/home/pi/tweepy/controllo_movimento.log" # file di log del sistema di controllo log = open (file_di_log, "a") utente_dm = "iltuoutente" # Autenticazione twitter consumer_key = 'xxx' consumer_secret = 'xxx' access_token = 'xxx' access_token_secret = 'xxx' auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) # memorizzo il timestamp attuale (cosi' lo metto nei tweet ed evito il blocco dei doppioni) ts = time.time() st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') #memorizzo quanti tweet cancello e quanti falliscono cancellati = 0 errore = 0 #il file di semaforo che autorizza la cancellazione esiste? if os.path.exists(file_semaforo_cancella ): # per ogni tweet che ho inviato for status in tweepy.Cursor(api.user_timeline).items(): #provo a cancellarlo try: api.destroy_status(status.id) log.write(st + " - Tweet rimosso: " + str(status.id) + "\n") cancellati = cancellati + 1 #se non riesco a cancellarlo registro l'errore except: log.write(st + " - Tweet NON rimosso: " + str(status.id) + "\n") errore = errore + 1 #rimuovo il file del semaforo os.remove(file_semaforo_cancella) #invio il DM con il resoconto delle attivita api.send_direct_message(utente_dm,text="Ho rimosso " + str(cancellati) + " tweet. Ho trovato " + str(errore) + " errori - " + st) #memorizzo nel log log.write(st + " - Rimossi " + str(cancellati) + " tweet. Ho trovato " + str(errore) + " errori\n") log.close() |
Questo file dovrà essere eseguito ogni ora (nel nostro caso al 30° minuto di ogni ora) dal nostro fido Raspberry, configuriamo quindi il crontab (ricordate come si fa?) aggiungendo queste due righe
1 2 | # se attivato il semaforo, cancello tutti i tweet, ogni ora 30 * * * * python /home/pi/tweepy/rimuovitutti.py >/dev/null 2>&1 |
Per adesso non c’è la gestione di creazione del file via comandi (la implementeremo nelle prossime puntate), provate a creare un file con un contenuto qualsiasi che si chiami “cancella_tutti_tweet” in “/home/pi/tweepy” e vedrete che pian piano tutti i tweet inviati saranno cancellati dal sistema (lo potete vedere dal file di log)
Ottimo progetto ed ottima guida, cercavo una cosa del genere e tu hai tutte le risposte alle mie domande.
Scrivo in questo post perche’ manca il (continua) al post successivo.
Complimenti ancora.
Grazie davvero! Ho aggiunto il continua 🙂