Tweepy:如何在流式传输Twitter API期间自动更改过滤器参数?

时间:2018-06-09 10:11:42

标签: python tweepy

我试图通过Tweepy流式传输与即将到来的世界杯的特定比赛相关的标签。我假设,例如,第一个游戏将伴随以下主题标签:#RUSEGY#EGYRUS#RUSvsEGY#EGYvsRUS。因为同时我想流式传输所有游戏中会出现的主题标签,例如#WorldCup#WorldCup2018#Russia2018我对此类流媒体的“带宽”有严重担忧,即Twitter API的过滤参数不是太多了吗?特别是可以预期它将成为推特上的“热门时期”。

所以我认为特定游戏的标签集可以在游戏开始前24小时播放,在开始播放后24小时播放。我创建了一个字典列表,其中包含搜索参数以及流媒体开始和结束的日期。这是前5个(整个有48个项目):

hashtags_dicts = [   
    {   'keywords': ['#RUSKSA', '#KSARUS', '#RUSvsKSA', '#KSAvsRUS'],
        'start_streaming': datetime.datetime(2018, 6, 8, 17, 0),
        'stop_streaming': datetime.datetime(2018, 6, 15, 17, 0)
        },
    {   'keywords': ['#EGYURU', '#URUEGY', '#EGYvsURU', '#URUvsEGY'],
        'start_streaming': datetime.datetime(2018, 6, 14, 14, 0),
        'stop_streaming': datetime.datetime(2018, 6, 16, 14, 0)
        },
    {   'keywords': ['#MARIRN', '#IRNMAR', '#MARvsIRN', '#IRNvsMAR'],
        'start_streaming': datetime.datetime(2018, 6, 14, 17, 0),
        'stop_streaming': datetime.datetime(2018, 6, 16, 17, 0)
        },
    {   'keywords': ['#PORESP', '#ESPPOR', '#PORvsESP', '#ESPvsPOR'],
        'start_streaming': datetime.datetime(2018, 6, 14, 20, 0),
        'stop_streaming': datetime.datetime(2018, 6, 16, 20, 0)
        },
    {   'keywords': ['#FRAAUS', '#AUSFRA', '#FRAvsAUS', '#AUSvsFRA'],
        'start_streaming': datetime.datetime(2018, 6, 15, 12, 0),
        'stop_streaming': datetime.datetime(2018, 6, 17, 12, 0)
        }]

我还创建了一个控制查询参数流的函数:

def get_hashtags(hashtags_dicts):

    keywords = []

    for item in hashtags_dicts:
        now = datetime.datetime.now()

        if now > item['start_streaming'] and now < item['stop_streaming']:
            keywords.extend(item['keywords'])
        else:
            pass

    return keywords

我被卡住了。我不知道应该把它放在哪里。我试图把它放在一个包含while的{​​{1}}循环中,但它显然不起作用:

TwitterStreamClass()

我应该在哪里放置函数import datetime from time import sleep from tweepy import Stream from tweepy.streaming import StreamListener from twitter_client import get_twitter_client class TweetStreamListener(StreamListener): def on_status(self, status): print(status.created_at, status.text) print(keywords) return True def on_error(self, status_code): print('An error has occured! Status code = {}'.format(str(status_code))) return True #Authorization api = get_twitter_client() while True: listener = TweetStreamListener() stream = Stream(api.auth, listener) try: queries = get_hashtags(hashtags_dicts) stream.filter(track = queries) except: sleep(5) pass ?我正在做什么?我是初学者,所以每一个提示都会受到赞赏。

0 个答案:

没有答案