SlideShare a Scribd company logo
1 of 55
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 1/55
Twitter Programming
Twitter
programming
ovvero
facciamo tutti cip cip
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 2/55
Twitter Programming
●
Relatore: Matteo Baccan matteo@baccan.it
●
Data: Milano 09/11/2010
●
Area: Open/Closed Source
●
Target: Twitter Nerd
●
Difficoltà:Media-Bassa
Twitter è la più grossa piattaforma di microblogging del mondo
Vedremo come è possibile programmarla in Java e PHP
Se non sapete cosa vuol dire OAuth, REST API, Search API e Streaming API,
se CURL vi sembra il nome di un partito politico, se la pigrizia governa la
vostra vita e non vi muovete senza un SDK dedicato ad ogni piattaforma che
programmate, allora siete nel posto giusto.
Da 0 a 100 in 60 minuti, allacciate le cinture ;)
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 3/55
Twitter Programming
Cos'è Twitter?
● Una piattaforma di micro-blogging
• Invio di piccoli messaggi di testo (<140 caratteri) ai “Follower”
• Ricezione degli aggiornamenti da parte dei “Following”
● Alcune convenzioni
• d username = invio diretto di un messaggio (tweet privati)
• @username = risposta a un utente (tweet pubblici)
● Gli utenti possono determinare se ricevere risposte da argomenti non
seguiti
● #tag = hashtag
● Accessi multicanale
• Nativi: Mobile (SMS o Navigazione Mobile: no Italia!), Web Browser
• Di terze parti: tramite API
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 4/55
Twitter Programming
Storia
●
Twitter nasce il 21 marzo 2006, data del primo messaggio
“just setting up my twttr”
●
2007 - 400.000 tweet a trimestre
●
2008 - 100.000.000 di tweet a trimestre
●
2009 – 2.000.000.000 di tweet a trimestre
●
Marzo 2010 – superata la soglia di 70.000 applicazioni registrate
●
Febbraio 2010 – 50.000.000 di tweet al giorno
●
2010 – primo trimestre 4.000.000.000 di tweet
●
2010 – a giugno 65.000.000 di tweet postati al giorno, circa 750 al secondo
Fonte: http://en.wikipedia.org/wiki/Twitter
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 5/55
Twitter Programming
È entrato nella comicità
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 6/55
Twitter Programming
Twitter API - applicazioni
● Il maggior numero di accessi a Twitter è via API
● Desktop client: destroytwitter, tweetdeck, twhirl, twitterrific, etc
19 Twitter Desktop Apps Compared
http://mashable.com/2009/06/27/twitter-desktop-apps/
● Mobile client: TinyTwitter, PocketTweets, iTweet, etc
52 Twitter Mobile Client
http://www.aboutonlinetips.com/twitter-client-for-mobile/
● Statistiche: TweetStats,Twist etc
8 Best Twitter Statistics and Analytics Tools
http://pelfusion.com/tools/8-best-twitter-statistics-and-analytics-tools/
● Etc etc etc – siamo ad oltre 100.000 !!
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 7/55
Twitter Programming
Twitter API - documentazione
● http://dev.twitter.com/
Creazione nuove applicazioni, documentazione sull'uso delle API
● Google Group
http://groups.google.com/group/twitter-development-talk
http://groups.google.com/group/twitter-api-announce
● IRC
#twitterapi su irc.freenode.net
● L'utente @twitterapi su Twitter
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 8/55
Twitter Programming
Twitter API – perché sono cosi usate?
● L'accesso è semplice e usa formati standard:
● XML - XML Media Types - http://tools.ietf.org/html/rfc3023
● RSS - Really Simple Syndication - http://www.rssboard.org/rss-specification
● ATOM - Atom Syndication Format - http://tools.ietf.org/html/rfc4287
● JSON - JavaScript Object Notation - http://tools.ietf.org/html/rfc4627
● Utilizza protocolli standard di autenticazione
● Basic http authentication - http://tools.ietf.org/html/rfc1945
● OAuth - http://tools.ietf.org/html/rfc5849
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 9/55
Twitter Programming
Twitter API – OAuth
● OAuth è un meccanismo standard
● OAuth è il meccanismo principale di autenticazione delle applicazioni Twitter
● Occorre autenticarsi per le richieste in scrittura
● Le applicazioni autenticate hanno pieno accesso allo stack Twitter
● L'applicazione non è in possesso della login e password dell'utente
● L'utente è in grado di cambiare autonomamente la propria login e password
● L'utente ha la sicurezza che la propria/login pwd non sia memorizzata
esternamente a Twitter
● L'utente può revocare l'autorizzazione all'applicazione in qualsiasi momento
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 10/55
Twitter Programming
OAuth – dal punto di vista del programmatore
● Occorre indicare al Service Provider (nel nostro caso Twitter) alcune
informazioni sull'applicazione che si intente creare: nome, autore, url etc
● Il Service Provider assegna una consumer key e consumer secret
● Il Service Provider fornisce una URL autorizzativa all'applicazione
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 11/55
Twitter Programming
http://dev.twitter.com/pages/auth
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 12/55
Twitter Programming
Autenticazioni possibili
● Web application
● OAuth / OAuth Echo (utilizzata da http://twitpic.com/ e http://yfrog.com/)
● Le altre autenticazioni sono rigettate
● Desktop e mobile
● OAuth
● PIN Code Authentication – viene fornito un PIN autorizzativo
● xAuth Authentication (non XAuth) – OAuth con passaggio di login e password a
livello di HTTP HEADER (occorre essere autorizzati da Twitter)
● Search API
● Nessuna autenticazione
● Streaming API
● Basic Authentication
● OAuth
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 13/55
Twitter Programming
Applicazioni autorizzate
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 14/55
Twitter Programming
Twitter API – come si dividono
● REST API
● Permettono di accedere alle funzionalità base di Twitter
● Search API
● Permettono di accedere all'indice di Twitter in tempo reale
● Ricercano i dati per rilevanza o per “top tweet”
● Streaming API
● Permettono connessioni a lunga persistenza
● Gli aggiornamenti avvengono in realtime
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 15/55
Twitter Programming
Twitter API – REST API Limit
● Limiti di chiamata REST su HTTP/GET
● Le chiamate anonime sono limitate su IP: 150 richieste all'ora
● Le chiamate autenticate (OAuth) sono limitate a : 350 richieste all'ora
● Per maggiori informazioni
http://support.twitter.com/forums/10711/entries/15364
● Su HTTP/POST
● Normalmente non viene applicato un limite di richieste
● Eventuali limiti/non limiti sono documentati sulle singole chiamate
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 16/55
Twitter Programming
Twitter API – REST API Limit
● Al raggiungimento di un limite abbiamo un errore HTTP 400
● Le chiamate possono portate con se, all'interno dell'header http, indicazioni
sui limiti attuali
● X-FeatureRateLimit-Limit
● X-FeatureRateLimit-Remaining
● X-FeatureRateLimit-Reset
● Whitelist
● A richiesta si può chiedere di essere inseriti all'interno di apposite whitelist
ed arrivare a 20.000 richieste per ora da singolo IP
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 17/55
Twitter Programming
Twitter API – Search API Limit
● Le api di ricerca sono gestite da search.twitter.com e le loro chiamate non
concorrono al raggiungimento delle REST API
● Anche le Search API hanno un limite, ma come riportato dalla
documentazione ufficiale
The Search Rate Limit isn't made public to discourage unnecessary search
usage and abuse, but it is higher than the REST Rate Limit
● In caso di raggiungimento della soglia viene restituito un errore HTTP 420 e
un parametro in header Retry-After che rappresenta il numero di secondi
dopo i quali ritentare la search
● La Whitelist per le Search API è IP Based, per questo motivo, le chiamate da
Cloud, che riportano più IP, non possono essere registrate in Whitelist
● Blacklist: interi account o singoli IP possono essere messi in blacklist
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 18/55
Twitter Programming
Twitter API – Streaming API
● Le Streaming API hanno dei limiti in base al numero di connessioni
persistenti dallo stesso IP
● In caso di problemi di connessione, vengono introdotti dei ritardi random da
20 a 40 secondi
● In caso di persistenti connessioni errate, l'applicazione può essere messa in
blacklist
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 19/55
Twitter Programming
The Twitter API: Basic Methods
● Status Methods:
● public_timeline, friends_timeline, user_timeline, show, update, replies, destroy
● Account Methods:
● verify_credentials, end_session, archive, update_location, update_delivery_device
● User Methods:
● Friends, followers, featured, show
● Direct Message Methods:
● direct_messages, sent, new, destroy
● Friendship Methods:
● Create, destroy, exists
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 20/55
Twitter Programming
The Twitter API: Basic Methods
● Favorite Methods:
● favorites, create, destroy
● Help Methods:
● test, downtime_schedule
● Notification Methods:
● follow, leave
● Block Methods
● create, destroy
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 21/55
Twitter Programming
Twitter API – cosa ci serve per iniziare?
● CURL/WGET
● Per tutte le richieste non autenticate
● TWUrl - http://github.com/marcel/twurl (in Ruby)
● Una versione di CURL con l'aggiunta dell'autentication OAuth
● API console: http://dev.twitter.com/console
● Se voglio provare tutto online
● Creare un'applicazione
● http://dev.twitter.com/apps/new
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 22/55
Twitter Programming
Ruby – cercatelo su google.com
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 23/55
Twitter Programming
Ruby – su google.it il risultato è un po' diverso ;)
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 24/55
Twitter Programming
Twitter API – qualche libreria che supporta OAuth
● PHP
● Twitteroauth: http://github.com/abraham/twitteroauth
● Java
● Scribe: http://github.com/fernandezpablo85/scribe-java
● JTwitter: http://www.winterwell.com/software/jtwitter.php
● Ruby
● Oauth: http://oauth.rubyforge.org/ libreria usata da twurl
● Per una lista aggiornata
● http://oauth.net/code/ c#, VB.net, ColdFusion, List, Java, Javascript, Perl,
PHP, Python, Ruby etc etc etc
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 25/55
Twitter Programming
Creiamo la nostra prima applicazione - http://dev.twitter.com/apps/new
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 26/55
Twitter Programming
Notiamo Consumer KEY e SECRET
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 27/55
Twitter Programming
Proviamo l'applicazione da console
● http://dev.twitter.com/doc/get/statuses/public_timeline
● Restituisce gli ultimi 20 status
● I dati sono in cache per 60 secondi
● Valori di ritorno in json, xml, rss, atom
Permalink
http://dev.twitter.com/console/recall?
client_application_id=452658&content_type=xml&method=GET&param-keys%5B
%5D=&param-vals%5B%5D=&path=statuses%2Fpublic_timeline&version=1
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 28/55
Twitter Programming
Proviamo l'applicazione da console
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 29/55
Twitter Programming
Proviamo l'applicazione da console - REQUEST
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 30/55
Twitter Programming
Proviamo l'applicazione da console - RESPONSE
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 31/55
Twitter Programming
Proviamo la stessa cosa con CURL e WGET
● L'API statuses/public_timeline non richiede autenticazione, quindi possiamo utilizzare
anche dei tool che non usano OAuth per prendere le informazioni che ci interessano
EX:
● wget http://api.twitter.com/1/statuses/public_timeline.xml
● curl http://api.twitter.com/1/statuses/public_timeline.xml
La costruzione avviene con
http://api.twitter.com seguito dall'API /1/statuses/public_timeline e il formato .xml
Usando protocollo HTTP/GET o HTTP/POST può essere seguita da un browser
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 32/55
Twitter Programming
Proviamo la stessa cosa con twurl
● Nel caso ci serva l'autenticazione, dobbiamo necessariamente utilizzare un tool o una
libreria che ci permette l'OAuth.
twurl authorize
--consumer-key uigRY7n7Q00000002ysG1zQ
--consumer-secret eVuZjymsJDr6jWHAJy00000005JcPue9ynz6MoCecb4E
● Indirizza https://api.twitter.com/oauth/authorize per avere il PIN autorizzativo
● Una volta autorizzata l'applicazione, gli accessi sono memorizzati in
C:Documents and Settings[utente].twurlrc
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 33/55
Twitter Programming
twurl - .twurlrc
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 34/55
Twitter Programming
Proviamo a fare un post
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 35/55
Twitter Programming
Risultato
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 36/55
Twitter Programming
Proviamo la stessa cosa con wget, curl e twurl
● Wget e curl: non possono fare un /1/statuses/update.xml, in quanto non sono in grado
di gestire l'OAuth.
● twurl, grazie alla gestione OAuth, può tranquillamente gestire un update:
● twurl -d 'status=nuovo status' /1/statuses/update.xml
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 37/55
Twitter Programming
Giochiamo con gli utenti
● Vi serve avere qualche informazione su un utente?
● Proviamo a comporre la chiamata come API
● http://api.twitter.com /1/users/show .xml ? screen_name=WebTechConf
● Oppure usiamone la chiamata alternativa
● http://api.twitter.com/1/users/show/WebTechConf.xml
● http://api.twitter.com/1/users/show/WebTechConf.json
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 38/55
Twitter Programming
Giochiamo con gli utenti
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 39/55
Twitter Programming
Seguiamo degli utenti
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 40/55
Twitter Programming
Seguiamo degli utenti
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 41/55
Twitter Programming
Giochiamo con gli utenti
● Con twurl è semplicissimo gestire l'aggiunta o rimozione di amici
● twurl -d 'screen_name=10Ronaldinho' /1/friendships/create.xml
● twurl -d 'screen_name=10Ronaldinho' /1/friendships/destroy.xml
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 42/55
Twitter Programming
Search API
● Le search API sono un database completamente staccato rispetto al database di Twitter
● Permettono un'analisi fino a un massimo di 10-14 giorni precedenti
● Il formato di rappresentazione è solamente ATOM e JSON
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 43/55
Twitter Programming
Search API
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 44/55
Twitter Programming
Search API - http://search.twitter.com/search?q=beppe+grillo
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 45/55
Twitter Programming
Search API - http://search.twitter.com/search.atom?q=beppe+grillo
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 46/55
Twitter Programming
Search API - http://search.twitter.com/search.json?q=beppe+grillo
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 47/55
Twitter Programming
Search API – gli operatori - http://search.twitter.com/operators
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 48/55
Twitter Programming
Streaming API
● Le API di streaming aprono un flusso verso i server twitter e rimangono in ascolto per
ricevere aggiornamenti da parte di Twittter
● Richiedono una Basic Authentication verso il server streaming.twitter.com (Powered by
Jetty)
● Ex:
● curl --user xxx:xxx http://stream.twitter.com/1/statuses/sample.json
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 49/55
Twitter Programming
Gli SDK - http://dev.twitter.com/pages/libraries
● Su Java ci sono vari SDK, prendiamo ad esempio Jtwitter, essendo opensource, LGPL e
funzionante, di seguito l'esempio del sito (corretto .. quello online non funziona)
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 50/55
Twitter Programming
Il risultato dell'applicazione JAVA
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 51/55
Twitter Programming
Gli SDK - http://dev.twitter.com/pages/libraries
● Per PHP, prendiamo ad esempio twitteroauth, in quanto gestisce l'OAuth e consigliato da
Twitter stessa
● In questo caso viene fornita una libreria ad oggetti PHP e un esempio nel quale sono
testati i singoli servizi Twitter.
● L'autenticazione è molto semplice
● $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET,
$access_token['oauth_token'], $access_token['oauth_token_secret']);
● Cosi come l'uso dei singoli servizi
● $connection->get('statuses/public_timeline')
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 52/55
Twitter Programming
Qualsiasi cosa accada
ricordiamoci che anche Twitter è umano
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 53/55
Twitter Programming
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 54/55
Twitter Programming
Alcuni link
● Questo materiale http://www.baccan.it
● La mia azienda http://www.moonlab.it
● Il sito developer di Twitter http://dev.twitter.com
● Crea una nuova applicazione http://dev.twitter.com/apps
● Dove trovare delle librerie http://dev.twitter.com/pages/libraries
● OAuth http://www.oauth.net/
● Per la traccia di questa presentazione twitter.com/raffi
30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 55/55
Twitter Programming
Matteo Baccan
lovecat
matteo@baccan.it

