Управление API Tweepy API
Пожалуйста, простите меня, если это грубое повторение вопроса, ранее упомянутого в другом месте, но я потерял, как использовать функцию поиска tweepy API. Существует ли какая-либо документация по поиску твитов с помощью функции api.search()
?
Можно ли каким-либо образом управлять такими функциями, как количество возвращаемых твитов, тип результатов и т.д.?
По некоторым причинам результаты кажутся максимальными в 100.
фрагмент кода, который я использую, выглядит следующим образом
searched_tweets = self.api.search(q=query,rpp=100,count=1000)
Ответы
Ответ 1
Я изначально разработал решение, основанное на Yuva Raj , чтобы использовать дополнительные параметры в GET search/tweets - параметр max_id
в сочетании с id
последнего твита, возвращаемого на каждой итерации цикла, который также проверяет наличие a TweepError
.
Однако я обнаружил, что существует более простой способ решения проблемы с помощью tweepy.Cursor
(см. tweepy Cursor tutorial для получения дополнительной информации об использовании Cursor
).
Следующий код извлекает самые последние 1000 упоминаний 'python'
.
import tweepy
# assuming twitter_authentication.py contains each of the 4 oauth elements (1 per line)
from twitter_authentication import API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET
auth = tweepy.OAuthHandler(API_KEY, API_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
query = 'python'
max_tweets = 1000
searched_tweets = [status for status in tweepy.Cursor(api.search, q=query).items(max_tweets)]
Обновление: в ответ на Andre Petre комментарий о потенциальных проблемах с потреблением памяти с tweepy.Cursor
, я включу свое первоначальное решение, заменив используемое единственное утверждение списка инструкций выше для вычисления searched_tweets
со следующим:
searched_tweets = []
last_id = -1
while len(searched_tweets) < max_tweets:
count = max_tweets - len(searched_tweets)
try:
new_tweets = api.search(q=query, count=count, max_id=str(last_id - 1))
if not new_tweets:
break
searched_tweets.extend(new_tweets)
last_id = new_tweets[-1].id
except tweepy.TweepError as e:
# depending on TweepError.code, one may want to retry or wait
# to keep things simple, we will give up on an error
break
Ответ 2
В вашем коде есть проблема. Основываясь на документации на Twitter для GET search/tweets,
The number of tweets to return per page, up to a maximum of 100. Defaults to 15. This was
formerly the "rpp" parameter in the old Search API.
Ваш код должен быть
CONSUMER_KEY = '....'
CONSUMER_SECRET = '....'
ACCESS_KEY = '....'
ACCESS_SECRET = '....'
auth = tweepy.auth.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
search_results = api.search(q="hello", count=100)
for i in search_results:
# Do Whatever You need to print here
Ответ 3
Другие вопросы старые, и API сильно изменился.
Простой способ, с помощью курсора (см. Учебник курсора). Pages возвращает список элементов (вы можете ограничить количество возвращаемых страниц. .pages(5)
возвращает только 5 страниц):
for page in tweepy.Cursor(api.search, q='python', count=100, tweet_mode='extended').pages():
# process status here
process_page(page)
Где q
- это запрос, count
сколько он принесет для запросов (100 - максимум для запросов), а tweet_mode='extended'
- для получения полного текста. (без этого текст усекается до 140 символов) Подробнее здесь. RT усечены как подтверждено jaycech3n.
Если вы не хотите использовать tweepy.Cursor
, вам нужно указать max_id
для вывода следующего фрагмента. Смотрите для получения дополнительной информации.
last_id = None
result = True
while result:
result = api.search(q='python', count=100, tweet_mode='extended', max_id=last_id)
process_result(result)
# we subtract one to not have the same again.
last_id = result[-1]._json['id'] - 1
Ответ 4
Вы можете искать твиты с конкретными строками, как показано ниже:
tweets = api.search('Artificial Intelligence', count=200)