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 上设置了帐户,但完全被卡住了(我对所有编程都是新手)。我想,向前推进,我需要解决两个问题:i)如何使用 Heroku 托管我的脚本?ii) 如何将在 Heroku 中运行的脚本指向我的 Mongolab 帐户?有什么想法吗?

4

2 回答 2

2

这是在 Heroku 上设置 Python 的指南:

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

要将您的代码连接到 MongoLab 数据库,您只需将 URI 传递给您的 MongoClient 对象。如果您通过 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 地址的速率限制出现问题。基本上,您的应用程序将与其他也可以向 Twitter 发送请求的 Heroku 应用程序共享 IP 地址,而 Twitter 可以将共享的 IP 地址列入黑名单。有关详细信息,请参阅这两个问题:

Heroku 上托管的网站的 Twitter 速率限制

(twitter) 认证失败!超时:Net::OpenTimeout,执行过期

于 2013-07-31T18:08:36.710 回答