Twitter API


       ¿Qué es twitter?
Twitter API
       El API en números:
    1,000,000 de apps registradas
       750,000 desarrolladores
    Una nueva cada 1,5 segundos

    500.000.000$ en inversiones
Twitter API


      Ejemplos:
Twittervision
Portwiture
Helveti-tweet
favstar
stweet
BubbleTweet
Twitterfountain
twitpic
filesocial
Twitter API

       ¿Qué se puede hacer?

         Respuesta corta: TODO
 Respuesta larga: Tweet, mention, Rt , fav,
      (un)follow, búsquedas...
Twitter API
            ¿Cómo?
             2 APIs:

 RESTfull API (básico + búsquedas)


   STREAM API (en tiempo real)
Twitter API
        RESTful API

            Http
  GET, POST, PUT & DELETE
         Nombre = url
          Stateless
Twitter API

                      APIs
  Hay muchas api, para casi todos los lenguajes.
  (ActionScript/Flash,C++, Clojure, ColdFusion,
  Erlang, Java, JavaScript, .NET, Objective-C /
  Cocoa, Perl, PHP, Python, Ruby, Scala)

  Listado “oficial”
Twitter API

      Estado del API
Twitter API


    OAuth


Estandar abierto de
autentificación segura
Twitter API

         ¡Empezamos!


    dev.twitter.com/apps/new
Twitter API
        Librería del API en php


           github.com/abraham/twitteroauth
require_once("twitteroauth/twitteroauth.php");
Twitter API
        Oauth
Twitter API
Twitter API

                 redirect.php
Creamos con nuestros tokens una url para el user
Si todo sale bien le redirigimos a Twitter
Twitter API
                 callback.php
Verificamos la cuenta
Creamos el objeto $twitteroauth para “hablar” con Twitter
Redirigimos al usuario al index.php
Twitter API


   LEVEL 01
Twitter API
   Ya estamos autentificados y ¿ahora qué?



 dev.twitter.com/docs/api
ᄎ
Twitter API
                                    CURL

                    GET, POST, PUT, DELETE
                          Desde consola

curl --request 'POST' 'https://api.twitter.com/1/statuses/update.json' --data
'include_entities=true&status=Maybe+he%27ll+finally+find+his+keys.+%23peterfalk&trim_user=true'
--header 'Authorization: OAuth oauth_consumer_key="53a7EReUblablabla",
oauth_nonce="289e194fblablabla", oauth_signature="IAjVydC6RwORmi6GyXTbbblablabla",
oauth_signature_method="HMAC-SHA1", oauth_timestamp="1331blablabla",
oauth_token="blablabla-dOWLcGMCYxA9HYS7dblablabla", oauth_version="1.0"' --verbose
Twitter API
    Empecemos con un
                           “Hola mundo”


  $twitteroauth->post('statuses/update', array('status' => '¡Hola mundo!'));
Twitter API
              Un poquito de Ajax

   Cliente           Server
                                     Twitter
   (AJAX)            (php)




             Comodidad al cliente
             Peticiones asíncronas
Twitter API

 $.post("ajax.php",
       { 
        accion: "update_status",
        texto: $("#tweet").val()
       },
      function(data){
          var result = JSON.parse(data);
          alert(result['result']);
          $("#tweet").val("");
 });
Twitter API
       Verificar & mostrar info del usuario:


        $user_info = $twitteroauth­>get('account/verify_credentials');
        $user_name = $user_info­>screen_name;
        $user_img = $user_info­>profile_image_url;
        $user_followers = $user_info­>followers_count;
        $user_following = $user_info­>friends_count;



        echo json_encode(array('user_name'=> $user_name,
                             'user_img'=> $user_img, 
                             'user_followers'=> $user_followers,           
                             'user_following'=>$user_following));
        break;
Twitter API
   GET statuses/home_timeline


     Veamos todos los posibles parámetros
            (todos son optativos):




   count, since_id, max_id, page, trim_user, include_rts,
    include_entities, exclude_replies, contributor_details
Twitter API
                  Timelines:
     Son colecciones de Tweet ordenados
       cronológicamente (+ reciente 1º)
   GET statuses/home_timeline
   GET statuses/mentions
   GET statuses/public_timeline
   GET statuses/retweeted_by_me
   GET statuses/retweeted_to_me
   GET statuses/retweets_of_me
   GET statuses/user_timeline
   GET statuses/retweeted_to_user
   GET statuses/retweeted_by_user
Twitter API
[
    {
    "coordinates": null,
    "favorited": false,
    "created_at": "Fri Jul 16 16:58:46 +0000 2010",



                                      Timelines:
    "truncated": false,
    "entities": {
      "urls": [],
      "hashtags": [],
      "user_mentions": [
        {
          "name": "Stephanie",
          "id": 15473839,
          "indices": [
            27,
            39
          ],
          "screen_name": "craftybeans"
        }
      ]
    },
    "text": "got a lovely surprise from @craftybeans. She sent me the best tshirt ever.
http://www.flickr.com/photos/cindyli/4799054041/ ::giggles::",
    "annotations": null,
    "contributors": null,
    "id": 18700887835,
    "geo": null,
    "in_reply_to_user_id": null,
    "place": null,
    "in_reply_to_screen_name": null,
    "user": {...},
    "source": "web",
    "in_reply_to_status_id": null
  },...
]
Twitter API


   LEVEL 02