More Related Content

Viewers also liked

How to Successfully Apply E-Learning
How to Successfully Apply E-LearningHow to Successfully Apply E-Learning
How to Successfully Apply E-LearningMaja Vujovic
 
Pedraviva - 16.04.07
Pedraviva - 16.04.07Pedraviva - 16.04.07
Pedraviva - 16.04.07Jubrac Jacui
 
Newmedia Congres Webversie
Newmedia Congres WebversieNewmedia Congres Webversie
Newmedia Congres WebversieSjef Kerkhofs
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
My Mom On Leadership
My Mom On LeadershipMy Mom On Leadership
My Mom On LeadershipMaja Vujovic
 
Rebecca Johnson, Cardiff
Rebecca Johnson, CardiffRebecca Johnson, Cardiff
Rebecca Johnson, CardiffPaul McElvaney
 
Clive Shepherd at LP2010
Clive Shepherd at LP2010Clive Shepherd at LP2010
Clive Shepherd at LP2010Paul McElvaney
 
Everything about questions
Everything about questionsEverything about questions
Everything about questionsSussan Roo
 
Maximising the usage of Learning Pool's DLE forums
Maximising the usage of Learning Pool's DLE forumsMaximising the usage of Learning Pool's DLE forums
Maximising the usage of Learning Pool's DLE forumsPaul McElvaney
 
