Как вы используете TwitterPager в TwitterAPI в Python, чтобы сделать несколько звонков? - PullRequest
4 голосов
/ 19 сентября 2019

Я пытаюсь выполнить поиск твитов в премиум API Twitter.Я скопировал формат из документации TwitterAPI в свой текущий код, но получаю следующую ошибку.Что мне не хватает?Я довольно новичок в Python.Я использую API премиум-поиска в песочнице Twitter для поиска по всей истории.Возможно, у меня есть пробел в знаниях о том, как 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 (), чтобы получить больше результатов.

1 Ответ

1 голос
/ 19 сентября 2019

Я не знаком с конкретным пакетом, который вы используете, но я предполагаю, что вы фактически не передаете ему объект 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 в качестве первого аргумента пейджеру.

...