< APIs demedios sociales />
Víctor R. Ruiz <[email protected]>Tenerife, 18 de noviembre de 2011
Llamadas remotas
RSS: SindicaciónSólo lectura
Blogger APILectura/Escritura (XML-RPC)
http://sourceforge.net/projects/blogalia/files/Blogatex/0.1/
APIs ReSTHTTP + XML/JSON
•Transferencia de Estado Representado
•Protocolo cliente/servidor sin estado.
•HTTP.
•Operaciones definidas.
•POST, GET, PUT y DELETE.
•Respuestas: XML/JSON
APIs ReSTHTTP + XML/JSON
GET http://web.api/usuario?id=20
<usuario> <id>20</id> <nombre>Juan Pérez Fernández</nombre> <web>http://fernandez.perez.juan/</web></usuario>
APIs ReSTHTTP + XML/JSON
GET http://web.api/usuario?id=20
{ “usuario” : { “id” : 20, “nombre” : “Juan Pérez Fernández”, “web” : “http://fernandez.perez.juan/” }}
Un mundo de APIs
http://www.programmableweb.com/apis
Twitter API
Twitter API
https://dev.twitter.com/
Twitter API• Twitter API.
• ReST, JSON.
• Búsquedas.
• Search API.
• Streaming API.
• Usuarios.
• Lectura/escritura.
• Autentificación OAuth.
Twitter API: Límites
•Sin autentificar.
•150 llamadas/hora por IP.
•Autentificadas (OAuth).
•350 llamadas/hora por token.
Twitter: Search APIGET http://search.twitter.com/search.json?q=El%20Hierro
Twitter: Search APIAnatomía de la respuesta
{ "completed_in": 0.093, "max_id": 137515427810131968, "max_id_str": "137515427810131968", "next_page": "?page=2&max_id=137515427810131968&q=El%20Hierro", "page": 1, "query": "El+Hierro", "refresh_url": "?since_id=137515427810131968&q=El%20Hierro", "results": [ ... ], "results_per_page": 15, "since_id": 0, "since_id_str": "0"}
Twitter: Search APIAnatomía de un tweet
{ "created_at": "Fri, 18 Nov 2011 13:00:07 +0000", "from_user": "oydaragua", "from_user_id": 287701318, "from_user_id_str": "287701318", "from_user_name": "LaOfertaylaDemandaA", "geo": null, "id": 137515427810131968, "id_str": "137515427810131968", "iso_language_code": "es", "metadata": { "result_type": "recent" }, "profile_image_url": "http://a1.twimg.com/profile_images/1332147157/Sin_t_tulo-1_normal.jpg", "source": "<a href="http://autotuits.com" rel="nofollow">autotuits</a>", "text": "Todo para el herrero puerta de metal fondeadas para doble cerradura desde 2500Bs,laminas,tubos de hierro,cabillas torneadas,angulos y mas", "to_user_id": null, "to_user_id_str": null}
Twitter: Search APIParámetros de búsqueda
q: Cadena de búsqueda. ?q=ULL
lang: Filtro por idioma. ?lang=es
since_id: Resultados con el ID mayor que.
rpp: Tweets por página de resultados. ?rpp=50
https://dev.twitter.com/docs/api/1/get/search
Twitter: Search APIOperadores de búsqueda
el OR hierro Resultados con cualquiera de las dos palabras.
“el hierro” Búsqueda exacta.
-el hierro Resultados con “hierro” pero sin “el”.
from:usuario Escritos por el usuario.
@usuario Menciones al usuario.
https://dev.twitter.com/docs/using-search
Twitter + PythonTwython
•Librería de acceso a Twitter en Python.
•Licencia MIT (software libre).
•Por Ryan McGrath.
•Disponible en github/ryanmcgrath/twython.
TwythonBúsquedas
# Cargar libreríafrom twython import Twython
# Instanciar twythontwitter = Twython()
# Hacer búsquedaresultados = twitter.search(q=”El Hierro”)print resultados
TwythonBúsquedas: Diccionario de resultados
# Cargar libreríafrom twython import Twython
# Instanciar twythontwitter = Twython()
# Hacer búsquedaresultados = twitter.search(q=”El Hierro”)
# resultados es un diccionarioprint “Búsqueda: “, resultados[‘query’]print “Siguiente página: ”, resultados[‘next_page’]
TwythonBúsquedas: Resultados por página
# Cargar libreríafrom twython import Twython
# Instanciar twythontwitter = Twython()
# Hacer búsqueda, 100 resultados por páginaresultados = twitter.search(q=”El Hierro”, rpp=100)
# Mostrar número de tweets obtenidos en la búsquedaprint len(resultados[‘results’])
TwythonBúsquedas: Recorrer tuits
# Cargar libreriafrom twython import Twython
# Buscar en Twittertwitter = Twython()resultados = twitter.search (q="El Hierro")
# Recorrer resultadosfor tweet in resultados['results']: print tweet['from_user'], tweet['text']
TwythonBúsquedas: Guardar resultados (CSV)
# Cargar libreríasimport csvfrom twython import Twython
# Crear archivo CSVfichero = open('tweets.csv', 'wb')fichero_csv = csv.writer(fichero)
# Buscar en Twittertwitter = Twython()resultados = twitter.search (q="El Hierro")
# Recorrer resultadosfor tweet in resultados['results']: # Crear lista row = [tweet['from_user'], tweet['created_at']] # Escribir tweet en fichero csv fichero_csv.writerow(row)
fichero.close()
Librerías para Twitter
•Lista de librerías en dev.twitter.com
•Flash, C++, Clojure, Erlang, Java, JavaScript, .NET, Objective-C, Perl, PHP, Python, Ruby, Scala.
Facebook API
Facebook API
https://developers.facebook.com/
Facebook API
• Graph API.
• ReST, JSON.
• Búsqueda y lectura/escritura.
• Usuarios.
• Lectura/escritura.
• Autentificación OAuth.
Graph API: Límites
•Autentificadas (OAuth).
•600 llamadas cada 600 segundos.
Facebook: Graph APIGET http://graph.facebook.com/search?q=El+Hierro
Facebook: Graph APIAnatomía de la respuesta
{ "data": [ … ], "paging": { "previous": "http:\/\/graph.facebook.com\/search?q=El+Hierro&limit=25&since=1321468704", "next": "http:\/\/graph.facebook.com\/search?q=El+Hierro&limit=25&until=1318323720" }}
Facebook: Graph APIAnatomía de los contenidos
{ "id": "1436858786_250763664960096", "from": { "name": "Maria Danyi", "id": "1436858786" }, "story": "Maria Danyi shared a link.", "story_tags": { "0": [ { "id": 1436858786, "name": "Maria Danyi", "offset": 0, "length": 11 } ] }, "picture": "http:\/\/external.ak.fbcdn.net\/safe_image.php?d=AQDSegal3g7PeP4k&w=90&h=90&url=http\u00253A\u00252F\u00252Fwww.ecplanet.com\u00252Fsites\u00252Fecplanet.com\u00252Ffiles\u00252Fu3\u00252F02974_nuova_isola_canarie.jpg", "link": "http:\/\/www.ecplanet.com\/node\/2836", "name": "Emerge un'isola delle Canarie vicino a El Hierro | www.ecplanet.com", "caption": "www.ecplanet.com", "description": "Un'isola delle Canarie tutta nuova sta emergendo dal mare mentre un vulcano sotomarinpo sta eruttando verso la superficie.", "icon": "http:\/\/static.ak.fbcdn.net\/rsrc.php\/v1\/yD\/r\/aS8ecmYRys0.gif", "type": "link", "application": { "name": "Links", "id": "2309869772"},
Facebook: Graph APIParámetros de búsqueda
q: Cadena de búsqueda. ?q=El+Hierro
type: Tipo de “objeto”. ?type=post
fields: Campos a devolver. ?fields=name
https://developers.facebook.com/docs/reference/api/
Facebook: Graph APITipos de objetos
Achievement, Album, Application, Checkin, Comment, Domain, Event,
FriendList, Group, Insights, Link, Message, Note, Page, Photo, Post, Question,
QuestionOption, Review, Status message, Subscription, Thread, User, Video.
Facebook: Graph APIPython
# Cargar libreríasimport urllibimport urllib2import simplejson
# Parámetros de la búsquedaparametros = { 'q' : 'El Hierro', 'type' : 'posts' }# Codificar parámetros para la URLget_params = urllib.urlencode(parametros)# Componer URLurl = 'http://graph.facebook.com/search?%s' %(get_params)
# Abrir URLhttp = urllib2.urlopen(url)pagina = http.read()
# Convertir datos de JSON a diccionarioresultados = simplejson.loads(pagina)
# Mostrar contenidoprint resultados
Facebook: Graph APIPython
# Cargar libreríasimport urllibimport urllib2import simplejson
# Parámetros de la búsquedaparametros = { 'q' : 'El Hierro', 'type' : 'posts' }# Codificar parámetros para la URLget_params = urllib.urlencode(parametros)# Componer URLurl = 'http://graph.facebook.com/search?%s' %(get_params)
# Abrir URLhttp = urllib2.urlopen(url)pagina = http.read()
# Convertir datos de JSON a diccionarioresultados = simplejson.loads(pagina)
# resultados es diccionarioprint len(resultados['data'])print resultados['paging']['next']
Facebook: Graph APIPython
# Cargar libreríasimport urllibimport urllib2import simplejson
# Parámetros de la búsquedaparametros = { 'q' : 'El Hierro', 'type' : 'posts' }# Codificar parámetros para la URLget_params = urllib.urlencode(parametros)# Componer URLurl = 'http://graph.facebook.com/search?%s' %(get_params)
# Abrir URLhttp = urllib2.urlopen(url)pagina = http.read()
# Convertir datos de JSON a diccionarioresultados = simplejson.loads(pagina)
# Recorrer resultadosfor objeto in resultados[‘data’]: print objeto[‘id’], objeto[‘from’][‘name’]
Utilidades Graph API
•Explorador de Graph API.
• SDKs oficiales: JavaScript, PHP, iOS, Android.
•FacePy (Python).
Más información
• Programming Collective Intelligence, Toby Seagram (O’Reilly).
• Mining the Social Web, Matthew A. Russell (O’Reilly).
• Data mining, Matthew Hurst.
• infosthetics, blog.
¡Gracias por su atención!
Cómo obtener información
en redes socialesVíctor R. Ruiz <[email protected]>
Tenerife, 14-18 de noviembre de 2011
Contacto
Víctor R. Ruiztwitter.com/vrruiz · rvr.linotipo.es
> Otras presentaciones disponibles en <http://linotipo.es/