Social Media In An Eh World
Social Media In An Eh WorldSocial Media In An Eh World
Social Media In An Eh WorldSteve Lipton
 
Lezing Managementboek 15 feb
Lezing Managementboek 15 febLezing Managementboek 15 feb
Lezing Managementboek 15 febSjef Kerkhofs
 
PyCon 2011 Scaling Disqus
PyCon 2011 Scaling DisqusPyCon 2011 Scaling Disqus
PyCon 2011 Scaling Disquszeeg
 
Presentatie Starterslift Breda - Online marketing
Presentatie Starterslift Breda - Online marketingPresentatie Starterslift Breda - Online marketing
Presentatie Starterslift Breda - Online marketingSjef Kerkhofs
 
Learning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using imagesLearning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using imagesPaul McElvaney
 
Niver Erica E Marcos - 22.10.07
Niver Erica E Marcos - 22.10.07Niver Erica E Marcos - 22.10.07
Niver Erica E Marcos - 22.10.07Jubrac Jacui
 

Viewers also liked (20)

How to Successfully Apply E-Learning
How to Successfully Apply E-LearningHow to Successfully Apply E-Learning
How to Successfully Apply E-Learning
 
Pedraviva - 16.04.07
Pedraviva - 16.04.07Pedraviva - 16.04.07
Pedraviva - 16.04.07
 
