簡體   English   中英

使用 Flask socketio 進行 Tweepy 流式傳輸

[英]Tweepy streaming with Flask socketio

我想在收到推文時將實時推文流發送給客戶端。

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)



class MyStreamListener(tweepy.StreamListener):
    def on_status(self, status):
        MyCustomNamespace.tweet_received(status.text)


class MyCustomNamespace(Namespace):
    def on_connect(self):
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_token, access_secret)
        api = tweepy.API(auth)
        myStreamListener = MyStreamListener()
        global myStream
        myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener)
        myStream.filter(track=['love'], async=True)

    def on_disconnect(self):
        pass

    @staticmethod
    def tweet_received(text):
        emit('tweet_response', {'text': text})

socketio.on_namespace(MyCustomNamespace('/'))

但是我收到一個Runtime Error: Working outside of request context錯誤Runtime Error: Working outside of request context 我如何接近做我想做的事? 謝謝。

您在tweet_received()中的emit()調用沒有客戶端上下文來知道將數據發送到哪里。

您可以通過添加設置命名空間和事件接收者的附加參數來修復它。 例如:

@staticmethod
def tweet_received(text):
    emit('tweet_response', {'text': text}, broadcast=True, namespace='/')

此版本將發送給/命名空間上的所有客戶端。 您可能需要將其更改為最適合您的應用程序的方式,但希望您能明白這一點。

您是否有Github帳戶,如果可以,可以與我分享嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM