Da giugno 2013 Twitter ha cambiato definitivamente la sua politica di accesso al flusso dei tweets in sola lettura passando alla nuova versione di Twitter OAuth, API v1.1. In breve significa che ogni accesso allo stream dei dati, incluso timeline e ricerca, deve essere autenticato utilizzando un sistema conosciuto com Oauth, un protocollo di autenticazione open source ormai consolidato e santardizzato. Le nuove Api sono state introdotte, principalmente , al fine di permettere a Twitter di monitorare più accuratamente l'uso dei loro feed.

Nonostante Twitter abbia annunciato questo cambiamento con circa un anno di anticipo sono stati molti i disagi creati e tanti plugin hanno smesso di funzionare: uno su tutti Jquery Tweet!

Su richiesta di alcuni clienti ho cercato un modo semplice per far funzionare questo ottimo plugin anche con la versione API 1.1 evitando così di rimpiazzarlo con un altro script.

Per questo motivo segue un piccolo tutorial riguardante l'integrazione di jQuery Tweet con il nuovo metodo di autentizacione imposto da Twitter: una soluzione molto diretta e spartana come vedrete ma decisamente funzionale!

 

Per autenticarsi tramite Oauth sono necessari sue passaggi.

 

  1. Creare e configurare una applicazione sul centro sviluppatori di Twitter e recuparare alcune chiavi che vi verranno fornite.

    Per fare questo è necessario seguire i seguenti passi:

    1. Accedi a https://dev.twitter.com/apps/ e loggati con il tuo account che non necessariamente deve essere lo stesso dello stream che vuoi pubblicare;

    2. Crea una nuova applicazione cliccando sul tasto “Create new application” e completa tutte le informazioni richieste;

    3. Nella schermata successiva cliccando su “create my access token” ti verranno fornite una serie di Consumer Key di cui devi prendere nota (Consumer key, Consumer secret, Access token and Access token secret);

    4. Fatto! Ora puoi usare questa stessa applicazione e le relative chiavi per tutti gli script che richiedono una autenticazione.

  2. Creare una chiamata lato server al feed dati, usando queste chiavi.

    Per effettuare la chiamata lato server ho usato una libreria PHP chiamata twitteroauth creata da @abraham e disponibile a questo indirizzo.

     

    1. Scompatta e importa la libreria, quindi crea un file PHP contenente il seguente codice

      <?php

      session_start();

      require_once("twitteroauth/twitteroauth/twitteroauth.php");

      $twitteruser = "username";

      $numberoftweets = 3; // number of tweets

      $consumerkey = "stringtoreplace";

      $consumersecret = "stringtoreplace";

      $accesstoken = "stringtoreplace";

      $accesstokensecret = "stringtoreplace";

      function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {

        $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);

        return $connection;

      }

      $connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);

      $tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$twitteruser."&count=".$numberoftweets);

      echo json_encode($tweets);

      ?>

    2. Rimpiazza le key con i valori che hai annotato precedentemente e chiamando la pagina creata dovresti poter visualizzare gli ultimi tweet in formato json.

    3. Apri il file jquery.tweet.js e commenta ( o rimpiazza ) il contenuto della funzione build_api_url() con il seguente codice

      return http://www.tuosito.it/twitter_feed.php // url della pagina in cui viene creato il flusso json di dati
    4. Fatto! Ora lo stream dei tweet dovrebbe funzionare come in precedenza.

 

CAKEPHP

Per chi invece , come il sottostritto, fosse un fan incallito di CAKEPHP e volesse integrare quanto spiegato sopra all'interno della logica MVC di questo meraviglioso framework è sufficiente seguire i passi successivi:

  1. Importare la libreria twitteroauth come vendor e creare una funzione in un controller a vostra scelta come nell'esempio sottostante

    function tweeter_feed() {

    App::import('Vendor', 'twitteroauth/twitteroauth/twitteroauth');

    $twitteruser = "username";

    $numberoftweets = 3; // number of tweets

    $consumerkey = "stringtoreplace";

    $consumersecret = "stringtoreplace";

    $accesstoken = "stringtoreplace";

    $accesstokensecret = "stringtoreplace";

    function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {

    $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);

    return $connection;

    }

    $connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);

    $tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$twitteruser."&count=".$numberoftweets );

    echo json_encode($tweets);

    $this->autoRender = false;     // important to avoid view rendering

    }

     

  2. Rimpiazzare nel file jquery.tweet.js il contenuto della funzione build_api_url() con l'url della pagina come nel caso precedente.