Marcha - 2008
Marcha - 2008Marcha - 2008
Marcha - 2008
 
Newmedia Congres Webversie
Newmedia Congres WebversieNewmedia Congres Webversie
Newmedia Congres Webversie
 
Para Que Serve O Galego
Para Que Serve O GalegoPara Que Serve O Galego
Para Que Serve O Galego
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
My Mom On Leadership
My Mom On LeadershipMy Mom On Leadership
My Mom On Leadership
 
Rebecca Johnson, Cardiff
Rebecca Johnson, CardiffRebecca Johnson, Cardiff
Rebecca Johnson, Cardiff
 
Clive Shepherd at LP2010
Clive Shepherd at LP2010Clive Shepherd at LP2010
Clive Shepherd at LP2010
 
Everything about questions
Everything about questionsEverything about questions
Everything about questions
 
Maximising the usage of Learning Pool's DLE forums
Maximising the usage of Learning Pool's DLE forumsMaximising the usage of Learning Pool's DLE forums
Maximising the usage of Learning Pool's DLE forums
 
Social Media In An Eh World
Social Media In An Eh WorldSocial Media In An Eh World
Social Media In An Eh World
 
Ethics And Values
Ethics And ValuesEthics And Values
Ethics And Values
 
Lezing Managementboek 15 feb
Lezing Managementboek 15 febLezing Managementboek 15 feb
Lezing Managementboek 15 feb
 
Scmad Chapter15
Scmad Chapter15Scmad Chapter15
Scmad Chapter15
 
PyCon 2011 Scaling Disqus
PyCon 2011 Scaling DisqusPyCon 2011 Scaling Disqus
PyCon 2011 Scaling Disqus
 
Presentatie Starterslift Breda - Online marketing
Presentatie Starterslift Breda - Online marketingPresentatie Starterslift Breda - Online marketing
Presentatie Starterslift Breda - Online marketing
 
Learning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using imagesLearning Pool Webinar: Creating, editing and using images
Learning Pool Webinar: Creating, editing and using images
 
Niver Erica E Marcos - 22.10.07
Niver Erica E Marcos - 22.10.07Niver Erica E Marcos - 22.10.07
Niver Erica E Marcos - 22.10.07
 
Editing
EditingEditing
Editing
 

Similar to Webtech 2010: twitter programming

Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programmingMatteo Baccan
 
Gae python gdg milano L03
Gae python gdg milano L03Gae python gdg milano L03
Gae python gdg milano L03Paolo Dadda
 
Twitter Corporate
Twitter CorporateTwitter Corporate
Twitter Corporatenemolog
 
WordPress Meetup Torino - 14 Luglio 2015
WordPress Meetup Torino - 14 Luglio 2015WordPress Meetup Torino - 14 Luglio 2015
WordPress Meetup Torino - 14 Luglio 2015Mattia Piovano
 
Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.
Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.
Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.Digital Expert - Internet Enthusiast
 
Metodologia per la classificazione automatica di commenti su social network s...
Metodologia per la classificazione automatica di commenti su social network s...Metodologia per la classificazione automatica di commenti su social network s...
Metodologia per la classificazione automatica di commenti su social network s...Simone Maver
 
Telegram BOT Web Marketing Festival 2016
Telegram BOT Web Marketing Festival 2016Telegram BOT Web Marketing Festival 2016
Telegram BOT Web Marketing Festival 2016SimpleNetworks
 
20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...
20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...
20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...Me-Source S.r.l./Blogmeter
 
Mulesoft Milano Meetup #4 Florence Consulting
Mulesoft Milano Meetup #4 Florence ConsultingMulesoft Milano Meetup #4 Florence Consulting
Mulesoft Milano Meetup #4 Florence ConsultingFlorence Consulting
 
Io Programmo - Android Programming - Andrea Galeazzi
Io Programmo - Android Programming - Andrea GaleazziIo Programmo - Android Programming - Andrea Galeazzi
Io Programmo - Android Programming - Andrea GaleazziAndrea Galeazzi
 
Guadagnare con Twitter
Guadagnare con TwitterGuadagnare con Twitter
Guadagnare con TwitterAndrea Marri
 
Esercitazione SNID Twitter analytics
Esercitazione SNID Twitter analyticsEsercitazione SNID Twitter analytics
Esercitazione SNID Twitter analyticsDML Srl
 
Andrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software LiberoAndrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software LiberoLibreItalia
 
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...Andrea Cartotto
 
Come usare al meglio Woopra (e perché è meglio di Google Analytics)
Come usare al meglio Woopra (e perché è meglio di Google Analytics)Come usare al meglio Woopra (e perché è meglio di Google Analytics)
Come usare al meglio Woopra (e perché è meglio di Google Analytics)Pasquale Borriello
 

