Несколько месяцев назад я использовал ту же ссылку для API поиска. Я пришел к пониманию нескольких вещей, которые могут вам помочь. Я предположил, что API возвращает твиты упорядоченным образом (по убыванию tweet_id).
Предположим, у нас есть куча твитов, которые твиттер предоставляет нам для запроса, с идентификаторами твитов от 1 до 10 (1 - самый старый, а 10 - самый новый).
1 2 3 4 5 6 7 8 9 10
since_id = нижняя граница и
max_id = верхняя граница
Твиттер начинает возвращать твиты в порядке от самых новых до самых старых (от 10 до 1). Давайте рассмотрим несколько примеров:
# This would return tweets having id between 4 and 10 ( 4 and 10 inclusive )
since_id=4,max_id=10
# This means there is no lower bound, and we will receive as many
# tweets as the Twitter Search API permits for the free version ( i.e. for the last 7
# days ). Hence, we will get tweets with id 1 to 10 ( 1 and 10 inclusive )
since_id=None, max_id=10
Что именно делает max_id = new_tweets [-1] .id?
Предположим, что в первом вызове API мы получили только 4 твита, т. Е. 10, 9, 8, 7. Таким образом, список new_tweets становится (я предполагаю, что это список идентификаторов для целей объяснения, это на самом деле список объектов):
new_tweets=[10,9,8,7]
max_id= new_tweets[-1] # max_id = 7
Теперь, когда наша программа использует API во второй раз:
max_id = 7
since_id = None
new_tweets = api.search (q = searchQuery, count = tweetsPerQry, max_id = str (max_id -1), since_id = sinceId)
# We will receive all tweets from 6 to 1 now.
max_id = 6 # max_id=str(max_id -1)
#Therefore
new_tweets = [6,5,4,3,2,1]
Этот способ использования API (как упомянуто в ссылке) может возвращать максимум 100 твитов за каждый вызов API, который мы делаем. Фактическое количество возвращаемых твитов меньше 100, а также зависит от сложности вашего запроса: чем сложнее, тем лучше .
Почему мы не устанавливаем sinceId на новое значение в цикле for? Поскольку вначале для IDI задано значение «Нет», кажется, что нет необходимости просматривать параметры, поскольку в качестве значения «Идентификатор» не задано значение «Нет», если мы нигде не меняем значение.
Установка SinceId = None возвращает самый старый из твитов, но я не уверен, какое значение по умолчанию для SinceId, если мы не упомянем его.
Могу ли я делать, пока True, а не tweetCount
Вы можете сделать это, но затем вам нужно обработать исключения, которые вы получите при достижении ограничения скорости (т. Е. 100 твитов за звонок). Использование этого облегчает обработку программы.
Надеюсь, это поможет вам.