16335 Letture

Sviluppo: interagire con Twitter utilizzando il protocollo OAuth

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:

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:

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.

La seconda puntata è consultabile facendo riferimento a questa pagina.


  1. Avatar
    marcolinux7
    02/12/2013 18:11:03
    M'hai risolto un problema Epico!!! Sei grandioso! Ti sei fatto un nuovo amico, guarda, non so come ringraziarti! :D :D :D :D :D :D :adoro:
  2. Avatar
    luca87
    21/02/2011 08:46:21
    Ciao e complimenti x l'articolo! Volevo chiederti una cosa.. Con una sola applicazione twitter, è possibile pubblicare update di status a nome di 2 utenti diversi? Cioè, è possibile ottenere il token di un utente non "proprietario" di una applicazione, per poi pubblicare a suo nome? Una cosa del tipo :$twitteroauth->post('statuses/update', array('status' => 'Prova posting OAuth', 'token' => '$token_mio_amico'));
Sviluppo: interagire con Twitter utilizzando il protocollo OAuth - IlSoftware.it