Similar to Webtech 2010: twitter programming (20)

Codemotion twitter programming
Codemotion twitter programmingCodemotion twitter programming
Codemotion twitter programming
 
Gae python gdg milano L03
Gae python gdg milano L03Gae python gdg milano L03
Gae python gdg milano L03
 
Twitter Corporate
Twitter CorporateTwitter Corporate
Twitter Corporate
 
WordPress Meetup Torino - 14 Luglio 2015
WordPress Meetup Torino - 14 Luglio 2015WordPress Meetup Torino - 14 Luglio 2015
WordPress Meetup Torino - 14 Luglio 2015
 
Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.
Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.
Introduzione ai Social Media. Twitter Parte 1/2. A cura di Luca Menna.
 
Metodologia per la classificazione automatica di commenti su social network s...
Metodologia per la classificazione automatica di commenti su social network s...Metodologia per la classificazione automatica di commenti su social network s...
Metodologia per la classificazione automatica di commenti su social network s...
 
Telegram BOT Web Marketing Festival 2016
Telegram BOT Web Marketing Festival 2016Telegram BOT Web Marketing Festival 2016
Telegram BOT Web Marketing Festival 2016
 
Le best practice del Real Time Marketing
Le best practice del Real Time MarketingLe best practice del Real Time Marketing
Le best practice del Real Time Marketing
 
20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...
20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...
20130926: BM_Lo scenario italiano della social tv tra comportamenti degli ute...
 
Mulesoft Milano Meetup #4 Florence Consulting
Mulesoft Milano Meetup #4 Florence ConsultingMulesoft Milano Meetup #4 Florence Consulting
Mulesoft Milano Meetup #4 Florence Consulting
 
Io Programmo - Android Programming - Andrea Galeazzi
Io Programmo - Android Programming - Andrea GaleazziIo Programmo - Android Programming - Andrea Galeazzi
Io Programmo - Android Programming - Andrea Galeazzi
 
Guadagnare con Twitter
Guadagnare con TwitterGuadagnare con Twitter
Guadagnare con Twitter
 
Esercitazione SNID Twitter analytics
Esercitazione SNID Twitter analyticsEsercitazione SNID Twitter analytics
Esercitazione SNID Twitter analytics
 
GoogleIO Extended Campania
GoogleIO Extended CampaniaGoogleIO Extended Campania
GoogleIO Extended Campania
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
 
Chiedi ubuntu-it
Chiedi ubuntu-itChiedi ubuntu-it
Chiedi ubuntu-it
 
Andrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software LiberoAndrea Cartotto Le carte vincenti del Software Libero
Andrea Cartotto Le carte vincenti del Software Libero
 
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
Andrea Cartotto - Le "carte vincenti" nel software libero: cittadinanza digit...
 
Social Chat App
Social Chat AppSocial Chat App
Social Chat App
 
Come usare al meglio Woopra (e perché è meglio di Google Analytics)
Come usare al meglio Woopra (e perché è meglio di Google Analytics)Come usare al meglio Woopra (e perché è meglio di Google Analytics)
Come usare al meglio Woopra (e perché è meglio di Google Analytics)
 

More from Matteo Baccan

Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan
 
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo baccan   raspberry pi - linox 2015 - corso parte 3Matteo baccan   raspberry pi - linox 2015 - corso parte 3
Matteo baccan raspberry pi - linox 2015 - corso parte 3Matteo Baccan
 
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo baccan   raspberry pi - linox 2015 - corso parte 2Matteo baccan   raspberry pi - linox 2015 - corso parte 2
Matteo baccan raspberry pi - linox 2015 - corso parte 2Matteo Baccan
 
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo baccan   raspberry pi - linox 2015 - corso parte 1Matteo baccan   raspberry pi - linox 2015 - corso parte 1
Matteo baccan raspberry pi - linox 2015 - corso parte 1Matteo Baccan
 
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Matteo Baccan
 
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014Matteo Baccan
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterMatteo Baccan
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - TigerMatteo Baccan
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e javaMatteo Baccan
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e javaMatteo Baccan
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Matteo Baccan
 
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Matteo Baccan
 
Codemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerCodemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerMatteo Baccan
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: AspectjMatteo Baccan
 
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingMatteo Baccan
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4javaMatteo Baccan
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php frameworkMatteo Baccan
 

More from Matteo Baccan (19)

Gmail e google app
Gmail e google appGmail e google app
Gmail e google app
 
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
Matteo Baccan - Valerio Tognozzi - Novara LinuxDay 2015
 
Matteo baccan raspberry pi - linox 2015 - corso parte 3
Matteo baccan   raspberry pi - linox 2015 - corso parte 3Matteo baccan   raspberry pi - linox 2015 - corso parte 3
Matteo baccan raspberry pi - linox 2015 - corso parte 3
 
Matteo baccan raspberry pi - linox 2015 - corso parte 2
Matteo baccan   raspberry pi - linox 2015 - corso parte 2Matteo baccan   raspberry pi - linox 2015 - corso parte 2
Matteo baccan raspberry pi - linox 2015 - corso parte 2
 
Matteo baccan raspberry pi - linox 2015 - corso parte 1
Matteo baccan   raspberry pi - linox 2015 - corso parte 1Matteo baccan   raspberry pi - linox 2015 - corso parte 1
Matteo baccan raspberry pi - linox 2015 - corso parte 1
 
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
Creazione di una stazione meteo con prodotti opensource. Linux day 2014 - Lin...
 
Matteo baccan raspberry pi - linox 2014
Matteo baccan   raspberry pi - linox 2014Matteo baccan   raspberry pi - linox 2014
Matteo baccan raspberry pi - linox 2014
 
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi ClusterCodemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
Codemotion 2014 : ottimizzare JAVA e PHP su un’architettura Raspberry Pi Cluster
 
javaday 2006 - Tiger
javaday 2006 - Tigerjavaday 2006 - Tiger
javaday 2006 - Tiger
 
