Dopo averlo ricordato più volte nei mesi scorsi, Twitter è passato all’azione gettando nel cestino il metodo di autenticazione di base il cui utilizzo è continuato ad essere tollerato sino al 1° settembre. Chi ha sviluppato meccanismi per il “posting” automatico di contenuti su Twitter (ad esempio, da applicazioni “stand alone” oppure da una pagina web dinamica) e non ha aggiornato l’algoritmo impiegato per l’invio e la pubblicazione delle informazioni, vedrà sempre restituito il messaggio seguente: “401 – Non autorizzato“.
Com’è possibile procedere per tornare a “cinguettare” su Twitter, per esempio, da uno script PHP?
La prassi è molto simile a quella che a suo tempo avevamo descritto nel caso di Facebook (ved., in merito, questo nostro articolo).
Tutti gli sviluppatori dovranno registrare una nuova applicazione su Twitter e ricorrere all’uso di OAuth, protocollo aperto che di fatto sostituisce definitivamente l’obsoleta autenticazione di base. Rispetto a quest’ultima il vantaggio in termini di sicurezza è innegabile: mentre prima le credenziali di accesso al social network viaggiavano insieme con ciascuna richiesta http/https, adesso ciò non avviene più. Anzi, è addirittura possibile modificare la propria password senza che ciò abbia impatto sull’applicazione (non si dovrà più modificarla o comunque “informarla” del cambio di password applicato).
Come primo passo, è necessario effettuare il login su Twitter quindi accedere a questa pagina creando una nuova applicazione. In corrispondenza del campo Tipo di applicazione bisogna accertarsi di scegliere la seconda opzione che, una volta selezionata, fa apparire – appena più sotto – il campo Callback URL. Qui va indicato l’URL verso il quale dovrà essere reindirizzato il browser ad autenticazione avvenuta con successo: si può digitare, ad esempio, http://127.0.0.1/twitter_login.php
.
Come ultimo passo, va selezionata l’opzione Read & Write: così facendo, l’applicazione avrà accesso sia in scrittura che in lettura.
Dopo aver inserito il CAPTCHA e cliccato su Register application, appariranno le condizioni per l’utilizzo delle API di Twitter che dovranno essere accettate cliccando su I accept. Una schermata riassuntiva fungerà da riepilogo per le varie impostazioni dell’applicazione appena creata.
E’ importante notare la presenza delle seguenti indicazioni: Consumer key e Consumer secret. Sono due dati che serviranno per l’autenticazione, più avanti.
Supponiamo di voler realizzare uno script PHP che ci consenta di autenticarci e di pubblicare un contenuto sul nostro profilo Twitter. Grazie ad una libreria (twitteroauth) distribuita sul web è possibile realizzare in pochi minuti l’intera procedura: è sufficiente collegarsi con questa pagina e prelevare la versione più aggiornata della libreria.
Nel nostro caso abbiamo installato un web server su una nostra macchina creato un nuovo sito web e copiato la sottocartella twitteroauth
contenuta all’interno del file compresso della libreria omonima.
Se non si dispone di un web server locale ma si dispone di uno spazio web in hosting presso un qualunque provider che supporti gli script PHP, è possibile creare una nuova cartella – ad esempio collegandosi via FTP – e caricarvi, al suo interno, la directory twitteroauth
. La sottocartella twitteroauth
contiene i file OAuth.php
e twitteroauth.php
.
Fuori dalla cartella twitteroauth
, è necessario creare due file: l’uno chiamato twitter_login.php
, l’altro twitter_oauth.php
.
Nel file twitter_login.php
si incolli quanto segue:
<?php
require("twitteroauth/twitteroauth.php");
session_start();
$twitteroauth = new TwitterOAuth('CONSUMER_KEY', 'CONSUMER_SECRET');
// Richiesta dei token di autenticazione e URL per il reindirizzamento
$request_token = $twitteroauth->getRequestToken('http://localhost/twitter_oauth.php');
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
if($twitteroauth->http_code==200){
$url = $twitteroauth->getAuthorizeURL($request_token['oauth_token']);
header('Location: '. $url);
} else {
die('Si è verificato un errore inatteso');
}
?>
Al posto di CONSUMER_KEY
e CONSUMER_SECRET
vanno specificate le stringhe alfanumeriche precedentemente annotate.
Lo script PHP provvede ad istanziare un oggetto TwitterOAuth, definito per mezzo della libreria invocata all’inizio del file quindi a richiedere i cosiddetti token di autenticazioni, salvati poi in due variabili di sessione.
Nel caso in cui Twitter restituisca il codice HTTP 200 (tutto è andato bene), lo script provvede ad effettuare un redirect verso l’indirizzo http://localhost/twitter_oauth.php
. Tale URL va sostituito con l’indirizzo corretto.
Nella stessa cartella in cui si è salvato il file twitter_login.php
, è necessario creare un secondo script PHP: twitter_oauth.php
. All’interno di esso va incollato il codice seguente:
<?php
require("twitteroauth/twitteroauth.php");
session_start();
if(!empty($_GET['oauth_verifier']) && !empty($_SESSION['oauth_token']) && !empty($_SESSION['oauth_token_secret'])){
// INIZIO OPERAZIONI DA COMPIERE SU TWITTER
$twitteroauth = new TwitterOAuth('CONSUMER_KEY', 'CONSUMER_SECRET', $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
$access_token = $twitteroauth->getAccessToken($_GET['oauth_verifier']);
$_SESSION['access_token'] = $access_token;
// Recupera le informazioni sull'utente
$user_info = $twitteroauth->get('account/verify_credentials');
print_r($user_info->screen_name);
$twitteroauth->post('statuses/update', array('status' => 'Prova posting OAuth'));
// FINE OPERAZIONI DA COMPIERE SU TWITTER
} else {
// C'è qualcosa che non va. Torna alla pagina di login.
header('Location: twitter_login.php');
}
?>
In questo caso, lo script controlla il formato della query in ingresso controllando che non ci siano parametri vuoti quindi crea un’istanza di TwitterOAuth specificando i token precedentemente ottenuti.
Tutto è pronto: con l’istruzione print_r($user_info->screen_name);
viene mostrato il nome dell’utente scelto per l’account di Twitter. Con l’istruzione print_r($user_info->id);
si può ottenere, invece, il numero identificativo abbinato all’account.
La successiva istruzione ($twitteroauth->post('statuses/update', array('status' => 'Prova posting OAuth'));
) s’incarica di pubblicare la frase “Prova posting OAuth” sul profilo Twitter dell’utente.
Per verificare che lo script sia funzionante, è sufficiente collegarsi con l’indirizzo http://urldelserverweb/nomedirectory/twitter_login.php
, effettuare il login a Twitter (se non si fosse ancora provveduto), quindi cliccare sul pulsante Acconsenti alla comparsa della schermata Una applicazione desidera collegarsi al tuo account:
A questo punto, dopo qualche istante di attesa, dovreste trovare la frase “Prova posting OAuth” immediatamente pubblicata sul vostro profilo Twitter.
Una volta che l’esperimento sarà condotto a termine con successo, si potrà provvedere a cancellare il post di prova dall’account di Twitter.
Nella prossima puntata vedremo come caricare automaticamente una serie di informazioni in modo automatico. Utilizzeremo, allo scopo, il materiale proveniente da un feed RSS.