2013-06-20 3 views
20

Мне нужно разработать приложение, которое позволяет мне отслеживать твиты и сохранять их в mongodb для исследовательского проекта (как вы могли бы собрать, я нооб, поэтому пожалуйста, несите меня). Я нашел этот кусок кода, который отправляет твиты потоковое через мое окно терминала:Как я могу использовать твиты из потокового api Twitter и хранить их в 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?

Благодаря

+0

ПРИМЕЧАНИЕ: оригинальная часть кода взята из: http://peter-hoffmann.com/2012/simple-twitter-streaming-api-access-with-python-and-oauth.html – user2161725

ответ

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 коллекции.

Надеюсь, что это поможет.

+0

ДА, это похоже на работу , Огромное спасибо. Я предполагаю, что следующий вопрос: как мне изменить скрипт, который вы поставили, чтобы вместо отправки твитов на мой локальный mongodb я отправил их на мой удаленный db, размещенный на MongoLab? Есть предположения? Еще раз спасибо! – user2161725

+1

Несомненно, 'pymongo.MongoClient' принимает параметры' host', 'port'. См. [Docs] (http://api.mongodb.org/python/current/tutorial.html#making-a-connection-with-mongoclient). – alecxe

+0

Прежде всего, код работает как шарм. Мне было очень весело играть с ним, так что спасибо. Если вместо отслеживания слова я хотел отслеживать местоположение, как бы я это сделал? Я попытался заменить последнюю строку кода так, чтобы он читал sapi.filter (locations = ['- 74,40, -73,41']), но получил AssertionError. Любая идея, как я могу это исправить? Благодаря! – user2161725

6

Я разработал простой инструмент командной строки, который выполняет именно это.

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

Это позволяет использовать потоковый API или API поиска.

Смежные вопросы