2013-07-05 64 views
0

我作爲Python的初學者已經有點頭痛了,但是我已經設法通過Django應用程序建立了與Twitter流API的連接並且tweetstreamPython,處理web應用程序中持久的http連接

在應用程序中,我可以執行以下操作,並通過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,也能夠訪問一個管理頁面,其上的刷新將查詢連接並返回它如何長期被連接的數據,多少鳴叫已經返回等

問題是我不知道如何可以用我到目前爲止的代碼做到這一點。例如,我如何'存儲'連接,所以我可以查詢它?

請有人介意解釋正確的方法來解決這個問題,哪些資源可以幫助我更好地理解問題?

在此先感謝,

+2

我可能有一個獨立的後臺進程(daemon)過程中的'tweetstream'抓微博,並把它們放在一個數據庫表格或其他內容,以及所需的任何管理信息,例如流程已運行多久。然後你的Django應用程序就可以從數據庫中讀取數據。 – Aya

回答

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

+1

如果這是作爲自定義管理命令運行,它可能更容易與OP的Django應用程序集成? – dm03514

+0

感謝您的回答,但我的主要問題是沒有運行連接並使用它來存儲信息,我試圖與來自Django的正在運行的進程進行通信。 – rix

+0

@ dm03514是的一個管理命令會讓生活變得更容易,也可以插入自動重新加載的東西,所以它會重新啓動dev中的代碼更改。 – krak3n