Site icon Gioxx.org

Pubblicare su Twitter: farlo da NAS Synology (e non solo)

Pubblicare su Twitter: farlo da Synology (e non solo) 2

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:

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:

cp /volume1/@appstore/PHP7.0/usr/local/lib/php70/modules/openssl.so /usr/local/lib/php70/modules/

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]);
}
?>
view raw post-tweets.php hosted with ❤ by GitHub

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:

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;
view raw tw_daily.sh hosted with ❤ by GitHub

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

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

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

Condividi l'articolo con i tuoi contatti:
Exit mobile version