使用 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

广告
将在 10 秒后关闭
bannerAds