Cómo agregar un filtro de ubicación al módulo tweepy

He encontrado el siguiente fragmento de código que funciona bastante bien para dejarme ver en Python Shell el 1% estándar de la manguera de fuego de Twitter:

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 analizar solo los tweets de una determinada ubicación? He visto personas que agregaron GPS a otro código Python relacionado 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 palabra 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 geográficos) O provenga del área de San Francisco.

Fuente: https://dev.twitter.com/docs/streaming-apis/parameters#locations

Lo que puede hacer es solicitar la API de transmisión por palabra clave o tweets localizados y luego filtrar la secuencia resultante en su aplicación mirando cada tweet.

Si modifica el código de la siguiente manera capturará los tweets en el Reino Unido, entonces esos tweets se filtran para mostrar solo aquellos 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]) 

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 algunos otros países. Si desea un grano más fino, puede combinar varios cuadros para completar la ubicación que necesita.

Sin embargo, debe tenerse en cuenta que usted limita bastante la cantidad de tweets si filtra por tags geográficas . Esto es de aproximadamente 5 millones de tweets de mi base de datos de prueba (la consulta debe devolver el% de antigüedad de los tweets que realmente contienen una geolocalización):

 > db.tweets.find({coordinates:{$ne:null}}).count() / db.tweets.count() 0.016668392651547598 

Así que solo el 1.67% de mi muestra de la secuencia del 1% incluye una etiqueta geográfica. Sin embargo, hay otras formas de averiguar la ubicación de un usuario: http://arxiv.org/ftp/arxiv/papers/1403/1403.2345.pdf

sapi.filter (pista = [‘manchester united’], ubicaciones = [‘Coordenadas GPS’])