examples developer consumerkey bot python twitter tweepy

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