使用 Ruby 语言的 twitter/json-stream 库,将 Streaming API 中的数据保存到 mongoDB 中
因为使用Twitter的Streaming API来获取并保存所有推文到mongoDB似乎很简单,所以选择使用twitter/json-stream。
# encoding: utf-8
#! ruby -Ku
require "rubygems"
require "bundler"
require "twitter/json_stream"
require "json"
require "mongo"
Bundler.require
#.envファイルより環境変数load
Dotenv.load
#mongodb接続用定義
db = Mongo::Connection.from_uri(ENV["MONGODB_URL"]).db(ENV["MONGODB_DB"])
#コレクション定義
@items = db.collection(ENV["MONGODB_COLLECTION"])
#EventMachine
EM.run do
#Twitter Streaming APIのsampleStremの定義
samplestream = Twitter::JSONStream.connect(
:host => "stream.twitter.com", #接続ホスト
:path => "/1.1/statuses/sample.json", #接続ホスト以降のURL
:ssl => true, #SSL通信
:oauth => { #oauth認証情報
:consumer_key => ENV["CONSUMER_KEY"],
:consumer_secret => ENV["CONSUMER_SECRET"],
:access_key => ENV["ACCESS_KEY"],
:access_secret => ENV["ACCESS_SECRET"]
}
)
#sampleStreamより取得したアイテムをmongodbへ挿入
samplestream.each_item do |item|
tweet = JSON.parse(item) #ツイートの内容をjson形式に変換
if tweet["lang"] == "ja" #日本語ツイートのみ取得対象とする
@items.insert(tweet) #json形式に変換したツイートをmongodbへ挿入
end
end
end
在Gemfile中列出要使用的gem
ruby "2.1.0"
source "https://rubygems.org"
gem "twitter-stream"
gem "json"
gem "mongo"
gem "bson"
gem "bson_ext"
gem "dotenv"
将MongoDB连接和Twitter授权密钥设为.env文件的设置。
#mongoDB
MONGODB_URL = "mongodb://<uid>:<password>@localhost/db_name"
MONGODB_DB = "db_name"
MONGODB_COLLECTION = "collection_name"
#Twitter
CONSUMER_KEY = "xxxxxxxx"
CONSUMER_SECRET = "xxxxxxxx"
ACCESS_KEY = "xxxxxxxx"
ACCESS_SECRET = "xxxxxxxx"
执行时,请使用以下命令:
bundle install
bundle exec ruby main.rb