python - 使用 Flask socketio 进行 Tweepy 流式传输

标签 python 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('/'))

但是我在运行此程序时收到运行时错误:在请求上下文之外工作错误。我该如何去做我想做的事?谢谢。

最佳答案

您在 tweet_received() 中进行的 emit() 调用没有客户端上下文来知道将数据发送到哪里。

您可以通过添加用于设置事件的命名空间和收件人的其他参数来修复此问题。例如:

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

此版本将发送给 / 命名空间上的所有客户端。您可能需要将其更改为最适合您的应用程序的内容,但希望您能明白这一点。

关于python - 使用 Flask socketio 进行 Tweepy 流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48214364/

相关文章:

python - 将行附加到 Pandas DataFrame

python - 使用Python的subprocess.Popen时的异常处理

python - 如何在numpy中获取指定数组的欧几里得距离?

python - SocketIO(app) 缺少必需的位置参数 'mode'

python socketio通信与ssl相关问题

python - 输出间距错误

python - 使用 python 桌面应用程序使用拖放界面上传文档和网页

javascript - Python Flask-socketio 工作,不从 JS 客户端接收数据

python - 禁用 Flask-SocketIO 日志记录到终端

unix - Flask-socketio + Gunicorn + nginx 通过 unix 套接字文件 [Errno -2]