Python,处理Web应用程序中的持久性http连接

时间:2013-07-05 13:51:04

标签: python django tweetstream

我作为初学者使用python有点过头了,但我设法通过Django应用程序和tweetstream设置了与twitter流API的连接。

在应用程序中,我可以执行以下操作,并通过django测试Web服务器获得连续输出到控制台的推文。

with tweetstream.FilterStream(arg, arg, arg, arg, arg) as stream:
   for tweet in stream:
       print tweet

我也可以这样做,所以我可以查询信息流。

my_tweetstream = tweetstream.FilterStream(arg, arg, arg, arg, arg)
print my_tweetstream.variable

理想情况下,我想启动tweetstream以便它能够记录推文,但也能够访问一个管理页面,在刷新时会查询连接并返回有关已连接多长时间的数据,有多少推文有已退回等

问题是我不知道如何用我到目前为止的代码完成这项工作。例如,我如何'存储'连接,以便我可以查询它?

请有人介意解释正确的解决方法,哪些资源可以帮助我更好地理解问题?

提前致谢,

1 个答案:

答案 0 :(得分:1)

我最近为一个项目做了这个。您需要将流使用者作为单独的python进程运行。它根本不需要成为Django应用程序的一部分。

基本上我有:

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

from myproject.myapp.utils import do_something_with_tweet

class StdOutListener(StreamListener):

    def on_data(self, data):
        do_something_with_tweet(data)
        return True

def main():
    listener = StdOutListener()

    auth = OAuthHandler(
        TWITTER_CONSUMER_KEY,
        TWITTER_CONSUMER_SECRET)

    auth.set_access_token(
        TWITTER_ACCESS_TOKEN,
        TWITTER_ACCESS_SECRET)

    try:
        stream = Stream(auth, listener)
        stream.filter(track=['#something', ])
    except (KeyboardInterrupt, SystemExit):
        print 'Stopping Twitter Streaming Client'


if __name__ == '__main__':
    main()

通过这种方式,您可以将其作为一个单独的进程运行,并将推文数据传递给某个函数以保存它或其他任何东西,Django可以在其他地方愉快地运行。

另外一点是使用芹菜来处理异步任务中的推文数据:https://celery.readthedocs.org