Управление поиском Tweepy API

Пожалуйста, прости меня, если это грубое повторение вопроса, на который ранее был дан ответ в другом месте, но я заблудился о том, как использовать функцию поиска API-интерфейса. Есть ли документация о том, как искать твиты, используя api.search() функционировать?

Можно ли каким-либо образом управлять такими функциями, как количество возвращаемых твитов, тип результатов и т. Д.?

По некоторым причинам результаты достигают максимального значения 100.

фрагмент кода, который я использую, выглядит следующим образом

searched_tweets = self.api.search(q=query,rpp=100,count=1000)

2 ответа

Первоначально я разработал решение, основанное на предложении Yuva Raj использовать дополнительные параметры в поиске / твитах GET - max_id параметр в сочетании с id последнего твита, возвращаемого в каждой итерации цикла, который также проверяет наличие TweepError,

Тем не менее, я обнаружил, что есть гораздо более простой способ решить проблему, используя tweepy.Cursor (см. учебник tweepy Cursor, чтобы узнать больше об использовании 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)]

Обновление: в ответ на комментарий Andrei 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

В вашем коде проблема. Основанный на Твиттерской Документации для GET поиска / твитов,

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

Другие вопросы старые, и 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

Я работаю над извлечением данных из твиттера для любого места (здесь, в Индии) для всех твитов, которые включают специальное ключевое слово или список ключевых слов.

import tweepy
import credentials    ## all my twitter API credentials are in this file, this should be in the same directory as is this script

## set API connection
auth = tweepy.OAuthHandler(credentials.consumer_key, 
                            credentials.consumer_secret)
auth.set_access_secret(credentials.access_token, 
                        credentials.access_secret)
    
api = tweepy.API(auth, wait_on_rate_limit=True)    # set wait_on_rate_limit =True; as twitter may block you from querying if it finds you exceeding some limits

search_words = ["#covid19", "2020", "lockdown"]

date_since = "2020-05-21"

tweets = tweepy.Cursor(api.search, =search_words,
                       geocode="20.5937,78.9629,3000km",
                       lang="en", since=date_since).items(10)
## the geocode is for India; format for geocode="lattitude,longitude,radius"
## radius should be in miles or km


for tweet in tweets:
    print("created_at: {}\nuser: {}\ntweet text: {}\ngeo_location: {}".
            format(tweet.created_at, tweet.user.screen_name, tweet.text, tweet.user.location))
    print("\n")
## tweet.user.location will give you the general location of the user and not the particular location for the tweet itself, as it turns out, most of the users do not share the exact location of the tweet

РЕЗУЛЬТАТЫ ---- created_at: 2020-05-28 16:48:23 пользователь: XXXXXXXXX текст твита: RT @Eatala_Rajender: Бюллетень для СМИ о статусе положительных случаев #COVID19 в Телангане. (От 28.05.2020)

ТеланганаБоиКорона

StayHom…

geo_location: Хайдарабад, Индия

Вы можете искать твиты с конкретными строками, как показано ниже:

tweets = api.search('Artificial Intelligence', count=200)
Другие вопросы по тегам