我怎么能从Twitter的流媒体API中消费推文并将它们存储在mongodb中

时间:2013-06-20 12:45:28

标签: python mongodb twitter pymongo tweepy

我需要开发一个应用程序,让我跟踪推文并将它们保存在一个研究项目的mongodb中(因为你可能会收集,我是一个菜鸟,所以请耐心等待我)。我发现这段代码通过终端窗口发送推文:

import sys
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 on_status(self, status):
        print status.text

    def on_error(self, status_code):
        print >> sys.stderr, 'Encountered error with status code:', status_code
        return True # Don't kill the stream

    def on_timeout(self):
        print >> sys.stderr, 'Timeout...'
        return True # Don't kill the stream

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

有没有办法可以修改这段代码,以便不会在我的屏幕上播放推文,而是将它们发送到我的mongodb数据库?

由于

2 个答案:

答案 0 :(得分:18)

以下是一个例子:

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'])

这会将推文发送到mongodb test数据库,tweets集合。

希望有所帮助。

答案 1 :(得分:6)

我开发了一个简单的命令行工具,可以完成这个工作。

https://github.com/janezkranjc/twitter-tap

它允许使用流API或搜索API。