使用StreamListener将twitter用户信息保存到文件中

时间:2015-08-29 09:15:30

标签: python json twitter tweepy twitter-streaming-api

伙计们我想在我的文件中保存Twitter用户信息,如姓名,状态,推文(json,txt,csv或任何其他json或文本都是首选)。我尝试了这个代码和其他类似的代码,但没有一个工作。伙计们看看下面的代码并建议我应该做些什么改变?

import time
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import os
import json

ckey = '**********'
consumer_secret = '**********'
access_token_key = '**********'
access_token_secret = '**********'

start_time = time.time() #grabs the system time
keyword_list = ['twitter'] #track list

#Listener Class Override
class listener(StreamListener):

    def __init__(self, start_time, time_limit=60):

        self.time = start_time
        self.limit = time_limit

    def on_data(self, data):

        while (time.time() - self.time) < self.limit:
            try:
                all_data = json.loads["text"]
                username = all_data["user"]["name"]
                tweets = all_date["user"]["statuses"]
                saveFile = open('raw_tweets29.json', 'a')
                saveFile.write(username)
                saveFile.write('\n')
                saveFile.close()

                return True
            except BaseException, e:
                print 'failed ondata,', str(e)
                time.sleep(5)
                pass
        exit()

    def on_error(self, status):
        print statuses

auth = OAuthHandler(ckey, consumer_secret) #OAuth object
auth.set_access_token(access_token_key, access_token_secret)
twitterStream = Stream(auth, listener(start_time, time_limit=20))
twitterStream.filter(track=['twitter'])

当我在代码下面运行时,这给了我错误 -
failed ondata, 'function' object has no attribute '__getitem__'

我非常感谢您在解决这个问题时能给我的任何帮助

1 个答案:

答案 0 :(得分:1)

我正在做一些错误,现在我发现它不需要临时变量'text'我需要做的是加载实际数据。 还有一件事要求是编码。 谢谢大家的时间。

import time
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import os,sys
import json

ckey = '***'
consumer_secret = '***'
access_token_key = '***'
access_token_secret = '***'

start_time = time.time()

class listener(StreamListener):

    def __init__(self, start_time, time_limit=300):

        self.time = start_time
        self.limit = time_limit

    def on_data(self, data):

        while (time.time() - self.time) < self.limit:
            try:
                tweet = json.loads(data)
                user_name = tweet['user']['name']
                tweet_count = tweet['user']['statuses_count']
                text = tweet['text']
                saveFile = open('user_tweets29.json', 'a')
                saveFile.write(text.encode('utf8'))
                saveFile.write('\n')
                saveFile.close()

                return True
            except BaseException, e:
                print 'failed ondata,', str(e)
                time.sleep(5)
                pass
        exit()

    def on_error(self, status):
        print statuses

auth = OAuthHandler(ckey, consumer_secret)
auth.set_access_token(access_token_key, access_token_secret)
twitterStream = Stream(auth, listener(start_time, time_limit=60))
twitterStream.filter(track=['twitter'])