apis de medios sociales

Post on 14-Jun-2015

1.218 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Introducción a las APIs de medios sociales, con ejemplos de acceso a Twitter y Facebook. Leer en combinación con la presentación "Tecnologías web y Python" http://www.slideshare.net/rvr/tecnologas-web-python

TRANSCRIPT

< APIs demedios sociales />

Víctor R. Ruiz <rvr@linotipo.es>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/” }}

Twitter API

Twitter API: Límites

•Sin autentificar.

•150 llamadas/hora por IP.

•Autentificadas (OAuth).

•350 llamadas/hora por token.

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": "&lt;a href=&quot;http://autotuits.com&quot; rel=&quot;nofollow&quot;&gt;autotuits&lt;/a&gt;", "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

• 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 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’]

¡Gracias por su atención!

Cómo obtener información

en redes socialesVíctor R. Ruiz <rvr@linotipo.es>

Tenerife, 14-18 de noviembre de 2011

Contacto

Víctor R. Ruiztwitter.com/vrruiz · rvr.linotipo.es

> Otras presentaciones disponibles en <http://linotipo.es/

top related