Как сделать несколько звонков в Twitter API, чтобы получить более 200 твитов на пользователя с помощью Tweepy? - PullRequest
1 голос
/ 09 февраля 2020

У меня есть некоторый код Python, который извлекает максимальный лимит в 200 твитов с каждого из аккаунтов политических кандидатов США Демократов c. Хотя я установил отсутствие ответов и ретвитов, так что на самом деле он возвращает намного меньше. Я знаю, что вы можете вернуть максимум 200 твитов за звонок, хотя вы можете сделать несколько звонков, в частности 180, в 15-минутном окне, которое вернет еще больше твитов. У меня вопрос, как go сделать несколько звонков, при этом возвращая данные в формате pandas df, который я сейчас установил. Спасибо!

import datetime as dt
import os
import pandas as pd
import tweepy as tw

#define developer's permissions
consumer_key = 'xxxxxxxx'
consumer_secret = 'xxxxxxxx'
access_token = 'xxxxxx'
access_token_secret = 'xxxxxxx'

#access twitter's API
auth = tw.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tw.API(auth, wait_on_rate_limit=True)
#function collects tweets from 
def get_tweets(handle):
    try:
        tweets = api.user_timeline(screen_name=handle, 
                                   count=200,
                                   exclude_replies=True, 
                                   include_rts=False,
                                  tweet_mode="extended")
        print(handle, "Number of tweets extracted: {}\n".format(len(tweets)))
        df = pd.DataFrame(data=[tweet.user.screen_name for tweet in tweets], columns=['handle'])
        df['tweets'] = np.array([tweet.full_text for tweet in tweets])
        df['date'] = np.array([tweet.created_at for tweet in tweets])
        df['len'] = np.array([len(tweet.full_text) for tweet in tweets])
        df['like_count'] = np.array([tweet.favorite_count for tweet in tweets])
        df['rt_count'] = np.array([tweet.retweet_count for tweet in tweets])
    except:
        pass
    return df

#list of all the candidate twitter handles
handles = ['@JoeBiden', '@ewarren', '@BernieSanders', '@MikeBloomberg', '@PeteButtigieg', '@AndrewYang', '@AmyKlobuchar']
df = pd.DataFrame()
​
#loop through the diffent candidate twitter handles and collect each candidates tweets
for handle in handles:
    df_new = get_tweets(handle)
    df = pd.concat((df, df_new))

@JoeBiden Number of tweets extracted: 200.

@ewarren Number of tweets extracted: 200.

@BernieSanders Number of tweets extracted: 200.

@MikeBloomberg Number of tweets extracted: 200.

@PeteButtigieg Number of tweets extracted: 200.

@AndrewYang Number of tweets extracted: 200.

@AmyKlobuchar Number of tweets extracted: 200.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Документация API Twitter объясняет, почему вы получаете более низкий результат:

exclude_replies - "Этот параметр будет препятствовать отображению ответов в возвращенная временная шкала. Использование exclude_replies с параметром count будет означать, что вы будете получать твиты с повышением до счета - это потому, что параметр count получает столько твитов перед фильтрацией ретвитов и ответов . "

0 голосов
/ 09 февраля 2020

Прежде всего, вы захотите восстановить свои учетные данные сейчас.

Вы можете перебирать разбитые на страницы результаты с Cursor или передавая since_id и / или max_id параметры для API.user_timeline.

См. также документацию для конечных точек состояний GET / user_timeline .

...