python - consumerkey - twitter developer login
Cómo agregar un filtro de ubicación al módulo tweepy (3)
He encontrado la siguiente pieza de código que funciona bastante bien para permitirme ver en Python Shell el 1% estándar de Twitter firehose:
import sys
import tweepy
consumer_key=""
consumer_secret=""
access_key = ""
access_secret = ""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
class CustomStreamListener(tweepy.StreamListener):
def on_status(self, status):
print status.text
def on_error(self, status_code):
print >> sys.stderr, ''Encountered error with status code:'', status_code
return True # Don''t kill the stream
def on_timeout(self):
print >> sys.stderr, ''Timeout...''
return True # Don''t kill the stream
sapi = tweepy.streaming.Stream(auth, CustomStreamListener())
sapi.filter(track=[''manchester united''])
¿Cómo agrego un filtro para solo analizar los tweets desde una ubicación determinada? He visto personas que agregan GPS a otros códigos Python relacionados con Twitter, pero no puedo encontrar nada específico para sapi dentro del módulo Tweepy.
¿Algunas ideas?
Gracias
La API de transmisión no permite filtrar por ubicación Y palabras clave simultáneamente.
Los cuadros delimitadores no actúan como filtros para otros parámetros de filtro. Por ejemplo track = twitter & locations = -122.75,36.8, -121.75,37.8 coincidiría con cualquier tweet que contenga el término Twitter (incluso tweets que no sean geo) O que venga del área de San Francisco.
Fuente: https://dev.twitter.com/docs/streaming-apis/parameters#locations
Lo que puede hacer es preguntar a la API de transmisión por palabras clave o tweets localizados y luego filtrar la secuencia resultante en su aplicación al examinar cada tweet.
Si modifica el código de la siguiente manera, capturará los tweets en el Reino Unido, y luego esos tweets se filtrarán para mostrar solo los que contienen "manchester united".
import sys
import tweepy
consumer_key=""
consumer_secret=""
access_key=""
access_secret=""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
class CustomStreamListener(tweepy.StreamListener):
def on_status(self, status):
if ''manchester united'' in status.text.lower():
print status.text
def on_error(self, status_code):
print >> sys.stderr, ''Encountered error with status code:'', status_code
return True # Don''t kill the stream
def on_timeout(self):
print >> sys.stderr, ''Timeout...''
return True # Don''t kill the stream
sapi = tweepy.streaming.Stream(auth, CustomStreamListener())
sapi.filter(locations=[-6.38,49.87,1.77,55.81])
sapi.filter (track = [''manchester united''], locations = [''Coordenadas GPS''])
Juan dio la respuesta correcta. Estoy filtrando para Alemania solo usando esto:
# Bounding boxes for geolocations
# Online-Tool to create boxes (c+p as raw CSV): http://boundingbox.klokantech.com/
GEOBOX_WORLD = [-180,-90,180,90]
GEOBOX_GERMANY = [5.0770049095, 47.2982950435, 15.0403900146, 54.9039819757]
stream.filter(locations=GEOBOX_GERMANY)
Esta es una caja bastante cruda que incluye partes de otros países. Si desea un grano más fino, puede combinar múltiples cajas para completar la ubicación que necesita.
Sin embargo, cabe señalar que limita el número de tweets un poco si filtra por etiquetas geográficas . Esto es de aproximadamente 5 millones de Tweets de mi base de datos de prueba (la consulta debería devolver el% de edad de los tweets que realmente contienen una geolocalización):
> db.tweets.find({coordinates:{$ne:null}}).count() / db.tweets.count()
0.016668392651547598
Entonces, solo el 1.67% de mi muestra del flujo del 1% incluye una geoetiqueta. Sin embargo, hay otras formas de averiguar la ubicación de un usuario: http://arxiv.org/ftp/arxiv/papers/1403/1403.2345.pdf