Tweepy 位置过滤器不起作用
Posted
技术标签:
【中文标题】Tweepy 位置过滤器不起作用【英文标题】:Tweepy Location Filter Does Not Work 【发布时间】:2017-08-02 06:23:59 【问题描述】:问题已解决,请在接受的帖子中查看解决方案
我正在尝试收集来自指定地理区域的 50 条推文。我下面的代码将打印 50 条推文,但其中很多推文的坐标为“NONE”。这是否意味着这些带有“NONE”的推文不是从指定区域生成的?你能解释一下这里发生了什么吗?以及如何从这个指定的地理区域收集 50 条推文?提前致谢。
# Import Tweepy, sys, sleep, credentials.py
try:
import json
except ImportError:
import simplejson as json
import tweepy, sys
from time import sleep
from credentials import *
# Access and authorize our Twitter credentials from credentials.py
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
# Assign coordinates to the variable
box = [-74.0,40.73,-73.0,41.73]
#override tweepy.StreamListener to add logic to on_status
class MyStreamListener(tweepy.StreamListener):
def __init__(self, api=None):
super(MyStreamListener, self).__init__()
self.counter = 0
def on_status(self, status):
record = 'Text': status.text, 'Coordinates': status.coordinates, 'Created At': status.created_at
self.counter += 1
if self.counter <= 50:
print record
return True
else:
return False
def on_error(self, status_code):
if status_code == 420:
#returning False in on_data disconnects the stream
return False
myStreamListener = MyStreamListener()
myStream = tweepy.Stream(api.auth, listener=myStreamListener)
myStream.filter(locations=box, async=True)
print myStream
结果如下:
'Text': u"What?...", 'Created At': datetime.datetime(2017, 3, 12, 2, 55, 6), 'Coordinates': u'type': u'Point', u'coordinates': [-74.
1234567, 40.1234567]
'Text': u'WHEN?...', 'Created A
t': datetime.datetime(2017, 3, 12, 2, 55, 8), 'Coordinates': None
'Text': u'Wooo...', 'Created At': datetime.datetime(2017, 3, 12, 2, 55, 9), 'Coordinates': None
'Text': u'Man...', 'Created At': datetime.datetime(2017, 3, 12, 2, 55, 9), 'Coordina
tes': None
'Text': u'The...', 'Created At': datetime.datetime(201
7, 3, 12, 2, 55, 10), 'Coordinates': None
【问题讨论】:
【参考方案1】:来自文档:
只有地理定位的推文才会下降 将包含在请求的边界框内 - 与搜索不同 API,用户的位置字段不用于过滤推文。
保证响应中的推文来自提供的边界框。
边界框过滤器是如何工作的?
流式传输 API 使用以下启发式方法来确定是否 给定推文位于边界框内:
如果填充了坐标字段,则会根据边界框测试那里的值。请注意,此字段使用 geoJSON 顺序(经度、纬度)。
如果坐标为空但已填充地点,则检查就地定义的区域是否与位置边界框相交。 任何重叠都会匹配。如果上面列出的规则都不匹配,则 推文与位置查询不匹配。
再次,这意味着坐标字段可以是 None 但 bbox 过滤器保证从边界框区域返回推文
来源:https://dev.twitter.com/streaming/overview/request-parameters#locations
编辑:place
是响应中类似于coordinates
的字段。
【讨论】:
谢谢@putonspectacles!这有帮助。但我不太明白你的第二个要点。 “如果坐标为空但地点已填充,......”您在这里提到的“地点”是什么? @LinguisticsStudent 看到我的编辑。place
只是一个类似于`坐标的字段。很高兴我能帮上忙!记得接受答案:)
Aweson! @putonspectacles 我刚刚尝试过,与 coordinates 中的信息相比,place 中的信息要多得多。不错!以上是关于Tweepy 位置过滤器不起作用的主要内容,如果未能解决你的问题,请参考以下文章