5

Python 用の Tweepy ライブラリを使用してパブリック Twitter ストリームにアクセスしていたところ、ストリームが実行されると停止しないという問題が発生しました。さて、それはそれが何をするかについては理にかなっていますが、ユーザーIDの空のリストでフィルタリングを開始し、しばらくすると、誰かが特定のトラックワードをツイートした後、ユーザーIDがリストに追加されるようにしたかったので、単語をツイートすると、トラッカーはすべてのツイートの追跡を開始します。問題は、ストリームが最初のフィルター オプションで開始されると、変数を変更してもフィルターに影響しないことです。初期引数を使い続けるだけです。

userIDs = []

trackWords = ["#Obama"]

def stream():

    s = Stream(auth, StreamListener())

    s.filter(follow = userIDs, track = trackWords)

新しいキーワードが追加された後にストリーム定義を再度呼び出すことで、これを回避できましたが、複数のストリームを検索し、それらを別々のスレッドに配置して、すべてを同時に実行できるようにしました。スレッドを更新する方法がわからないので、定義を思い出さずにフィルターを更新しようとする方が簡単に思えます。

私はプログラミングにかなり慣れていないので、これはまだ知らない基本的な概念かもしれませんが、リフレッシュするための簡単なトリックがあることを願っています.

それが誰かに役立つ場合、これが私の関連するすべてのコードです。上記は、私が話していることを示すのに役立つ簡単なものです。

userIDs = []
userNames = []

account = ['@DMS_423']

publicKeyWords = ['the','be','to','of','and','are','is','were','was']

class AStreamListener(StreamListener):
    def on_status(self, status):
        if status.author.screen_name not in userNames:
            userNames.append(str(status.author.screen_name))
            userIDs.append(str(api.get_user(str(status.author.screen_name)).id))
            print status.author.screen_name, "has joined the game."

def uStream():
    s = Stream(auth, StreamListener())
    s.filter(follow = userIDs)

def pStream():
    ps = PStream(pAuth, PStreamListener())
    ps.filter(track = publicKeyWords)

def aStream():
    adds = Stream(auth, AStreamListener())
    adds.filter(track = account)

t1 = Thread(target = aStream)
t2 = Thread(target = uStream)
t3 = Thread(target = pStream)

def run():
    t1.start()
    t2.start()
    t3.start()

run()
4

2 に答える 2

1

Tweepy Python ライブラリ API は、探している動作をサポートしていません。サブスクライブしているストリームに関連付けられているパラメーターを変更する方法はありません。

実際、Twitter API 自体は、途中でのパラメーターの変更をサポートしていません。彼らはそれに対して警告するところまで行っています。それが機能しないというわけではありません (注意してレート制限を超えないようにしてください)。

新しいクエリ パラメータで 2 番目のストリームを初期化するアプローチを調整し、ツイート ID を使用して同じツイートを 2 回渡す/永続化しないようにし、2 番目のストリームが確立されたら、最初のストリームを閉じます。

于 2015-04-20T19:30:01.090 に答える