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!
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 🙂
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
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:
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
Ciao Fabio, mi spiace ma sn in vacanza 🙂 Se risolvi prima che torno magari pubblica la soluzione!
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.
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!
Ciao Silvia, in realtà Java non è proprio il mio forte. Posso però consigliarti la repo hbc Twitter4j a questo indirizzo https://github.com/twitter/hbc , un client Java per le API di twitter consigliato nel Dev Center di Twitter.
A questo indirizzo: http://twitter4j.org/en/ puoi trovare documentazione ed esempi. Spero di esserti stato di qualche aiuto.
Si in effetti avevo già letto in giro di Twitter4j, ora ci darò un’occhiata. Grazie mille!
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
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 😐
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!
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.
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! 🙂
Figurati! In bocca al lupo! 😀
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 – “
Use this for code: http://pastebin.com/
Thanks – I’ve pasted the characters to pastebin:
http://pastebin.com/6bxnjNj1
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.
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.
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.
Even better, much better, i was actually concerned about base64_encode performances! I just cleaned up the code replacing $response[‘body’] to $data on line 129 https://github.com/micc83/Twitter-API-1.1-Client-for-Wordpress/blob/master/class-wp-twitter-api.php#L129
Should be good to go now! 🙂
Perfect! Thanks so much for the quick responses!
ottimo articolo chi si occupa di realizzazione siti web dovrebbe sapere queste cose…è tipo l’abc. Grazie!
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) 😀
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?!?
Vai su https://apps.twitter.com
Clicca sul titol dell’applicazione che hai creato
Clicca sulla tab API KEYS
Li sono listate tutte le chiavi di cui hai bisogno
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.
Serve per attribuire un’identità alla tua App. Diverso invece il Callback URL che serve per implementare un login oAuth.
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