代码之家  ›  专栏  ›  技术社区  ›  HJA24

包括Tweepy流式API中的过滤标准

  •  1
  • HJA24  · 技术社区  · 7 年前

    我想收集包含以下文字的所有推文: 比特币、以太坊币、莱特币或第纳尔币

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

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

    使用 https://twitter.com/search?f=tweets&q=bitcoin%20过滤器%3alinks&src=typd

    同样适用于转发,我可以在其中使用 -filter:retweets (请参见 https://twitter.com/search?f=tweets&q=bitcoin%20 filter%3retweets&src=typd>

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

    导入系统 导入时间 导入JSON 将熊猫作为PD导入 从Tweepy导入OAuthHandler 来自Tweepy导入流 从tweepy.streaming导入streamlistener 用户密钥 用户_secret=' 访问“令牌=” 访问“秘密=” crypto_tickers=['bitcoin'、'ethereum'、'litecoin'、'denarius'、'-filter:links'、'-filter:retweets'] 类stdoListener(streamListener): 定义数据(自身,数据): tweet=json.loads(数据) 打印(推特) 定义打开错误(自身,状态): 如果状态==420: sys.stderr.write('增强您的冷静;由于请求太多,应用程序的速率受到限制') 返回真 其他: sys.stderr.write('错误n'.格式(状态)) 返回真 如果“名称”, listener=stdoListener()。 auth=oauthhandler(用户密钥,用户密钥) 授权设置访问令牌(访问令牌,访问秘密) 流=流(身份验证、侦听器) stream.filter(languages=['en'],track=crypto_tickers) < /代码>

    但是,输出清楚地显示了转发和包含链接的tweet。

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

    问题2:根据官方文档,流式API最多允许400个跟踪关键字( https://developer.twitter.com/en/docs/tweets/filter realtime/overview/statures filter.html. )。我的两个筛选条件是否分类为2个跟踪关键字?

    事先谢谢, https://www.followthehashtag.com/help/hidden-twitter-search-operators-extra-power-followthehashtag )我可以补充一下 -过滤器:链接 排除包含链接的tweet。通过比较以下搜索项,可以清楚地看到这一点;

    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

    这同样适用于我可以使用的转载 -筛选器:转载 (见 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)
    

    但是,输出清楚地显示了转发和包含链接的tweet。 enter image description here

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

    问题2:根据官方文档,流式API最多允许400个跟踪关键字( https://developer.twitter.com/en/docs/tweets/filter-realtime/overview/statuses-filter.html )我的两个筛选条件是否分类为2个跟踪关键字?

    事先谢谢,

    1 回复  |  直到 7 年前
        1
  •  2
  •   Andy Piper    7 年前

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

    A2您的代码中有6个跟踪关键字,包括 -过滤器: 元素,但这些元素永远不会匹配。