首页 > 解决方案 > 如何在 Python 的 TwitterAPI 中使用 TwitterPager 进行多次调用?

问题描述

我正在尝试在 Twitter 的高级 API 中搜索推文。我将 TwitterAPI 文档中的格式复制到我当前的代码中,但出现以下错误。我错过了什么?我对 Python 相当陌生。我正在使用 Twitter 的沙盒高级搜索 API 来搜索完整的历史记录。我可能在应该如何使用 get_iterator() 方面存在知识空白。提前致谢!

api = TwitterAPI(key, secretkey, token, secrettoken)

#search tweets #added edit to pass api through Twitter Pager
tweets = TwitterPager(api, 'tweets/search/%s/:%s' % (PRODUCT, LABEL), 
                      {'query': 'pizza',
                       'lang': 'en'
                    })

for item in tweets.get_iterator():
    print(item['text'] if 'text' in item else item)

我收到以下错误:

---------------------------------------------------------------------------
TwitterRequestError                       Traceback (most recent call last)
<ipython-input-71-85784cf972fe> in <module>
----> 1 for item in tweets.get_iterator():
      2     print(item)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\TwitterAPI\TwitterPager.py in get_iterator(self, wait, new_tweets)
     45                 start = time.time()
     46                 r = self.api.request(self.resource, self.params)
---> 47                 it = r.get_iterator()
     48                 if new_tweets:
     49                     it = reversed(list(it))

~\AppData\Local\Continuum\anaconda3\lib\site-packages\TwitterAPI\TwitterAPI.py in get_iterator(self)
    204         """
    205         if self.response.status_code != 200:
--> 206             raise TwitterRequestError(self.response.status_code)
    207 
    208         if self.stream:

TwitterRequestError: Twitter request failed (422)

我的代码使用相同的搜索参数与基本的 'api.request(...)' 方法一起使用。但我需要使用 TwitterPager 和 get_iterator() 才能返回更多结果。

标签: pythontwittertwitterapi-python

解决方案


我不熟悉您正在使用的特定包,但我的猜测是您实际上并没有将您创建的 api 对象传递给它。因此,它试图对您的第一个参数(字符串)执行其操作,该参数实际上应该是 api 实例。尝试这个:

api = TwitterAPI(key, secretkey, token, secrettoken)

#search tweets
tweets = TwitterPager(api, 'tweets/search/%s/:%s' % (PRODUCT, LABEL), # added the api as first arg
                      {'query': 'pizza',
                       'lang': 'en'
                    })

for item in tweets.get_iterator():
    print(item['text'] if 'text' in item else item)

编辑

这些文档中,您必须将 api 作为第一个参数发送给寻呼机。


推荐阅读