在Tweepy Streaming API中包含过滤条件

时间:2018-10-02 13:52:43

标签: python twitter streaming tweepy

我想收集以下单词中包含的所有推文: 比特币,以太坊,莱特币或Denarius

但是,我要排除的推文要归类为转发和包含链接的推文。我从以下网站(https://www.followthehashtag.com/help/hidden-twitter-search-operators-extra-power-followthehashtag)知道,我可以添加 -filter:links 来排除包含链接的推文。通过比较以下搜索字词,可以清楚地看到这一点;

https://twitter.com/search?f=tweets&vertical=news&q=Bitcoin&src=typd

enter image description here

https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Alinks&src=typd

enter image description here

转发也一样,在这里我可以使用 -filter:retweets (请参见https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Aretweets&src=typd

我想添加这些条件,以确保减少“噪音”并且不太可能违反任何API限制。 我编写了以下Python脚本:

import sys
import time
import json
import pandas as pd
from tweepy import OAuthHandler
from tweepy import Stream
from tweepy.streaming import StreamListener

USER_KEY = ''
USER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_SECRET = ''

crypto_tickers = ['bitcoin', 'ethereum', 'litecoin', 'denarius', '-filter:links', '-filter:retweets']

class StdOutListener(StreamListener):

def on_data(self, data):
    tweet = json.loads(data)
    print(tweet)


def on_error(self, status):
    if status == 420:
        sys.stderr.write('Enhance Your Calm; The App Is Being Rate Limited For Making Too Many Requests')
        return True
    else:
        sys.stderr.write('Error {}n'.format(status))
        return True

if __name__ == "__main__":
listener =  StdOutListener()
auth = OAuthHandler(USER_KEY, USER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

stream = Stream(auth, listener)
stream.filter(languages=['en'], track=crypto_tickers)

但是,输出清楚地显示了属于转发的推文,并包含链接。 enter image description here

问题1:如何在脚本中正确包含搜索条件并获得正确的输出?

第二季度:根据官方文档,流API最多允许400个跟踪关键字(https://developer.twitter.com/en/docs/tweets/filter-realtime/overview/statuses-filter.html)。我的两个过滤条件是否归类为2个跟踪关键字?

预先感谢

1 个答案:

答案 0 :(得分:3)

A1。您不能在Streaming API上使用-filter:语法。可用选项的完整列表为here in the documentation。您尝试使用的语法特定于REST搜索API,而不是标准的实时过滤器API(请注意,在企业实时PowerTrack API中,您可以达到您的要求,但这商业API)。

A2。您的代码中有6个跟踪关键字,包括-filter:元素,但它们将永远不匹配。