Twitter API
                          Tweets:
Los tweets son construcciones atómincas de 140 caracteres más sus
                       meta-datos asociados


                      GET statuses/:id/retweeted_by
                      GET statuses/:id/retweeted_by/ids
                      GET statuses/retweets/:id
                      GET statuses/show/:id
                      POST statuses/destroy/:id
                      POST statuses/retweet/:id
                      POST statuses/update
                      POST
                      statuses/update_with_media
                      GET statuses/oembed new
Twitter API
                             Seach:
 q Query : Se pueden usar oparadores ( AND OR NOT ...)
 geocode
 lang
 locale
 Page: número de la hoja
 result_type
      mixed: Ambos dos.
      recent: devuelve los resultados más recientes
      popular: devuelve los resultados más “populares”
 Rpp: tweet x hoja
 show_user: usuario en el campo text: “user1: Hola mundo!”
 Until: fecha máxima
 since_id: fecha mínima
 include_entities: incluir metadatos de cada tweet.
Twitter API
                                   Seach:

búsqueda de twitter           conteniendo "búsqueda", "de" y "twitter".
"hora feliz"                  conteniendo la frase exacta "hora feliz".
odio OR amor                  conteniendo ya sea "odio" o "amor" (o las dos).
odio AND amor                 conteniendo tanto "odio" como "amor"
cerveza -raíz                 conteniendo "cerveza" pero no "raíz".
#haiku                        conteniendo la etiqueta "haiku".
@mashable                     haciendo referencia al usuario "mashable".
gracioso filter:links         conteniendo "gracioso" y conteniendo enlaces URLs.
noticias source:twitterfeed   conteniendo "noticias" y publicadas vía TwitterFeed
Twitter API
                       $twitteroauth->get('trends/woeid');

                               Yahoo Where On Earth ID
[
    {
        "created_at": "2010-07-15T22:31:11Z",
        "trends": [
          {
            "name": "Premios Juventud",
            "url": "http://search.twitter.com/search?q=Premios+Juventud",
            "query": "Premios+Juventud"
          },
          {
            "name": "#agoodrelationship",
            "url": "http://search.twitter.com/search?q=%23agoodrelationship",
            "query": "%23agoodrelationship"
          },
...
Twitter API


   LEVEL 03
Twitter API
                        RT:
$twitteroauth->post("statuses/retweet/".$id);
//hace un RT y devuelve el tweet con los metadatos
$twitteroauth->post("statuses/destroy/”.%id);
//borra el RT hecho anteriormente
$twitteroauth->post(" statuses/retweets/:id”.$id);
//muestra los 100 últimos RTs
Twitter API
                     Favorite:
$twitteroauth->post("favorites/create/".$id);
// “favoritea” dicho tweet
$twitteroauth->post("favorites/destroy/”.%id);
//borra el fav hecho anteriormente
$twitteroauth->post("favorites”);
//muestra los 20 últimos favs
Twitter API
                                                Follow
                         post('friendships/create', array('screen_name' => “Viroide”));


                                             Unfollow
                                            friendships/destroy


                                               Lookup
                                           friendships/lookup

[
{
       "name":"Mikel Trujillo",
       "connections": [following","followed_by"],
       "id_str":"29681201",
       "screen_name":"Gizakor","id":29681201
},
...]
Twitter API

     Y muchos más métodos:
  Direct Messages, Friends & Followers, Users,
  Suggested Users, Favorites, Lists, Accounts,
  Notification, Saved Searches, Places & Geo,
  Block, Spam Reporting, Help, Legal
Twitter API


   LEVEL 04
Twitter API
  STREAMING
Twitter API


  STREAMING
Twitter API
Streaming:
        Abre un socket permanente
      Puede buscar terminos o usuarios
  Hace falta implementar un sistema de colas

                   Límites:
   400 palabras a trackear, 5,000 usuarios



         TIEMPO REAL
Twitter API
Streaming:

 Métodos:

     statuses/filter
     statuses/firehose
     statuses/links
     statuses/retweet
     statuses/sample

 Documentación
Twitter API
Streaming:

 statuses/filter:
 URL: https://stream.twitter.com/1/statuses/filter.json
 Metodos: POST
 Parametros: count, delimited, follow, locations,
 track, stall_warnings
 Devuelve: stream de estados
Twitter API
Streaming:

 Usaremos la librería OauthPhirehose

 (No hay muchas más opciones en php)

 Si quieres hacerlo a mano: documentación
Twitter API
Streaming:
 Sobreescribimos el método:

 public function enqueueStatus($status)
 {

     $data = json_decode($status, true);
     if (is_array($data) && isset($data['user']['screen_name']))
     {
       $filePath = '/var/www/tweets/pila.tweet';
       file_put_contents($filePath, $status);
     }

 }
Twitter API

   LEVEL 05
       Final stage
WIIIIIIIIIN!!!
Twitter API

 GRACIAS POR VENIR
      PREGUNTAS
           O

         QUEJAS