2017-12-12 22 views
0

안녕하세요, 저는이 작업을 수행하는 방법에 대한 많은 가이드와 튜토리얼을 보았습니다.하지만 JSON 데이터를 텍스트 파일에 저장하는 데 tweepy를 사용할 수있는 문제가 있습니다.json에게 tweepy 스트림을 텍스트 파일로 저장하는 방법은 무엇입니까?

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) 

나는리스트로 데이터를 읽어하도록되어 또 다른 파이썬 파일이 있습니다

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) 

내가 트위터에서받은 데이터를 JSON 형식으로 제공 생각을, 나는 모두를 다음있어 가이드가 말한다 하지만 실제로는 다른 객체에 있습니다.

모든 것을 목록에 저장하면 json이이 목록을 새 텍스트 파일에 저장해야합니까?

답변

1

제대로 된 것 같습니다. 스트림 리스너를 수정하여 트윗을 파일에 직접 쓸 수 있습니다.

편집 : 이제 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())) 

희망이 도움이!

+0

나는 응답과 도움을 주셔서 감사하지만이 새로운 파일에서 읽을 때 json.loads를 사용하게합니까? 나는 그것이 JSON 포맷으로 시작한다고 믿지 않는다. – Carbon

+0

편집을 참조하십시오 - 지금해야 할 일을해야합니다 :-) – Robbie

+0

json 파일 전체를 하나의 개체로 포함하고이를 목록에 저장하여 목록 길이 만 1로 만듭니다. 그러나 목록의 각 항목 짹짹해야합니다. – Carbon