Tweepy: игнорировать предыдущие твиты для улучшения оптимизации - PullRequest
0 голосов
/ 22 января 2019

Проблема: Попытка получить твиты через tweepy с помощью Cursor. Я хочу убедиться, что я не тяну твиты, которые я ранее вытащил.

Вот рабочий код:

import tweepy
import pandas as pd
import numpy as np

ACCESS_TOKEN = ""
ACCESS_TOKEN_SECRET = ""
CONSUMER_KEY = ""
CONSUMER_SECRET = ""

# OAuth process, using the keys and tokens
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

# Creation of the actual interface, using authentication
api = tweepy.API(auth, wait_on_rate_limit=True)

csvFile = open(r'filename', 'a')

#Use csv writer
headers = ['UserName', 'Tweet', 'TweetId', 'tweet_date', 'source', 'fav_count', 'retweet_count', 'coordinates', 'geo']

# definitions for writing to CSV
csvWriter = csv.writer(csvFile, lineterminator='\n')
# write the headers once
csvWriter.writerow(headers)


handles = ['pycon', 'gvanrossum']
previousTweets = 
 ['222288832031240000',
 '222287080586362000',
 '222277240178741000',
 '221414283844653000',
 '221188011906445000',
 '205274818877210000']


for handle in handles:   
    for status in tweepy.Cursor(api.user_timeline, screen_name= handle, tweet_mode="extended").items():
        if status.id not in previousTweets:
            csvWriter.writerow([status.user.name.encode('utf-8'), status.full_text.encode('utf-8'), status.id, status.created_at, status.source, 
                    status.favorite_count, status.retweet_count, status.coordinates, status.geo])
print(handle)

Это занимает много времени и становится непригодным для использования, если вы хотите иметь в списке PreviousTweet более 75 твитов. Кто-нибудь знает лучший способ отфильтровать старые твиты при использовании Tweepy и функции Cursor?

1 Ответ

0 голосов
/ 30 января 2019

Вы можете передать аргумент since_id курсору. Это позволяет получать статус более поздний, чем указанный идентификатор ( http://docs.tweepy.org/en/v3.5.0/api.html#API.user_timeline)

try:
    since_id = previous_tweets[-1]
except IndexError:
    since_id = None

for handle in handles:
    last_tweet = None
    for status in tweepy.Cursor(
      api.user_timeline, screen_name=handle, 
      tweet_mode="extended", since_id=since_id
    ).items():
     # ... persist tweets to flat file or database  
     last_tweet_id = status.id

    # this persists the last_tweet_id in memory.
    # you may find that persisting this to a database a better way to go.
    previous_tweets.append(last_tweet_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...