1

Python とRequestsを使用して、 Twitter のストリーミング APIからデータを要求しています。一連のパラメーターを使用してデータを要求したいのですが、しばらくしてから、新しい一連のパラメーターを使用して要求を変更します。

次の単純な実際の例では、Twitter ストリーミング API にキーワード「python」を含むツイートを要求しています。1 時間後、API にキーワード「ruby」を尋ねます。ただし、これを行うために、新しい requests オブジェクトを作成しています。元のオブジェクトを変更していません。

import requests
import json
import time

USER = 'user'
PW = 'pw'

def make_request(keyword):
    r = requests.post('https://stream.twitter.com/1/statuses/filter.json',
    data={'track': keyword}, auth=(USER,PW))

    for line in r.iter_lines():
        if line:
            print json.loads(line)

        if time.time() > start_of_last_request + 3600:
            break

count = 0

keywords = ['python', 'ruby']

while count < 2:
    start_of_last_request = time.time()

    make_request(keywords[count])

    count = count + 1

最終的には、1 時間ごとに新しいクエリを作成する必要があり、作成する接続が多すぎるのではないかと心配しています。

私の質問は次のとおりです。リクエストを Twitter API に変更するより良い方法はありますか? 実際に複数の接続を作成していますか? もしそうなら、どうすればこれを回避できますか? (以前の接続を閉じる方法についての提案がありますが、解決策は私にはあまり意味がありません。)

助けていただければ幸いです。ありがとうございました!

4

1 に答える 1

1

リンクしたときに、リクエストの処理が完了した後に接続を閉じるには、keep-alive値をFalseデフォルトの代わりに設定しますTrue

r = requests.post('https://stream.twitter.com/1/statuses/filter.json',
               data={'track': keyword}, auth=(USER,PW),
               config={'keep_alive':False})

これにより、接続が完了したら、接続が確実に閉じられます。

于 2012-07-01T02:04:52.970 に答える