Si recuerdan, en la anterior entrada introdujimos los diferentes elementos que vamos a necesitar para desarrollar un pequeño PoC que nos permita explotar la información de Twitter. Una vez descritos los preliminares, ahora es cuando toca entrar en materia.
Lo primero que haremos será crear una aplicación nueva en Twitter, para ello podemos seguir cualquiera de los innumerables tutoriales que existen y hacernos con el consumer_token y el consumer_secret que serán algo así estos son inventados, deberemos obtener los nuestros:
consumer_token = K4a5Evw9bMnWhQDxb5tPBZPzjY consumer_secret = j7CsoQtFiNArbITSYqYG5hw37NDF0lg1B7MBlBNRQ RffVWWmug0
Estas claves las necesitaremos para hacer la danza OAuth y permitir a nuestra aplicación usar nuestra cuenta, ya que para acceder a ciertas funcionalidades de la API tendremos que estar logueados.
Ahora, antes de nada, prepararemos la cabecera de nuestro script con su Shebang, la codificación del documento y los imports que necesitaremos para el proyecto.
#!/usr/bin/env python # -*- coding: utf-8 -*- from time import sleep from sys import exit import tweepy from json import loads
Después de haber definido la cabecera podremos empezar con el código. Para autorizar nuestra aplicación en nuestra cuenta lo haremos de la siguiente forma:
########## CONFIG ########## consumer_token = 'K4a5Evw9bMnWhQDxb5tPBZPzjY' consumer_secret = 'j7CsoQtFiNArbITSYqYG5hw37NDF0lg1B7MBlBNR QRffVWWmug0' access_token = '' access_secret = '' ############################ def OAuth(): ''' Returns api object ''' cToken = consumer_token cSecret = consumer_secret aToken = access_token aSecret = access_secret # Instanciamos el gestor de autorización auth = tweepy.OAuthHandler(cToken, cSecret) '''En el caso de que no tengamos los tokens de autorización de nuestra cuenta solicitaremos la url que nos generará el pin.''' if aToken == '' or aSecret == '': try: redirect_url = auth.get_authorization_url() print('Ve a Twitter y autoriza la aplicación: {0}'.format(redirect_url)) except tweepy.TweepError: print('Error al solicitar el token.') # Le pasamos el PIN a auth para que solicite los tokens verifier = raw_input('Verificador: ').strip() auth.get_access_token(verifier) '''Guardamos nuestros tokens y los imprimimos en pantalla para añadirlos a las variables de configuración. Así la próxima vez no tendremos que realizar este paso.''' aToken = auth.access_token.key aSecret = auth.access_token.secret log('Tu access_token: {0}'.format(aToken)) log('Tu access_secret: {0}'.format(aSecret)) # Setea auth token y secret auth.set_access_token(aToken, aSecret) # Devolvemos una tupla para usarla con la API REST y la API de Streaming return (tweepy.API(auth), auth)
Para obtener ahora acceso a los métodos de la API, lo único que tendremos que hacer es llamar a nuestra función y asignar la tupla a nuestras variables para la API REST solo usaremos la variable api:
api, auth = OAuth()
Ahora comprobamos que lo que hemos hecho funciona solicitando los trends globales mediante:
print(api.trends_place(1))
Si todo ha ido bien deberemos obtener un JSON que probablemente nos ofusque un poco la salida que esperábamos, así que, sabiendo que es un JSON, procedemos a tratarlo como si fuera un diccionario, y ya que estamos lo ordenamos y metemos en una función.
def getTrends(woeid=1): ''' Devuelve una lista de trends por localización, la localización es un WOEID de Yahoo, el ID para todo todo el mundo es 1.''' '''Hacemos una llamada a la API y recuperamos directamente los elementos que nos interesan del diccionario.''' trends = api.trends_place(1)[0]['trends'] # Extraemos el nombre de los trends y los devolvemos. trendList = [trend['name'] for trend in trends] return trendList
y la llamamos solicitando los trending topics de Valencia el WOEID de Valencia es 776688:
# Recuperamos los tt y los imprimimos uno por uno trendingTopics = getTrends(woeid=776688) for topic in trendingTopics: print(topic)
Y de esta forma se harían las llamadas a la API, como dijimos al principio, RESTfull. Conforme se ahonda en las opciones de la API te das cuenta que está pensada para gestionar nuestra cuenta, obtener estados, información, recuperar elementos del pasado y casi todo lo que podamos imaginar, pero… para OSINT nos interesa obtener datos en tiempo real, ¿como lo podemos hacer? pues con la segunda forma de acceso, la API de Streaming.
Pero eso lo veremos en la próxima entrada de la serie. Dejadnos en los comentarios cualquier duda o aspecto que os resulte interesante destacar.