SlideShare a Scribd company logo
1 of 41
Download to read offline
< APIs de
medios sociales />
   Víctor R. Ruiz <rvr@linotipo.es>
  Tenerife, 18 de noviembre de 2011
Llamadas remotas
RSS: Sindicación
    Sólo lectura
Blogger API
Lectura/Escritura (XML-RPC)




    http://sourceforge.net/projects/blogalia/files/Blogatex/0.1/
APIs ReST
         HTTP + XML/JSON

• Transferencia de Estado Representado
• Protocolo cliente/servidor sin estado.
• HTTP.
• Operaciones definidas.
 • POST, GET, PUT y DELETE.
• Respuestas: XML/JSON
APIs ReST
           HTTP + 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 ReST
                HTTP + 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 API
GET http://search.twitter.com/search.json?q=El%20Hierro
Twitter: Search API
         Anatomí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 API
               Anatomí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 API
        Pará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 API
       Operadores 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 + Python
               Twython


• Librería de acceso a Twitter en Python.
• Licencia MIT (software libre).
• Por Ryan McGrath.
• Disponible en github/ryanmcgrath/
  twython.
Twython
                       Búsquedas


# Cargar librería
from twython import Twython

# Instanciar twython
twitter = Twython()

# Hacer búsqueda
resultados = twitter.search(q=”El Hierro”)
print resultados
Twython
Búsquedas: Diccionario de resultados

# Cargar librería
from twython import Twython

# Instanciar twython
twitter = Twython()

# Hacer búsqueda
resultados = twitter.search(q=”El Hierro”)

# resultados es un diccionario
print “Búsqueda: “, resultados[‘query’]
print “Siguiente página: ”, resultados[‘next_page’]
Twython
   Búsquedas: Resultados por página

# Cargar librería
from twython import Twython

# Instanciar twython
twitter = Twython()

# Hacer búsqueda, 100 resultados por página
resultados = twitter.search(q=”El Hierro”, rpp=100)

# Mostrar número de tweets obtenidos en la búsqueda
print len(resultados[‘results’])
Twython
         Búsquedas: Recorrer tuits


# Cargar libreria
from twython import Twython

# Buscar en Twitter
twitter = Twython()
resultados = twitter.search (q="El Hierro")

# Recorrer resultados
for tweet in resultados['results']:
    print tweet['from_user'], tweet['text']
Twython
Búsquedas: Guardar resultados (CSV)
  # Cargar librerías
  import csv
  from twython import Twython

  # Crear archivo CSV
  fichero = open('tweets.csv', 'wb')
  fichero_csv = csv.writer(fichero)

  # Buscar en Twitter
  twitter = Twython()
  resultados = twitter.search (q="El Hierro")

  # Recorrer resultados
  for 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 API
GET http://graph.facebook.com/search?q=El+Hierro
Facebook: Graph API
         Anatomí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 API
              Anatomí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
u00253Au00252Fu00252Fwww.ecplanet.comu00252Fsitesu00252Fecplanet.comu00252Ffiles
u00252Fu3u00252F02974_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 API
        Pará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 API
           Tipos 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 API
                              Python
# Cargar librerías
import urllib
import urllib2
import simplejson

# Parámetros de la búsqueda
parametros = { 'q' : 'El Hierro', 'type' : 'posts' }
# Codificar parámetros para la URL
get_params = urllib.urlencode(parametros)
# Componer URL
url = 'http://graph.facebook.com/search?%s' %(get_params)

# Abrir URL
http = urllib2.urlopen(url)
pagina = http.read()

# Convertir datos de JSON a diccionario
resultados = simplejson.loads(pagina)

# Mostrar contenido
print resultados
Facebook: Graph API
                              Python
# Cargar librerías
import urllib
import urllib2
import simplejson

# Parámetros de la búsqueda
parametros = { 'q' : 'El Hierro', 'type' : 'posts' }
# Codificar parámetros para la URL
get_params = urllib.urlencode(parametros)
# Componer URL
url = 'http://graph.facebook.com/search?%s' %(get_params)

# Abrir URL
http = urllib2.urlopen(url)
pagina = http.read()

# Convertir datos de JSON a diccionario
resultados = simplejson.loads(pagina)

# resultados es diccionario
print len(resultados['data'])
print resultados['paging']['next']
Facebook: Graph API
                              Python
# Cargar librerías
import urllib
import urllib2
import simplejson

# Parámetros de la búsqueda
parametros = { 'q' : 'El Hierro', 'type' : 'posts' }
# Codificar parámetros para la URL
get_params = urllib.urlencode(parametros)
# Componer URL
url = 'http://graph.facebook.com/search?%s' %(get_params)

# Abrir URL
http = urllib2.urlopen(url)
pagina = http.read()