Phpday 2009 php e java
Phpday 2009 php e javaPhpday 2009 php e java
Phpday 2009 php e java
 
Javaday 2009 php e java
Javaday 2009 php e javaJavaday 2009 php e java
Javaday 2009 php e java
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
 
Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3 Stack Overflow meetup html2pop3
Stack Overflow meetup html2pop3
 
Codemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search ServerCodemotion 2012 : Sphinx: Open Source Search Server
Codemotion 2012 : Sphinx: Open Source Search Server
 
Webbit 2004: Aspectj
Webbit 2004: AspectjWebbit 2004: Aspectj
Webbit 2004: Aspectj
 
JIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java ProgrammingJIPDay 2005: Xlet Java Programming
JIPDay 2005: Xlet Java Programming
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Javaday 2007: skype4java
Javaday 2007: skype4javaJavaday 2007: skype4java
Javaday 2007: skype4java
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php framework
 

Webtech 2010: twitter programming

  • 1. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 1/55 Twitter Programming Twitter programming ovvero facciamo tutti cip cip
  • 2. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 2/55 Twitter Programming ● Relatore: Matteo Baccan matteo@baccan.it ● Data: Milano 09/11/2010 ● Area: Open/Closed Source ● Target: Twitter Nerd ● Difficoltà:Media-Bassa Twitter è la più grossa piattaforma di microblogging del mondo Vedremo come è possibile programmarla in Java e PHP Se non sapete cosa vuol dire OAuth, REST API, Search API e Streaming API, se CURL vi sembra il nome di un partito politico, se la pigrizia governa la vostra vita e non vi muovete senza un SDK dedicato ad ogni piattaforma che programmate, allora siete nel posto giusto. Da 0 a 100 in 60 minuti, allacciate le cinture ;)
  • 3. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 3/55 Twitter Programming Cos'è Twitter? ● Una piattaforma di micro-blogging • Invio di piccoli messaggi di testo (<140 caratteri) ai “Follower” • Ricezione degli aggiornamenti da parte dei “Following” ● Alcune convenzioni • d username = invio diretto di un messaggio (tweet privati) • @username = risposta a un utente (tweet pubblici) ● Gli utenti possono determinare se ricevere risposte da argomenti non seguiti ● #tag = hashtag ● Accessi multicanale • Nativi: Mobile (SMS o Navigazione Mobile: no Italia!), Web Browser • Di terze parti: tramite API
  • 4. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 4/55 Twitter Programming Storia ● Twitter nasce il 21 marzo 2006, data del primo messaggio “just setting up my twttr” ● 2007 - 400.000 tweet a trimestre ● 2008 - 100.000.000 di tweet a trimestre ● 2009 – 2.000.000.000 di tweet a trimestre ● Marzo 2010 – superata la soglia di 70.000 applicazioni registrate ● Febbraio 2010 – 50.000.000 di tweet al giorno ● 2010 – primo trimestre 4.000.000.000 di tweet ● 2010 – a giugno 65.000.000 di tweet postati al giorno, circa 750 al secondo Fonte: http://en.wikipedia.org/wiki/Twitter
  • 5. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 5/55 Twitter Programming È entrato nella comicità
  • 6. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 6/55 Twitter Programming Twitter API - applicazioni ● Il maggior numero di accessi a Twitter è via API ● Desktop client: destroytwitter, tweetdeck, twhirl, twitterrific, etc 19 Twitter Desktop Apps Compared http://mashable.com/2009/06/27/twitter-desktop-apps/ ● Mobile client: TinyTwitter, PocketTweets, iTweet, etc 52 Twitter Mobile Client http://www.aboutonlinetips.com/twitter-client-for-mobile/ ● Statistiche: TweetStats,Twist etc 8 Best Twitter Statistics and Analytics Tools http://pelfusion.com/tools/8-best-twitter-statistics-and-analytics-tools/ ● Etc etc etc – siamo ad oltre 100.000 !!
  • 7. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 7/55 Twitter Programming Twitter API - documentazione ● http://dev.twitter.com/ Creazione nuove applicazioni, documentazione sull'uso delle API ● Google Group http://groups.google.com/group/twitter-development-talk http://groups.google.com/group/twitter-api-announce ● IRC #twitterapi su irc.freenode.net ● L'utente @twitterapi su Twitter
  • 8. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 8/55 Twitter Programming Twitter API – perché sono cosi usate? ● L'accesso è semplice e usa formati standard: ● XML - XML Media Types - http://tools.ietf.org/html/rfc3023 ● RSS - Really Simple Syndication - http://www.rssboard.org/rss-specification ● ATOM - Atom Syndication Format - http://tools.ietf.org/html/rfc4287 ● JSON - JavaScript Object Notation - http://tools.ietf.org/html/rfc4627 ● Utilizza protocolli standard di autenticazione ● Basic http authentication - http://tools.ietf.org/html/rfc1945 ● OAuth - http://tools.ietf.org/html/rfc5849
  • 9. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 9/55 Twitter Programming Twitter API – OAuth ● OAuth è un meccanismo standard ● OAuth è il meccanismo principale di autenticazione delle applicazioni Twitter ● Occorre autenticarsi per le richieste in scrittura ● Le applicazioni autenticate hanno pieno accesso allo stack Twitter ● L'applicazione non è in possesso della login e password dell'utente ● L'utente è in grado di cambiare autonomamente la propria login e password ● L'utente ha la sicurezza che la propria/login pwd non sia memorizzata esternamente a Twitter ● L'utente può revocare l'autorizzazione all'applicazione in qualsiasi momento
  • 10. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 10/55 Twitter Programming OAuth – dal punto di vista del programmatore ● Occorre indicare al Service Provider (nel nostro caso Twitter) alcune informazioni sull'applicazione che si intente creare: nome, autore, url etc ● Il Service Provider assegna una consumer key e consumer secret ● Il Service Provider fornisce una URL autorizzativa all'applicazione
  • 11. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 11/55 Twitter Programming http://dev.twitter.com/pages/auth
  • 12. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 12/55 Twitter Programming Autenticazioni possibili ● Web application ● OAuth / OAuth Echo (utilizzata da http://twitpic.com/ e http://yfrog.com/) ● Le altre autenticazioni sono rigettate ● Desktop e mobile ● OAuth ● PIN Code Authentication – viene fornito un PIN autorizzativo ● xAuth Authentication (non XAuth) – OAuth con passaggio di login e password a livello di HTTP HEADER (occorre essere autorizzati da Twitter) ● Search API ● Nessuna autenticazione ● Streaming API ● Basic Authentication ● OAuth
  • 13. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 13/55 Twitter Programming Applicazioni autorizzate
  • 14. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 14/55 Twitter Programming Twitter API – come si dividono ● REST API ● Permettono di accedere alle funzionalità base di Twitter ● Search API ● Permettono di accedere all'indice di Twitter in tempo reale ● Ricercano i dati per rilevanza o per “top tweet” ● Streaming API ● Permettono connessioni a lunga persistenza ● Gli aggiornamenti avvengono in realtime
  • 15. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 15/55 Twitter Programming Twitter API – REST API Limit ● Limiti di chiamata REST su HTTP/GET ● Le chiamate anonime sono limitate su IP: 150 richieste all'ora ● Le chiamate autenticate (OAuth) sono limitate a : 350 richieste all'ora ● Per maggiori informazioni http://support.twitter.com/forums/10711/entries/15364 ● Su HTTP/POST ● Normalmente non viene applicato un limite di richieste ● Eventuali limiti/non limiti sono documentati sulle singole chiamate
  • 16. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 16/55 Twitter Programming Twitter API – REST API Limit ● Al raggiungimento di un limite abbiamo un errore HTTP 400 ● Le chiamate possono portate con se, all'interno dell'header http, indicazioni sui limiti attuali ● X-FeatureRateLimit-Limit ● X-FeatureRateLimit-Remaining ● X-FeatureRateLimit-Reset ● Whitelist ● A richiesta si può chiedere di essere inseriti all'interno di apposite whitelist ed arrivare a 20.000 richieste per ora da singolo IP
  • 17. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 17/55 Twitter Programming Twitter API – Search API Limit ● Le api di ricerca sono gestite da search.twitter.com e le loro chiamate non concorrono al raggiungimento delle REST API ● Anche le Search API hanno un limite, ma come riportato dalla documentazione ufficiale The Search Rate Limit isn't made public to discourage unnecessary search usage and abuse, but it is higher than the REST Rate Limit ● In caso di raggiungimento della soglia viene restituito un errore HTTP 420 e un parametro in header Retry-After che rappresenta il numero di secondi dopo i quali ritentare la search ● La Whitelist per le Search API è IP Based, per questo motivo, le chiamate da Cloud, che riportano più IP, non possono essere registrate in Whitelist ● Blacklist: interi account o singoli IP possono essere messi in blacklist
  • 18. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 18/55 Twitter Programming Twitter API – Streaming API ● Le Streaming API hanno dei limiti in base al numero di connessioni persistenti dallo stesso IP ● In caso di problemi di connessione, vengono introdotti dei ritardi random da 20 a 40 secondi ● In caso di persistenti connessioni errate, l'applicazione può essere messa in blacklist
  • 19. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 19/55 Twitter Programming The Twitter API: Basic Methods ● Status Methods: ● public_timeline, friends_timeline, user_timeline, show, update, replies, destroy ● Account Methods: ● verify_credentials, end_session, archive, update_location, update_delivery_device ● User Methods: ● Friends, followers, featured, show ● Direct Message Methods: ● direct_messages, sent, new, destroy ● Friendship Methods: ● Create, destroy, exists
  • 20. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 20/55 Twitter Programming The Twitter API: Basic Methods ● Favorite Methods: ● favorites, create, destroy ● Help Methods: ● test, downtime_schedule ● Notification Methods: ● follow, leave ● Block Methods ● create, destroy
  • 21. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 21/55 Twitter Programming Twitter API – cosa ci serve per iniziare? ● CURL/WGET ● Per tutte le richieste non autenticate ● TWUrl - http://github.com/marcel/twurl (in Ruby) ● Una versione di CURL con l'aggiunta dell'autentication OAuth ● API console: http://dev.twitter.com/console ● Se voglio provare tutto online ● Creare un'applicazione ● http://dev.twitter.com/apps/new
  • 22. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 22/55 Twitter Programming Ruby – cercatelo su google.com
  • 23. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 23/55 Twitter Programming Ruby – su google.it il risultato è un po' diverso ;)
  • 24. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 24/55 Twitter Programming Twitter API – qualche libreria che supporta OAuth ● PHP ● Twitteroauth: http://github.com/abraham/twitteroauth ● Java ● Scribe: http://github.com/fernandezpablo85/scribe-java ● JTwitter: http://www.winterwell.com/software/jtwitter.php ● Ruby ● Oauth: http://oauth.rubyforge.org/ libreria usata da twurl ● Per una lista aggiornata ● http://oauth.net/code/ c#, VB.net, ColdFusion, List, Java, Javascript, Perl, PHP, Python, Ruby etc etc etc
  • 25. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 25/55 Twitter Programming Creiamo la nostra prima applicazione - http://dev.twitter.com/apps/new
  • 26. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 26/55 Twitter Programming Notiamo Consumer KEY e SECRET
  • 27. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 27/55 Twitter Programming Proviamo l'applicazione da console ● http://dev.twitter.com/doc/get/statuses/public_timeline ● Restituisce gli ultimi 20 status ● I dati sono in cache per 60 secondi ● Valori di ritorno in json, xml, rss, atom Permalink http://dev.twitter.com/console/recall? client_application_id=452658&content_type=xml&method=GET&param-keys%5B %5D=&param-vals%5B%5D=&path=statuses%2Fpublic_timeline&version=1
  • 28. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 28/55 Twitter Programming Proviamo l'applicazione da console
  • 29. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 29/55 Twitter Programming Proviamo l'applicazione da console - REQUEST
  • 30. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 30/55 Twitter Programming Proviamo l'applicazione da console - RESPONSE
  • 31. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 31/55 Twitter Programming Proviamo la stessa cosa con CURL e WGET ● L'API statuses/public_timeline non richiede autenticazione, quindi possiamo utilizzare anche dei tool che non usano OAuth per prendere le informazioni che ci interessano EX: ● wget http://api.twitter.com/1/statuses/public_timeline.xml ● curl http://api.twitter.com/1/statuses/public_timeline.xml La costruzione avviene con http://api.twitter.com seguito dall'API /1/statuses/public_timeline e il formato .xml Usando protocollo HTTP/GET o HTTP/POST può essere seguita da un browser
  • 32. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 32/55 Twitter Programming Proviamo la stessa cosa con twurl ● Nel caso ci serva l'autenticazione, dobbiamo necessariamente utilizzare un tool o una libreria che ci permette l'OAuth. twurl authorize --consumer-key uigRY7n7Q00000002ysG1zQ --consumer-secret eVuZjymsJDr6jWHAJy00000005JcPue9ynz6MoCecb4E ● Indirizza https://api.twitter.com/oauth/authorize per avere il PIN autorizzativo ● Una volta autorizzata l'applicazione, gli accessi sono memorizzati in C:Documents and Settings[utente].twurlrc
  • 33. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 33/55 Twitter Programming twurl - .twurlrc
  • 34. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 34/55 Twitter Programming Proviamo a fare un post
  • 35. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 35/55 Twitter Programming Risultato
  • 36. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 36/55 Twitter Programming Proviamo la stessa cosa con wget, curl e twurl ● Wget e curl: non possono fare un /1/statuses/update.xml, in quanto non sono in grado di gestire l'OAuth. ● twurl, grazie alla gestione OAuth, può tranquillamente gestire un update: ● twurl -d 'status=nuovo status' /1/statuses/update.xml
  • 37. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 37/55 Twitter Programming Giochiamo con gli utenti ● Vi serve avere qualche informazione su un utente? ● Proviamo a comporre la chiamata come API ● http://api.twitter.com /1/users/show .xml ? screen_name=WebTechConf ● Oppure usiamone la chiamata alternativa ● http://api.twitter.com/1/users/show/WebTechConf.xml ● http://api.twitter.com/1/users/show/WebTechConf.json
  • 38. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 38/55 Twitter Programming Giochiamo con gli utenti
  • 39. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 39/55 Twitter Programming Seguiamo degli utenti
  • 40. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 40/55 Twitter Programming Seguiamo degli utenti
  • 41. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 41/55 Twitter Programming Giochiamo con gli utenti ● Con twurl è semplicissimo gestire l'aggiunta o rimozione di amici ● twurl -d 'screen_name=10Ronaldinho' /1/friendships/create.xml ● twurl -d 'screen_name=10Ronaldinho' /1/friendships/destroy.xml
  • 42. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 42/55 Twitter Programming Search API ● Le search API sono un database completamente staccato rispetto al database di Twitter ● Permettono un'analisi fino a un massimo di 10-14 giorni precedenti ● Il formato di rappresentazione è solamente ATOM e JSON
  • 43. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 43/55 Twitter Programming Search API
  • 44. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 44/55 Twitter Programming Search API - http://search.twitter.com/search?q=beppe+grillo
  • 45. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 45/55 Twitter Programming Search API - http://search.twitter.com/search.atom?q=beppe+grillo
  • 46. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 46/55 Twitter Programming Search API - http://search.twitter.com/search.json?q=beppe+grillo
  • 47. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 47/55 Twitter Programming Search API – gli operatori - http://search.twitter.com/operators
  • 48. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 48/55 Twitter Programming Streaming API ● Le API di streaming aprono un flusso verso i server twitter e rimangono in ascolto per ricevere aggiornamenti da parte di Twittter ● Richiedono una Basic Authentication verso il server streaming.twitter.com (Powered by Jetty) ● Ex: ● curl --user xxx:xxx http://stream.twitter.com/1/statuses/sample.json
  • 49. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 49/55 Twitter Programming Gli SDK - http://dev.twitter.com/pages/libraries ● Su Java ci sono vari SDK, prendiamo ad esempio Jtwitter, essendo opensource, LGPL e funzionante, di seguito l'esempio del sito (corretto .. quello online non funziona)
  • 50. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 50/55 Twitter Programming Il risultato dell'applicazione JAVA
  • 51. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 51/55 Twitter Programming Gli SDK - http://dev.twitter.com/pages/libraries ● Per PHP, prendiamo ad esempio twitteroauth, in quanto gestisce l'OAuth e consigliato da Twitter stessa ● In questo caso viene fornita una libreria ad oggetti PHP e un esempio nel quale sono testati i singoli servizi Twitter. ● L'autenticazione è molto semplice ● $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']); ● Cosi come l'uso dei singoli servizi ● $connection->get('statuses/public_timeline')
  • 52. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 52/55 Twitter Programming Qualsiasi cosa accada ricordiamoci che anche Twitter è umano
  • 53. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 53/55 Twitter Programming
  • 54. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 54/55 Twitter Programming Alcuni link ● Questo materiale http://www.baccan.it ● La mia azienda http://www.moonlab.it ● Il sito developer di Twitter http://dev.twitter.com ● Crea una nuova applicazione http://dev.twitter.com/apps ● Dove trovare delle librerie http://dev.twitter.com/pages/libraries ● OAuth http://www.oauth.net/ ● Per la traccia di questa presentazione twitter.com/raffi
  • 55. 30/01/15 Twitter Programming - Matteo Baccan - matteo@baccan.it 55/55 Twitter Programming Matteo Baccan lovecat matteo@baccan.it