如何将json dump tweepy stream转换为文本文件?

时间:2017-12-12 00:06:01

标签: python json twitter tweepy

您好我已经查看了许多有关如何执行此操作的指南和教程,但是我无法使用tweepy将JSON数据存储在文本文件中。

class StreamListener(tweepy.StreamListener): 

def on_status(self, status):

    print(status)

def on_error(self, status):

    print status
    if status == 420:

        return False



if __name__ == '__main__':

stream_listener = StreamListener()
auth = tweepy.OAuthHandler(consumer_token, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = tweepy.Stream(auth, stream_listener)

我有另一个python文件应该将数据读入列表:

import pandas
import json

json_data = 'twitter_data.txt'

data_list = []
#load file 
tweets_file = open(json_data, "r")
for line in tweets_file:
try:
    tweet = json.loads(line) #this line causes problems
    data_list.append(tweet)
except:
    continue


print len(data_list)

我认为从Twitter收到的数据是以JSON格式提供的,我所遵循的指南都说它确实如此,但它实际上是在另一个对象中。

我是否应该将所有内容存储在列表中,然后json将该列表转储到新的文本文件中?

2 个答案:

答案 0 :(得分:3)

您似乎正走在正确的轨道上。您可以修改流侦听器以直接将推文写入文件。

编辑:现在以JSON格式写出来。

#Import the necessary methods from tweepy library
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
from tweepy import API

#Variables that contains the user credentials to access Twitter API
CONSUMER_KEY = #YOUR CONSUMER KEY
CONSUMER_SECRET = #YOUR CONSUMER SECRET
ACCESS_TOKEN = #YOUR ACCESS TOKEN
ACCESS_TOKEN_SECRET = #YOUR ACCESS TOKEN SECRET

class FileWriteListener(StreamListener):

    def __init__(self):
        super(StreamListener, self).__init__()
        self.save_file = open('tweets.json','w')
        self.tweets = []

    def on_data(self, tweet):
        self.tweets.append(json.loads(tweet))
        self.save_file.write(str(tweet))

    def on_error(self, status):
        print(status)
        return True


auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

api = API(auth)

twitter_stream = Stream(auth, MyListener())
# Here you can filter the stream by:
#    - keywords (as shown)
#    - users
twitter_stream.filter(track=['hello'])

此代码将无限期运行,因此您需要在一段时间后退出该过程(Ctrl-C)或修改代码。

然后你可以加载数据:

import json

json_data = []
with open('tweets.json','r') as f:
    json_data.append( json.loads(f.readline()) )

希望这有帮助!

答案 1 :(得分:1)

我认为这样的东西可能正是您要找的。

def on_status(self, tweet):
    json_dumps = json.dumps(tweet._json)
    tweet_json = json.loads(json_dumps)
    print(tweet_json['created_at'])

这些是您可以在 tweet_json[ ] 中使用的所有键

dict_keys(['created_at', 'id', 'id_str', 'text', 'source', 'truncated', 'in_reply_to_status_id', 'in_reply_to_status_id_str', 'in_reply_to_user_id', 'in_reply_to_user_id', 'in_user_reply',_user_reply_in_user_reply_ 'user', 'geo', 'coordinates', 'place', 'contributors', 'retweeted_status', 'is_quote_status', 'quote_count', 'reply_count', 'retweet_count', 'favorite_count', 'entities', 'favored' ', '转推', 'filter_level', 'lang', 'timestamp_ms'])