30

Twitter_API_Logo_Volt

Oggi, arrivato al lavoro, ho trovato una brutta sorpresa. Tutti i siti internet che facevano uso delle API di Twitter per restituire il numero di follower, o semplicemente gli ultimi tweet, non funzionavano più. Presto ho scoperto il motivo… Twitter, proprio oggi, ha disattivato definitivamente la versione 1.0 delle proprie API.

Ancor peggio, le nuove API fanno uso di Oauth per l’accesso al flusso di dati json… tecnologia che non amo particolarmente.

Detto questo vediamo un pò come ho implementato un client php per l’accesso alle API 1.1 di Twitter.

Un po di teoria

La motivazione di Twitter a cambiare la modalità di accesso alle proprie API è quella di avere maggior controllo su chi e come le utilizza.

Il meccanismo, a livello concettuale, è piuttosto semplice. Si registra un’applicazione nella sezione developer del sito e con le chiavi generate si va a richiedere un Access Token, chiave d’accesso ( spesso temporanea e comunque variabile ) che permette di consultare i dati, restituiti, in questo caso, in formato json.

Capito come funziona l’Oauth di Twitter è stato sufficiente dare un’occhiata al modello di autenticazione applicazione sulla documentazione ufficiale per riuscire a creare una classe che semplificasse l’accesso alle API.

La soluzione – Twitter API 1.1 Client per WordPress

Passiamo alla pratica! Scaricate il pacchetto Twitter API 1.1 Client for WordPress che ho caricato su github a questo indirizzo e includete il file class-wp-twitter-api.php nel file functions.php del tema o nel codice del plugin WordPress.

Ora create una nuova applicazione di Twitter a questo indirizzo, cliccando sul pulsante “Create a new application”. Compilate tutti i dati e procedete. Scorrendo il pannello “Details” troverete due codici che ci interessano: Consumer key e Consumer secret. Sono quelli che andremo ad inserire nella nostra richiesta alle API. Fatto questo vi lascio ad un paio di esempi che valgono più di mille parole!

Schermata 2013-06-12 alle 21.25.16

Esempio A – Ottenere gli ultimi 5 tweet di un determinato utente

In questo primo esempio andiamo a fare una query alle API di Twitter per ottenere gli ultimi 5 tweet dell’utente micc1983. Per farlo usiamo le impostazioni di default, ovvero statuses/user_timeline e cache a 30 minuti. Per comporre la query usiamo i parametri che potete trovare a questo indirizzo restituendo infine il risultato come oggetto facendone un var_dump (sono sicuro che poi penserete voi a formattarlo).

<?php

// Includo la classe Wp_Twitter_Api
require_once( 'class-wp-twitter-api.php' );

// Creo un'array con i dati generati da https://dev.twitter.com/apps
$credentials = array(
  'consumer_key' => 'xxxxxxxxxxxxxxxx',
  'consumer_secret' => 'xxxxxxxxxxxxxxxx'
);

// Istanzio la mia classe con le credenziali registrate
$twitter_api = new Wp_Twitter_Api( $credentials );

// Registro la query
$query = 'count=5&include_entities=true&include_rts=true&screen_name=micc1983';

// E la eseguo
$result = $twitter_api->query( $query );

// Infine faccio un var_dump del risultato che conterrà gli ultimi 5 tweet del mio account
var_dump( $result );

Esempio B – Ottenere il numero di follower di un dato utente

Il secondo esempio è un po più complesso in quanto, invece di utilizzare statuses/user_timeline, accede ad una risorsa diversa: users/show. Qua potete trovare una lista completa delle risorse cui potete accedere. Inoltre, per comprendere tutte le possibilità, imposteremo la cache a 24 ore invece della mezzora di default.

<?php

// Includo la classe Wp_Twitter_Api
require_once( 'class-wp-twitter-api.php' );

// Creo un'array con i dati generati da https://dev.twitter.com/apps
$credentials = array(
  'consumer_key' => 'xxxxxxxxxxxxxxxx',
  'consumer_secret' => 'xxxxxxxxxxxxxxxx'
);

// Istanzio la mia classe con le credenziali registrate
$twitter_api = new Wp_Twitter_Api( $credentials );

// Registro la query 
$query = 'screen_name=micc1983';

// ed i parametri necessari ad accedere ai dati utente
$args = array(
  'type' => 'users/show',         // Risorsa utilizzata per accedere ai dati utente (default statuses/user_timeline)
  'cache' => ( 24 * 60 * 60 )     // Imposto la cache a 24 ore (default 30 minuti)
);

// Ora eseguo la query
$result = $twitter_api->query( $query, $args );

// E faccio l'echo del risultato
echo $result->followers_count;

