在 Tweepy Streaming 中包含过滤条件 API
Including filtering-criteria in Tweepy Streaming API
我想收集所有包含以下词语的推文:
比特币、以太币、莱特币或 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
和https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Alinks&src=typd
这同样适用于转推,我可以在其中使用 -filter:retweets(参见 https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Aretweets&src=typd)
我想添加这些标准以确保我减少 "noise" 并且不太可能违反任何 API 限制。
我写了以下 Python-script:
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)
但是,输出清楚地显示了转推和包含链接的推文。
问题 1:如何在我的脚本中正确包含搜索条件并获得正确的输出?
Q2:根据官方文档,Streaming API 允许最多 400 个曲目关键字 (https://developer.twitter.com/en/docs/tweets/filter-realtime/overview/statuses-filter.html)。我的两个过滤条件是否归类为 2 个曲目关键字?
提前致谢,
A1。您不能在 Streaming API 上使用 -filter:
语法。可用选项的完整列表是 here in the documentation。您尝试使用的语法特定于 REST 搜索 API,而不是标准实时过滤器 API(请注意,在企业实时 PowerTrack API 中,您 可以 实现你所要求的,但这是一个商业 API)。
A2。您的代码中有 6 个跟踪关键字,包括 -filter:
元素,但它们永远不会匹配。
我想收集所有包含以下词语的推文: 比特币、以太币、莱特币或 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
和https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Alinks&src=typd
这同样适用于转推,我可以在其中使用 -filter:retweets(参见 https://twitter.com/search?f=tweets&q=Bitcoin%20-filter%3Aretweets&src=typd)
我想添加这些标准以确保我减少 "noise" 并且不太可能违反任何 API 限制。 我写了以下 Python-script:
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)
但是,输出清楚地显示了转推和包含链接的推文。
问题 1:如何在我的脚本中正确包含搜索条件并获得正确的输出?
Q2:根据官方文档,Streaming API 允许最多 400 个曲目关键字 (https://developer.twitter.com/en/docs/tweets/filter-realtime/overview/statuses-filter.html)。我的两个过滤条件是否归类为 2 个曲目关键字?
提前致谢,
A1。您不能在 Streaming API 上使用 -filter:
语法。可用选项的完整列表是 here in the documentation。您尝试使用的语法特定于 REST 搜索 API,而不是标准实时过滤器 API(请注意,在企业实时 PowerTrack API 中,您 可以 实现你所要求的,但这是一个商业 API)。
A2。您的代码中有 6 个跟踪关键字,包括 -filter:
元素,但它们永远不会匹配。