Skip to content

Instantly share code, notes, and snippets.

@felipekoblinger
Created March 6, 2018 03:56
Show Gist options
  • Save felipekoblinger/0faeced67bf59f699e48cfca5bec92df to your computer and use it in GitHub Desktop.
Save felipekoblinger/0faeced67bf59f699e48cfca5bec92df to your computer and use it in GitHub Desktop.
Saving tweets into MongoDB using Tweepy and PyMongo - TBI004 - FATEC SJC
# Saving tweets into MongoDB using Tweepy and PyMongo
# Author: Felipe Koblinger
import tweepy
from pymongo import MongoClient
from datetime import datetime
# Application Settings
consumer_key = "replace with your consumer key"
consumer_secret = "replace with your consumer secret"
# Your Access Token
access_token = "replace with your access token"
access_token_secret = "replace with your access token secret"
# API from OAuth
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
class StreamListener(tweepy.StreamListener):
def on_status(self, status):
connection = MongoClient("mongodb://localhost")
database = connection.tweets
retweet = status._json.get("retweeted_status")
# If is a Retweet or a commom tweet
if retweet:
if retweet.get('full_text'):
tweet_type = 'retweet_extended'
tweet_text = retweet.get('full_text')
else:
tweet_type = 'retweet'
tweet_text = retweet.get('text')
else:
extended_tweet = status._json.get('extended_tweet')
if extended_tweet and 'full_text' in extended_tweet:
tweet_type = 'tweet_extended'
tweet_text = status.extended_tweet['full_text']
else:
tweet_type = 'tweet'
tweet_text = status.text
tweet = { "_id": status.id_str,
"tweet_@": status.user.screen_name,
"tweet_type": tweet_type,
"tweet_text": tweet_text,
"tweet_created_at": status.created_at,
"created_at": datetime.utcnow() }
database.ruby.insert(tweet)
# Stream
stream = tweepy.Stream(auth = api.auth,
listener=StreamListener(), tweet_mode='extended')
stream.filter(track=['ruby'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment