我正在尝试从旧金山提取所有包含费德勒的推文。我在使用locations关键字时遇到错误。
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import csv
access_token = ''
access_secret = ''
consumer_key = ''
consumer_secret = ''
csvfile = open('StreamSearch.csv','a')
csvwriter = csv.writer(csvfile, delimiter = ',')
class StdOutListener(StreamListener):
def on_data(self, data):
print data
return True
def on_error(self, status):
print status
if __name__ == '__main__':
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
stream = Stream(auth, l)
stream.filter(track='federer',locations = '-122.75,36.8,-121.75,37.8')
#stream.filter(track='djokovic')
错误是
回溯(最近一次调用最后一次):
File "C:\EclipseWorkspaces\csse120\9sept\src\SearchTweets.py", line 35, in <module>
stream.filter(track='federer',locations = '-122.75,36.8,-121.75,37.8')
File "C:\Python27\lib\site-packages\tweepy\streaming.py", line 307, in filter
raise TweepError("Wrong number of locations points, "
tweepy.error.TweepError: Wrong number of locations points, it has to be a multiple of 4
最佳答案
您的代码在stream.Filter阶段之前都很好。 Tweepy 将过滤器查询视为列表,而不是单个字符串。
因此,如果您想找到有关费德勒的一切,您会搜索
stream.Filter ( track = ['federer'])
以及您将使用的位置
stream.Filter ( locations = [-122.75,36.8,-121.75,37.8] )
请记住,位置不是字符串,不需要引号。此外,Twitter 对经度、纬度位置使用 JSON 格式,这与 Google map 和其他服务给出的典型纬度、经度坐标不同。
不幸的是,您将无法跟踪包含来自旧金山的费德勒的推文,因为当您拥有位置和跟踪过滤器时,它会变成跟踪或位置查询。这意味着您将收到包含费德勒或来自旧金山的推文。我不知道有什么方法可以对各种过滤器进行 AND 查询。我不相信 Twitter 支持他们。您的选择是收集来自旧金山的推文,然后查看是否有提及费德勒或费德勒的推文,然后按位置过滤它们。您仍然可以连接位置和跟踪,但这将是这两个的 OR 查询,如下所示:
stream.Filter ( track = ['Federer'], locations = [-122.75,36.8,-121.75,37.8] )
Tweepy 和 Twitter 参数的文档可在以下位置找到: https://dev.twitter.com/streaming/overview/request-parameters http://tweepy.readthedocs.org/en/v2.3.0/api.html?highlight=location
希望这有帮助。
关于twitter - 如何使用 tweepy for Streaming API 获取位置明智的推文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25739073/