# Convertir datos de JSON a diccionario
resultados = simplejson.loads(pagina)

# Recorrer resultados
for 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 sociales
   Víctor R. Ruiz <rvr@linotipo.es>
Tenerife, 14-18 de noviembre de 2011
Contacto

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

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

More Related Content

Similar to APIs de medios sociales

Desarrollo de Aplicaciones para Twitter - CWZGZ
Desarrollo de Aplicaciones para Twitter - CWZGZDesarrollo de Aplicaciones para Twitter - CWZGZ
Desarrollo de Aplicaciones para Twitter - CWZGZ
equipo24
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
octabio
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en Android
Alberto Ruibal
 
Lorenzo Martínez - Cooking an APT in the paranoid way [RootedSatellite Valen...
Lorenzo Martínez  - Cooking an APT in the paranoid way [RootedSatellite Valen...Lorenzo Martínez  - Cooking an APT in the paranoid way [RootedSatellite Valen...
Lorenzo Martínez - Cooking an APT in the paranoid way [RootedSatellite Valen...
RootedCON
 

Similar to APIs de medios sociales (20)

Taller definición de apis
Taller definición de apisTaller definición de apis
Taller definición de apis
 
Cien usos con serverless
Cien usos con serverlessCien usos con serverless
Cien usos con serverless
 
Servicios web con Python
Servicios web con PythonServicios web con Python
Servicios web con Python
 
Scraping the web with python
Scraping the web with pythonScraping the web with python
Scraping the web with python
 
Automatic API REST Droidcon
Automatic API REST DroidconAutomatic API REST Droidcon
Automatic API REST Droidcon
 
Desarrollo de Aplicaciones para Twitter - CWZGZ
Desarrollo de Aplicaciones para Twitter - CWZGZDesarrollo de Aplicaciones para Twitter - CWZGZ
Desarrollo de Aplicaciones para Twitter - CWZGZ
 
RAML
RAMLRAML
RAML
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera api
 
Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apis
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en Android
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSH
 
Curso de Django | Django Course
Curso de Django | Django CourseCurso de Django | Django Course
Curso de Django | Django Course
 
RESTful Para todos by Diego Sapriza
RESTful Para todos by Diego SaprizaRESTful Para todos by Diego Sapriza
RESTful Para todos by Diego Sapriza
 
PowerShell para SharePoint OnPremises y Online, la herramienta compartida por...
PowerShell para SharePoint OnPremises y Online, la herramienta compartida por...PowerShell para SharePoint OnPremises y Online, la herramienta compartida por...
PowerShell para SharePoint OnPremises y Online, la herramienta compartida por...
 
Prepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuroPrepara tus apps de SharePoint y Office 365 para el futuro
Prepara tus apps de SharePoint y Office 365 para el futuro
 
Lorenzo Martínez - Cooking an APT in the paranoid way [RootedSatellite Valen...
Lorenzo Martínez  - Cooking an APT in the paranoid way [RootedSatellite Valen...Lorenzo Martínez  - Cooking an APT in the paranoid way [RootedSatellite Valen...
Lorenzo Martínez - Cooking an APT in the paranoid way [RootedSatellite Valen...
 
Web services restful con JAX-RS
Web services restful con JAX-RSWeb services restful con JAX-RS
Web services restful con JAX-RS
 
Original Hacker 5
Original Hacker 5Original Hacker 5
Original Hacker 5
 
Symfony parte 15 Consultas y Migración
Symfony parte 15 Consultas y MigraciónSymfony parte 15 Consultas y Migración
Symfony parte 15 Consultas y Migración
 

More from Víctor R. Ruiz

Introducción a Arduino - Parte I
Introducción a Arduino - Parte IIntroducción a Arduino - Parte I
Introducción a Arduino - Parte I
Víctor R. Ruiz
 
¿Quién vigila a los vigilantes? Privacidad en la Era de Internet
¿Quién vigila a los vigilantes? Privacidad en la Era de Internet¿Quién vigila a los vigilantes? Privacidad en la Era de Internet
¿Quién vigila a los vigilantes? Privacidad en la Era de Internet
Víctor R. Ruiz
 
Software libre como futuro profesional
Software libre como futuro profesionalSoftware libre como futuro profesional
Software libre como futuro profesional
Víctor R. Ruiz
 

More from Víctor R. Ruiz (20)

Pseudociencia y desinformación
Pseudociencia y desinformaciónPseudociencia y desinformación
Pseudociencia y desinformación
 
MicroPython y ESP32
MicroPython y ESP32MicroPython y ESP32
MicroPython y ESP32
 
MicroPython en el ESP8266
MicroPython en el ESP8266MicroPython en el ESP8266
MicroPython en el ESP8266
 
Programación del ESP8266 con el IDE de Arduino
Programación del ESP8266 con el IDE de ArduinoProgramación del ESP8266 con el IDE de Arduino
Programación del ESP8266 con el IDE de Arduino
 
Raspberry Pi 2: Instalación y configuración
Raspberry Pi 2: Instalación y configuraciónRaspberry Pi 2: Instalación y configuración
Raspberry Pi 2: Instalación y configuración
 
Visión artificial con Processing y OpenCV
Visión artificial con Processing y OpenCVVisión artificial con Processing y OpenCV
Visión artificial con Processing y OpenCV
 
Vídeo en tiempo real con Processing
Vídeo en tiempo real con Processing Vídeo en tiempo real con Processing
Vídeo en tiempo real con Processing
 
Raspberry Pi + Arduino
Raspberry Pi + ArduinoRaspberry Pi + Arduino
Raspberry Pi + Arduino
 
Control remoto de Arduino con Firmata y Processing
Control remoto de Arduino con Firmata y ProcessingControl remoto de Arduino con Firmata y Processing
Control remoto de Arduino con Firmata y Processing
 
Cómo hacer librerías en Arduino
Cómo hacer librerías en ArduinoCómo hacer librerías en Arduino
Cómo hacer librerías en Arduino
 
Guía de Visualino
Guía de VisualinoGuía de Visualino
Guía de Visualino
 
Arduino y series de datos
Arduino y series de datosArduino y series de datos
Arduino y series de datos
 
Introducción a Fritzing
Introducción a FritzingIntroducción a Fritzing
Introducción a Fritzing
 
Introducción a los 'time-lapses' astronómicos
Introducción a los 'time-lapses' astronómicosIntroducción a los 'time-lapses' astronómicos
Introducción a los 'time-lapses' astronómicos
 
Introducción a Arduino (II)
Introducción a Arduino (II)Introducción a Arduino (II)
Introducción a Arduino (II)
 
Introducción a Arduino - Parte I
Introducción a Arduino - Parte IIntroducción a Arduino - Parte I
Introducción a Arduino - Parte I
 
¿Quién vigila a los vigilantes? Privacidad en la Era de Internet
¿Quién vigila a los vigilantes? Privacidad en la Era de Internet¿Quién vigila a los vigilantes? Privacidad en la Era de Internet
¿Quién vigila a los vigilantes? Privacidad en la Era de Internet
 
La isla de Pascua y la estructura del Universo
La isla de Pascua y la estructura del UniversoLa isla de Pascua y la estructura del Universo
La isla de Pascua y la estructura del Universo
 
Fin: Apocalipsis celestes
Fin: Apocalipsis celestesFin: Apocalipsis celestes
Fin: Apocalipsis celestes
 
Software libre como futuro profesional
Software libre como futuro profesionalSoftware libre como futuro profesional
Software libre como futuro profesional
 

Recently uploaded

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Recently uploaded (11)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

APIs de medios sociales

  • 1. < APIs de medios sociales /> Víctor R. Ruiz <rvr@linotipo.es> Tenerife, 18 de noviembre de 2011
  • 3. RSS: Sindicación Sólo lectura
  • 4. Blogger API Lectura/Escritura (XML-RPC) http://sourceforge.net/projects/blogalia/files/Blogatex/0.1/
  • 5. APIs ReST HTTP + XML/JSON • Transferencia de Estado Representado • Protocolo cliente/servidor sin estado. • HTTP. • Operaciones definidas. • POST, GET, PUT y DELETE. • Respuestas: XML/JSON
  • 6. APIs ReST HTTP + 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>
  • 7. APIs ReST HTTP + XML/JSON GET http://web.api/usuario?id=20 { “usuario” : { “id” : 20, “nombre” : “Juan Pérez Fernández”, “web” : “http://fernandez.perez.juan/” } }
  • 8. Un mundo de APIs http://www.programmableweb.com/apis
  • 10. Twitter API https://dev.twitter.com/
  • 11. Twitter API • Twitter API. • ReST, JSON. • Búsquedas. • Search API. • Streaming API. • Usuarios. • Lectura/escritura. • Autentificación OAuth.
  • 12. Twitter API: Límites • Sin autentificar. • 150 llamadas/hora por IP. • Autentificadas (OAuth). • 350 llamadas/hora por token.
  • 13. Twitter: Search API GET http://search.twitter.com/search.json?q=El%20Hierro
  • 14. Twitter: Search API Anatomí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" }
  • 15. Twitter: Search API Anatomí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 }
  • 16. Twitter: Search API Pará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
  • 17. Twitter: Search API Operadores 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
  • 18. Twitter + Python Twython • Librería de acceso a Twitter en Python. • Licencia MIT (software libre). • Por Ryan McGrath. • Disponible en github/ryanmcgrath/ twython.
  • 19. Twython Búsquedas # Cargar librería from twython import Twython # Instanciar twython twitter = Twython() # Hacer búsqueda resultados = twitter.search(q=”El Hierro”) print resultados
  • 20. Twython Búsquedas: Diccionario de resultados # Cargar librería from twython import Twython # Instanciar twython twitter = Twython() # Hacer búsqueda resultados = twitter.search(q=”El Hierro”) # resultados es un diccionario print “Búsqueda: “, resultados[‘query’] print “Siguiente página: ”, resultados[‘next_page’]
  • 21. Twython Búsquedas: Resultados por página # Cargar librería from twython import Twython # Instanciar twython twitter = Twython() # Hacer búsqueda, 100 resultados por página resultados = twitter.search(q=”El Hierro”, rpp=100) # Mostrar número de tweets obtenidos en la búsqueda print len(resultados[‘results’])
  • 22. Twython Búsquedas: Recorrer tuits # Cargar libreria from twython import Twython # Buscar en Twitter twitter = Twython() resultados = twitter.search (q="El Hierro") # Recorrer resultados for tweet in resultados['results']: print tweet['from_user'], tweet['text']
  • 23. Twython Búsquedas: Guardar resultados (CSV) # Cargar librerías import csv from twython import Twython # Crear archivo CSV fichero = open('tweets.csv', 'wb') fichero_csv = csv.writer(fichero) # Buscar en Twitter twitter = Twython() resultados = twitter.search (q="El Hierro") # Recorrer resultados for tweet in resultados['results']:    # Crear lista    row = [tweet['from_user'], tweet['created_at']]    # Escribir tweet en fichero csv    fichero_csv.writerow(row) fichero.close()
  • 24. 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.
  • 26. Facebook API https://developers.facebook.com/
  • 27. Facebook API • Graph API. • ReST, JSON. • Búsqueda y lectura/escritura. • Usuarios. • Lectura/escritura. • Autentificación OAuth.
  • 28. Graph API: Límites • Autentificadas (OAuth). • 600 llamadas cada 600 segundos.
  • 29. Facebook: Graph API GET http://graph.facebook.com/search?q=El+Hierro
  • 30. Facebook: Graph API Anatomí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" } }
  • 31. Facebook: Graph API Anatomí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 u00253Au00252Fu00252Fwww.ecplanet.comu00252Fsitesu00252Fecplanet.comu00252Ffiles u00252Fu3u00252F02974_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" },
  • 32. Facebook: Graph API Pará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/
  • 33. Facebook: Graph API Tipos 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.
  • 34. Facebook: Graph API Python # Cargar librerías import urllib import urllib2 import simplejson # Parámetros de la búsqueda parametros = { 'q' : 'El Hierro', 'type' : 'posts' } # Codificar parámetros para la URL get_params = urllib.urlencode(parametros) # Componer URL url = 'http://graph.facebook.com/search?%s' %(get_params) # Abrir URL http = urllib2.urlopen(url) pagina = http.read() # Convertir datos de JSON a diccionario resultados = simplejson.loads(pagina) # Mostrar contenido print resultados
  • 35. Facebook: Graph API Python # Cargar librerías import urllib import urllib2 import simplejson # Parámetros de la búsqueda parametros = { 'q' : 'El Hierro', 'type' : 'posts' } # Codificar parámetros para la URL get_params = urllib.urlencode(parametros) # Componer URL url = 'http://graph.facebook.com/search?%s' %(get_params) # Abrir URL http = urllib2.urlopen(url) pagina = http.read() # Convertir datos de JSON a diccionario resultados = simplejson.loads(pagina) # resultados es diccionario print len(resultados['data']) print resultados['paging']['next']
  • 36. Facebook: Graph API Python # Cargar librerías import urllib import urllib2 import simplejson # Parámetros de la búsqueda parametros = { 'q' : 'El Hierro', 'type' : 'posts' } # Codificar parámetros para la URL get_params = urllib.urlencode(parametros) # Componer URL url = 'http://graph.facebook.com/search?%s' %(get_params) # Abrir URL http = urllib2.urlopen(url) pagina = http.read() # Convertir datos de JSON a diccionario resultados = simplejson.loads(pagina) # Recorrer resultados for objeto in resultados[‘data’]: print objeto[‘id’], objeto[‘from’][‘name’]
  • 37. Utilidades Graph API • Explorador de Graph API. • SDKs oficiales: JavaScript, PHP, iOS, Android. • FacePy (Python).
  • 38. 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.
  • 39. ¡Gracias por su atención!
  • 40. Cómo obtener información en redes sociales Víctor R. Ruiz <rvr@linotipo.es> Tenerife, 14-18 de noviembre de 2011
  • 41. Contacto Víctor R. Ruiz twitter.com/vrruiz · rvr.linotipo.es > Otras presentaciones disponibles en < http://linotipo.es/