2015-12-22 3 views
3

Я пытаюсь загрузить твиты с пути за последние месяцы между определенным диапазоном дат. Я могу загрузить только через неделю, но не мимо.Загрузите исторические твиты из более чем одного месяца назад

Код:

import tweepy 
from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import pandas as pd 
import json 
import csv 
import sys 
import time 

ckey = 'key' 
csecret = 'key' 
atoken = 'key' 
asecret = 'key' 

def toDataFrame(tweets): 

    DataSet = pd.DataFrame() 

    DataSet['tweetID'] = [tweet.id for tweet in tweets] 
    DataSet['tweetText'] = [tweet.text.encode('utf-8') for tweet in tweets] 
    DataSet['tweetRetweetCt'] = [tweet.retweet_count for tweet in tweets] 
    DataSet['tweetFavoriteCt'] = [tweet.favorite_count for tweet in tweets] 
    DataSet['tweetSource'] = [tweet.source for tweet in tweets] 
    DataSet['tweetCreated'] = [tweet.created_at for tweet in tweets] 
    DataSet['userID'] = [tweet.user.id for tweet in tweets] 
    DataSet['userScreen'] = [tweet.user.screen_name for tweet in tweets] 
    DataSet['userName'] = [tweet.user.name for tweet in tweets] 
    DataSet['userCreateDt'] = [tweet.user.created_at for tweet in tweets] 
    DataSet['userDesc'] = [tweet.user.description for tweet in tweets] 
    DataSet['userFollowerCt'] = [tweet.user.followers_count for tweet in tweets] 
    DataSet['userFriendsCt'] = [tweet.user.friends_count for tweet in tweets] 
    DataSet['userLocation'] = [tweet.user.location for tweet in tweets] 
    DataSet['userTimezone'] = [tweet.user.time_zone for tweet in tweets] 
    DataSet['Coordinates'] = [tweet.coordinates for tweet in tweets] 
    DataSet['GeoEnabled'] = [tweet.user.geo_enabled for tweet in tweets] 
    DataSet['Language'] = [tweet.user.lang for tweet in tweets] 
    tweets_place= [] 
    #users_retweeted = [] 
    for tweet in tweets: 
     if tweet.place: 
      tweets_place.append(tweet.place.full_name) 
     else: 
      tweets_place.append('null') 
    DataSet['TweetPlace'] = [i for i in tweets_place] 
    #DataSet['UserWhoRetweeted'] = [i for i in users_retweeted] 

    return DataSet 

OAUTH_KEYS = {'consumer_key':ckey, 'consumer_secret':csecret,'access_token_key':atoken, 'access_token_secret':asecret} 
auth = tweepy.OAuthHandler(OAUTH_KEYS['consumer_key'], OAUTH_KEYS['consumer_secret']) 
#auth = tweepy.AppAuthHandler('key', 'key') 

api = tweepy.API(auth, wait_on_rate_limit=True,wait_on_rate_limit_notify=True) 
if (not api): 
    print ("Can't Authenticate") 
    sys.exit(-1) 
else: 
# I am trying to download from Dec 1st to Dec 7th but I am not able to 

    cursor = tweepy.Cursor(api.search, q='#chennairains OR #chennaihelp OR #chennaifloods',since= '2015-12-20',until='2015-12-21',lang='en',count=100) 
    results=[] 
    for item in cursor.items(): 
     results.append(item) 

    DataSet = toDataFrame(results) 
    DataSet.to_csv('output.csv',index=False) 

Программа очень хорошо загрузить данные в течение недели, но не в состоянии загрузить с более за неделю. Я попробовал ссылку на несколько сообщений здесь, но большинство из них остались без ответа. Любые предложения приветствуются.

+0

связанный: [Как я могу получить твиты старше недели (используя tweepy или другие библиотеки python)] (http://stackoverflow.com/q/24214189/4279) – jfs

+0

@JFSebastian Большое вам спасибо .. Уже пробовал это, но не работает. –

+1

[Самый высокий ответ] (http://stackoverflow.com/a/24246840/4279) из ссылки говорит, что он не может работать (через API поиска). Если с тех пор что-то не изменилось; 'tweepy.Cursor (api.search, ...)' не будет работать для поиска старых твитов. – jfs

ответ

3

Twitter ограничивает объем данных, возвращенных из их REST API, а класс API Tweepy использует REST API.

От https://dev.twitter.com/overview/general/things-every-developer-should-know:

Есть пределы разбиения на страницы Rest API Предельное Клиенты могут получить доступ теоретический максимум 3,200 статусов через страницу и сосчитать параметров для методов API user_timeline REST. Другие временные методы имеют теоретический максимум 800 статусов. Запросы более чем на лимит приведут к ответу с кодом состояния 200 и пустым результатом в запрошенном формате. Twitter по-прежнему поддерживает базу данных всех твитов, отправленных пользователем. Однако для обеспечения эффективности сайта этот искусственный лимит временно установлен.

Если вы пытаетесь получить более длинный ответ, платные услуги, такие как Gnip и DataSift, могут предоставить эти данные.

+0

Благодарим за отзыв. Ограничение на лимит не является проблемой здесь. Я хочу, чтобы твиты с определенной даты, которые могут быть похожими на 1 ноября, также будут делать только 1 день. Но нужно из прошлых дат. –

+0

@SitzBlogz: тогда вы должны спросить, как загрузить твит с одного дня назад, а не на месяц. – jfs

+0

@ J.F.Sebastian. Одна конкретная дата, из которой старше. Может быть с ноября или октября. В один прекрасный день я уже получаю текущий код. –

Смежные вопросы