0

Twitter のストリーミング API からローカルホストの mongodb にツイートを取り込むスクリプトがあります。アップタイムを改善するために、これをリモートで実行し、つぶやきを「クラウドのようなデータベース」(MongoLab など) に保存したいと考えています。

これが私のスクリプトです:

import json
import pymongo
import tweepy

consumer_key = ""
consumer_secret = ""
access_key = ""
access_secret = ""

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)


class CustomStreamListener(tweepy.StreamListener):
    def __init__(self, api):
        self.api = api
        super(tweepy.StreamListener, self).__init__()

        self.db = pymongo.MongoClient().test

    def on_data(self, tweet):
        self.db.tweets.insert(json.loads(tweet))

    def on_error(self, status_code):
        return True # Don't kill the stream

    def on_timeout(self):
        return True # Don't kill the stream


sapi = tweepy.streaming.Stream(auth, CustomStreamListener(api))
sapi.filter(track=['Gandolfini'])

今、私は MongoLab と Heroku でアカウントを設定しましたが、完全に行き詰まっています (私はすべてのプログラミングに慣れていません)。物事を進めるには、次の 2 つの問題を解決する必要があると思います。i) スクリプトを Heroku でホストするにはどうすればよいですか? ii) Heroku で実行しているスクリプトを Mongolab アカウントに向けるにはどうすればよいですか? 何かご意見は?

4

2 に答える 2

2

Heroku で Python をセットアップするためのガイドは次のとおりです。

https://devcenter.heroku.com/articles/python

コードを MongoLab データベースに接続するには、MongoClient オブジェクトに URI を渡すだけです。Heroku で MongoLab アドオンを使用している場合、URI は環境変数にバインドされています。

https://devcenter.heroku.com/articles/mongolab#getting-your-connection-uri

os.getenv() を使用して取得できるはずです。

http://docs.python.org/2/library/os.html#os.getenv

また、正しいデータベース名を使用していることを確認してください (「test」は使用しないでください)。データベースの名前は、URI の末尾の最後のスラッシュ「/」の後に表示されます。最終的には、次のようになります。

self.db = pymongo.MongoClient(os.getenv("MONGOLAB_URI")).heroku_appXXXXXXX
于 2013-07-30T17:48:20.023 に答える
0

現時点では、Heroku から Twitter API を呼び出すと、Twitter の IP アドレス ベースのレート制限で問題が発生する可能性があることに注意してください。基本的に、あなたのアプリケーションは他の Heroku アプリケーションと IP アドレスを共有し、それらのアプリケーションは Twitter にリクエストを送信することもでき、Twitter は共有 IP アドレスをブラックリストに載せることができます。詳細については、次の 2 つの質問を参照してください。

Heroku でホストされているサイトの Twitter レート制限

(twitter) 認証失敗!タイムアウト: Net::OpenTimeout、実行期限切れ

于 2013-07-31T18:08:36.710 に答える