1. ホーム
  2. python

[解決済み] Twitterのつぶやきをtxtファイルに転送する

2022-03-02 15:24:13

質問

from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json 
from pprint import pprint

data_file = open('twitter.json')  
data = json.load(data_file)
##Json file with all the ckey, csecret, atoken, and asecret
pprint(data)

#consumer key, consumer secret, access token, access secret.
ckey = data["ckey"]
csecret = data["csecret"]
atoken = data["atoken"]
asecret = data["asecret"]

class listener(StreamListener):

def on_data(self, data):
    all_data = json.loads(data)       
    tweet = all_data["text"]        
    username = all_data["user"]["screen_name"]
    print((username,tweet))
    return True

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


auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)

上のコードは、twitterのapiにアクセスするための標準的なものばかりです。しかし、私はtwitterから取得したツイートを.txtファイルに転送する必要があります。以下のようなコードで試してみました。 twitterStream = Stream(auth, listener())

fid = open("cats based tweets.txt","w")
for tweet in twitterStream.filter(track=[cats]):
        fid.write(tweet)
    fid.close()

ネコというキーワードを含むツイッターのツイートやリポストをすべて見つけるつもりです。しかし、すべてのツイートを含むtxtファイルを書くことになっているのですが、そうではありません。どなたか、この問題を解決するために必要なことを教えていただけませんか?

EDIT : あなた方が書かれたコードを使いましたが、すべてのツイートを返しません。5つか6つのツイートが表示された後、エラーが表示されます。

RuntimeError: No active exception to reraise

が表示され、その理由がわからない。なぜこのようなことが起こるのでしょうか?なぜなら、起こるはずがないとわかっているからです。

解決方法を教えてください。

私はあるプロジェクトでこれを行いましたが、私の方法では on_data メソッドの中で StreamListener オブジェクトを作成します。 私のコードは以下のようなものです。

class Listener(StreamListener):
    def __init__(self, api=None, path=None):
        #I don't remember exactly why I defined this.
        self.api = api
        #We'll need this later.
        self.path = path

    def on_data(self, data):
        all_data = json.loads(data)

        tweet = all_data["text"]        
        username = all_data["user"]["screen_name"]
        print((username,tweet))

        #Open, write and close your file.
        savefile = open(file_path, 'ab')
        savefile.write(tweet)
        savefile.close()

        return True

実際のコードで、再定義したところではなく、いくつか Listener または on_data . 順番に

  1. 保存するファイルを定義します。その変数を file_path . を追加することを忘れないでください。 .txt の拡張子がここにあります。
  2. StreamとListenerを呼び出す。

    twitterStream = Stream(authorization, Listener(path=file_path))
    
    
  3. フィルターを使いましょう。私のは座標で、私のコードが止まらないように、以外とtryでフィルターを入れています。ここでは、それをあなたのために適応させたものです。

    try:
        twitterStream.filter(track=[cats])
    except Exception, e:
        print 'Failed filter() with this error:', str(e)
    
    

これで、ツイートのテキストがストリームに表示されるたびに、ファイルに書き込まれるはずです。ファイルサイズを見てみると、増えているのがわかるはずです。特に、猫に関するフィルターであれば、なおさらです。インターネットは猫が大好きです。