Ho voluto sperimentare un metodo alternativo di pubblicazione automatica su Twitter passando dal mio NAS anziché da IFTTT (che a dirla tutta non mi dava la possibilità di controllare una delle condizioni da me desiderate) o alternative già presenti sul mercato. Ho messo mano a PHP e Bash ancora una volta, lasciando che sia il NAS a fare il lavoro sporco programmato quotidianamente tramite utilità di pianificazione. Io ti racconto la mia esigenza e relativa esperienza, sta a te vederci un possibile utilizzo per qualcosa che ti riguarda.
L’esigenza
Dato un numero di giorni mancanti a una certa data (quindi in aggiornamento almeno una volta ogni 24h), ho bisogno di pubblicare un tweet quotidiano, come si trattasse di un conto alla rovescia. Scopro il servizio gratuito offerto da timercheck.io di Eric Hammond e decido di richiamarlo tramite PHP e l’aiuto della libreria twitteroauth di Abraham Williams, perché a vedere ciò che offre IFTTT e i trigger data/ora, Twitter e Webhooks non riesco a fare esattamente ciò che cerco.
Di cosa c’è bisogno
In realtà qualcosa è stato già dichiarato, ma ecco l’elenco della spesa:
- Un NAS Synology o una qualsiasi macchina Linux-based (penso a un Raspberry, per dire), io comunque farò riferimento al primo citato.
- PHP 7 (disponibile nel Synology Package Manager) con estensione
openssl
. - Te la ricordi l’utenza limitata che ho creato nell’articolo dedicato alla Surveillance Station? Ecco, ho riutilizzato la cartella del suo profilo (nell’esempio:
/var/services/homes/api_user
). Qui ho creato una cartella chiamatatwitter-php-master
all’interno della quale ho inserito gli script di cui ti parlerò dopo. - La libreria twitteroauth di Abraham Williams disponibile su GitHub.
- Un account Twitter e relativa autorizzazione alla creazione / uso di applicazioni tramite apps.twitter.com (devi essere riconosciuto come sviluppatore).
Provo a dare per assodato che tu sappia ciò di cui stiamo parlando e salto a piè pari la creazione di un account Twitter e del profilo da sviluppatore, così come il modulo PHP 7 (ma ti parlerò dell’estensione relativa all’OpenSSL, tranquillo). Se qualcosa non ti è chiara o se non conosci un particolare passaggio non esitare a lasciare un commento in fondo all’articolo, proverò a darti una mano per quanto mi è possibile :-)
Detto ciò, partiamo.
Abilita il modulo OpenSSL su PHP 7
Collegati via SSH al tuo NAS (non sai come fare? Guarda qui), quindi passa all’utenza di root tramite un sudo -i
seguito da invio, inserisci la password della tua utenza amministrativa e premi invio (non sai di cosa sto parlando? Guarda qui). Spostati ora in /usr/local/etc/php70
e modifica il file php.ini
(esempio: vi php.ini
). Ora:
- cerca la stringa
extension_dir = "/usr/local/lib/php70/modules"
- Aggiungi subito sotto l’abilitazione di
openssl
:
extension=openssl.so
- Salva il file e chiudilo (tasto
ESC
, poi:wq
seguito da invio). - Crea una copia del modulo
openssl.so
tramite un
cp /volume1/@appstore/PHP7.0/usr/local/lib/php70/modules/openssl.so /usr/local/lib/php70/modules/
- Torna ora nel Gestore Pacchetti di Synology e riavvia PHP 7.
Tutto questo ti permetterà di evitare di incorrere nell’errore che qui di seguito ti mostro (da me ottenuto quando ho lanciato lo script di bash per la prima volta, dopo essermi dimenticato di abilitare SSL sul PHP del mio NAS):
Crea il conto alla rovescia tramite timercheck.io
Il funzionamento di questo semplicissimo servizio web è spiegato abbondantemente nell’articolo del suo stesso autore. Io sarò più breve: una giornata da 24 ore è composta da 86400 secondi (Google semplifica le cose), qui trovi un tool per il calcolo dei giorni tra due date, il gioco è praticamente fatto.
Trasforma il numero di giorni in secondi, quindi crea un URL univoco tramite timercheck.io che possa restituirti un output json contenente ciò che a te serve (il tempo che rimane) ogni volta che intendi visitare quell’URL tramite browser e non solo (nel mio caso lo richiamo proprio dallo script PHP di cui ti parlerò tra breve). Un esempio? timercheck.io/Test-Gioxx.org/60 crea un conto alla rovescia che dura un minuto, visitando semplicemente timercheck.io/Test-Gioxx.org e aggiornando la pagina noterai che il conto alla rovescia avanzerà portandosi sempre più verso lo zero (nel campo seconds_remaining
), tutti i dati in json resteranno disponibili fino allo scadere di quel timer, e questo è proprio ciò che ti serve.
È caldamente consigliato creare un URL quanto più difficile da indovinare o replicare, questo perché in caso contrario chiunque potrà modificarlo o resettarlo al posto tuo, è un servizio totalmente aperto a tutti, senza gerarchie o complicati sistemi di autorizzazione. Accetti un’idea che credo possa tornarti utile? Genera un contatore nuovo con un nome qualsiasi e una durata di 10 secondi, copia il suo request_id
e crea un nuovo contatore con il nome che ti interessa al quale farai seguire l’ID copiato (esempio: timercheck.io/Test-Gioxx.org-dc8a395c-10d7-11e9-b585-175833651ae5/60), questo è certamente un URL molto più univoco di quello da te precedentemente pensato.
Il tuo contatore è pronto, puoi procedere verso lo script PHP che si occuperà di lanciare il tuo tweet in rete.
post-tweets.php
Uno script PHP che troverà posto all’interno della cartella /var/services/homes/api_user/twitter-php-master
e che conterrà le istruzioni necessarie per inviare il cinguettio sulla piattaforma. Prima però di dedicare la giusta attenzione a questo specifico script, devi scaricare una copia aggiornata della libreria twitteroauth di Abraham Williams, puoi farlo con un semplice clic qui. Scompatta il contenuto del file ZIP all’interno della cartella twitter-php-master
(non ripeto la solita posizione completa, dai!), non toccare null’altro, non serve.
Torniamo a quello che per comodità chiamerò post-tweets.php
, lo script che si occuperà di pubblicare il tweet. Ti mostro il contenuto del mio, rimuovendo i dettagli personali ma mantenendo l’esempio testuale:
<?php | |
require_once "autoload.php"; | |
use Abraham\TwitterOAuth\TwitterOAuth; | |
// API @TUOACCOUNTTWITTER | |
define('CONSUMER_KEY', 'XXX'); | |
define('CONSUMER_SECRET', 'XXX'); | |
define('ACCESS_TOKEN', 'XXX'); | |
define('ACCESS_TOKEN_SECRET', 'XXX'); | |
$json = file_get_contents('https://timercheck.io/Test-Gioxx.org/60'); | |
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); | |
// Credits for json decode: https://stackoverflow.com/questions/15617512/get-json-object-from-url | |
$obj = json_decode($json); | |
if ($obj->status == "ok") { | |
$secondi = $obj->seconds_remaining; | |
$giorni = $secondi / 86400; | |
$status = 'Countdown ⏰: -'.round($giorni).'. Buongiorno! ☕'; //text for your tweet. | |
$post_tweets = $connection->post("statuses/update", ["status" => $status]); | |
} else { | |
$status = 'Buongiorno! ☕'; //text for your tweet. | |
$post_tweets = $connection->post("statuses/update", ["status" => $status]); | |
} | |
?> |
Ciò che dovrai ritoccare riguarderà ovviamente i parametri personali e il testo da inviare online. Dovrai specificare CONSUMER_KEY
, CONSUMER_SECRET
, ACCESS_TOKEN
e ACCESS_TOKEN_SECRET
dell’applicazione che potrà scrivere impersonando il tuo utente, aggiungere il timer da tenere d’occhio (nell’esempio ho mantenuto https://timercheck.io/Test-Gioxx.org/60
, a te toccherà specificare qui il tuo timer) e modificare il testo da pubblicare in base alla condizione del countdown: se questo è attivo o se è terminato (lo posso fare monitorando uno dei valori output del json, in questo caso lo status).
Piccola nota di finezza è il round() applicato al calcolo dei giorni (numero dei secondi residui diviso 86400), così da evitare di far comparire dei decimali nel tweet.
Il risultato dovrebbe assomigliare a questo:
Countdown ⏰: -183. Buongiorno! ☕
— Giovanni (@Gioxx) January 5, 2019
Programmare l’operazione
Hai terminato tutta la preparazione, non ti resta che automatizzare il processo tramite Utilità di pianificazione e un banalissimo script bash per rendere tutto più immediato:
#!/bin/bash | |
######## Personal configuration | |
twdaily='/usr/local/bin/php70 /var/services/homes/api_user/twitter-php-master/post-tweets.php'; | |
goodmorning=$($twdaily); | |
exit 0; |
Salva il file bash nella solita cartella (twitter-php-master
), avvia l’utilità di pianificazione Synology e crea una nuova operazione programmata da far girare ogni giorno all’ora che preferisci (io ho scelto le 8:00):
Ce l’hai fatta, salvo errori sei appena riuscito a programmare la pubblicazione di un tweet tramite il tuo account. Il mio è un esperimento per imparare qualcosa di nuovo, utile per arrivare a una data per me molto importante, e nel tuo caso qual è la giustificazione per aver avviato un nuovo contatore con pubblicazione su Twitter automatizzata? :-)
Buona giornata!
Riconoscimenti: artisansweb.net/tweet-twitter-php
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)