Tweepy位置过滤器不起作用

时间:2017-03-12 03:05:39

标签: python twitter geolocation location tweepy

问题得到解决,在接受的帖子中找到解决方案

我正在尝试收集50条来自指定地理区域的推文。我下面的代码将打印50条推文,但其中很多都有" NONE"用于坐标。这是否意味着这些推文带有" NONE"是不是从指定区域生成的?你能解释一下这里发生了什么吗?如何从这个指定的地理区域收集50条推文?提前谢谢。

var energyEl = document.getElementById('energy');
if (energyEl) { 
  energyEl.innerHTML = ...
}

结果如下:

# 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

1 个答案:

答案 0 :(得分:3)

来自文档:

  

只有地理定位推文下降   将包含在请求的边界框内 - 与搜索不同   API,用户的位置字段不用于过滤推文。

保证响应中的推文来自提供的边界框。

边界框过滤器如何工作?

  

流API使用以下启发式来确定是否   给予推文属于一个边界框:

     
      
  • 如果填充了坐标字段,则将针对边界框测试其中的值。请注意,此字段使用geoJSON   订单(经度,纬度)。

  •   
  • 如果坐标为空但填充了地点,则会检查就地定义的区域是否与位置边界框相交。   任何重叠都会匹配。如果上面列出的规则都不匹配,则   推文与位置查询不匹配。

  •   

同样,这意味着坐标字段可以是None但是bbox过滤器可以保证从边界框区域返回推文

来源:https://dev.twitter.com/streaming/overview/request-parameters#locations

修改place是响应中与coordinates类似的字段。