Se vi trovate in difficoltà a costruire la query date un’occhiata alla console di Twitter oppure provate a chiedere nei commenti 🙂

  1. Ciao, ma per chi vuole integrare non utilizzando un plugin WP? Potresti mettere su github un html di esempio, commentato se posibile.. che stampi a video solo l’ultimo tweet,
    Grazie mille
    ciao

    1. Ciao Stefano, il codice del primo esempio fa già quello che hai chiesto ed è sufficiente integrarlo nel tema WordPress, non si tratta di un plugin.
      Per ritornare solo l’ultimo tweet basta cambiare il valore di count alla riga:

      // Registro la query
      $query = 'count=5&include_entities=true&include_rts=true&screen_name=micc1983';
  2. Ciao,

    ho incluso la tua classe, creato la app e inseriti i dati di autenticazione nel tuo codice, ma in risposta (esempio n1. con var dump) ottengo solo in risposta false. Da cosa potrebbe dipendere? C’è modo di attivare una sorta di debug?

    Fabio

  3. Ciao, scusa ma io non sono un grande esperto di queste cose, ma a me servirebbero soltanto i codici “consumer key” e “secret key”, perché li devo inserire in un widget che e intergrato con il io template wordpress.

    Il mio problema e che non riesco ad avere questi codici !!
    Perché quando vado a creare una nuova applicazione su twitter la sezione “Callback URL” mi da sempre errore ! ho provato con l’indirizzo web del sito (e non va bene), solo con il dominio (neanche), che cosa devo inserire ????

    Grazie a tutti.

  4. Ciao, per un progetto universitario devo collegare twitter ad un social network pubblicando gli aggiornamenti di twitter sul social network e viceversa, il tutto programmando in java. Non ho mai fatto niente del genere e ho appena iniziato a vedere cosa sono le api e come funzionano. Potresti suggerirmi un sito in cui viene spiegato tutto dalle basi? Perchè sono proprio a zero e tutto quello che ho trovato mi ha confuso ancora di più le idee.
    Grazi mille!

      1. Posso chiederti un’ultima cosa? Sai dove posso scaricare le API 1.1 per Java?? Perchè quelle di Twitter4j sono riuscita a scaricarle ma non trovo da nessuna parte le API 1.1 per java

        1. Twitter4j è il client che puoi utilizzare per accedere alla versione 1.1 delle API. Non puoi scaricare le API, ma solo accedervi, dato che sono un servizio di Twitter. Non so se sono stato chiaro 😐

          1. Ah ecco, mi aveva confuso quello che c’era scritto sull’home di Twitter4j in cui dice che sono delle librerie non ufficiali. Ma allora il metodo “ufficiale” per accedere alle API di java qual è?
            Ancora un’ultima domanda stupida, come faccio ad utilizzare le API se non so come sono fatte? Mi basta leggere la descrizione delle funzioni che ho trovato a questo indirizzo https://dev.twitter.com/docs/api/1.1? Scusami ma è la prima volta che faccio qualcosa del genere e sono molto confusa!

        2. Ciao Silvia, non riesco a capire perchè mi parli delle API di Java… Java è un linguaccio di programmazione. Twitter4j ti da una serie di strumenti veloci per accedere alle API di Twitter senza dover riscrivere un’interprete ad hoc.

          1. Scusa hai ragione volevo scrivere API di Twitter, mi sono confusa scrivendo il messagggio! 😀 Ok proverò a vedere un pò come funziona Twitter4j, grazie mille per la pazienza! 🙂

  5. Hey, been using this class and it’s working great.

    I have an issue with tweets including unicode characters, they seem to break the array:

    Example – “

      1. What’s happening is that the first time it loads with a tweet with those characters in it, it loads fine. The second time (I’m assuming while cached) it shows a serialized array with only info from the first tweet in it.

        1. Thank you Justin. I figured it out. That was wp transients not handling correctly unicode characters. Now it should be working fine, if you could give it a try and let me know.

          1. Thanks a bunch, this worked perfectly! I was on the same track, but couldn’t figure out where to serialze/unserialize to get it working.

            While I was trying to track down the problem, I found that json_encode/json_decode is faster, so I made a pull request with those changes if you’re interested.

    1. Ciao Marisa, è importante dividere le competenze necessarie per essere relativamente un buon sviluppatore o un buon designer web. Non metto in dubbio che ci siano bravi grafici con ottime competenze in materia di programmazione ma purtroppo spesso abbiamo grafici che si improvvisano programmatori (con pessimi risultati tecnici) o al contrario programmatori che si improvvisano grafici (con terribili risultati estetici) 😀

  6. ho registrato la mia applicazione ma non s come recuperare tutti i codici.
    Dove visualizzo il Twitter Oauth Access Token, Twitter Oauth Access Token Secret, Twitter Consumer Key, Twitter Consumer Secret?!?

  7. Una informazione per un novello come me.
    Ho un modulo di DotNetNuke che richiede questo “Note that you must sign up for a Twitter API key in order to use that module”
    Ora pernso che seguendo la tua guida si possa ottenere, ma quando mi chiede il website che devo mettere? L’inidirizzo di quello sul quale installerò il modulo di Twitter ? e poi a che serve comunicare l’indirizzo del sito ?
    Grazie per l’aiuto.

    1. Serve per attribuire un’identità alla tua App. Diverso invece il Callback URL che serve per implementare un login oAuth.

  8. Ciao, ho un piccolo problema dovrei recuperare l indirizzo email di un utente
    1^ domanda : Twitter me lo consente ? Mi sembra di aver letto da qualche parte che non è possibile !
    2^ se me lo consente ( dopo aver ottenuto l autorizzazione per accedere al suo account ) come faccio?
    Grazie in anticipo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *