2013-05-19 20 views
0

運行以下ruby腳本時,我不斷收到以下錯誤消息。如果任何人都可以幫助我解決這個問題,將不勝感激。我已經刪除了任何敏感數據,例如API密鑰。Ruby Tweetstreamstream MongoDB錯誤

代碼:

#!/usr/bin/env ruby 
require "tweetstream" 
require "mongo" 
require "time" 

TweetStream.configure do |config| 
    config.consumer_key  = 'KEY' 
    config.consumer_secret = 'SECRET' 
    config.oauth_token  = 'TOKEN' 
    config.oauth_token_secret = 'TOKEN_SECRET' 
    config.auth_method  = :oauth 
end 

db = Mongo::Connection.new("ds045037.mongolab.com", 45037).db("tweets") 
auth = db.authenticate("DB_USERNAME", "DB_PASSWORD") 
tweets = db.collection("tweetdata") 

TweetStream::Daemon.new("TWITTER_USERNAME", "TWITTER_PASSWORD").track("TERM") do |status| 
    # Do things when nothing's wrong 
    data = {"created_at" => Time.parse(status.created_at), "text" => status.text, "geo" => status.geo, "coordinates" => status.coordinates, "id" => status.id, "id_str" => status.id_str} 
    tweets.insert({"data" => data}); 
end 

命令啓動腳本:

ruby tweetscrape.rb 

的Ruby版本:

ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-linux] 

紅寶石-c tweetscrape.rb生產:

Syntax OK 

錯誤消息:

/usr/local/rvm/gems/ruby-1.9.3-p429/gems/daemons-1.1.9/lib/daemons.rb:184:in `[]=': can't convert Symbol into Integer (TypeError) 
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/daemons-1.1.9/lib/daemons.rb:184:in `run_proc' 
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/tweetstream-2.5.0/lib/tweetstream/daemon.rb:48:in `start' 
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/tweetstream-2.5.0/lib/tweetstream/client.rb:131:in `filter' 
    from /usr/local/rvm/gems/ruby-1.9.3-p429/gems/tweetstream-2.5.0/lib/tweetstream/client.rb:98:in `track' 
    from tweetscrape.rb:19:in `<main>' 

編輯:我現在使用沒有錯誤的,但下面輸入沒有到MongoDB的:

#!/usr/bin/env ruby 
require "tweetstream" 
require "mongo" 
require "time" 

TweetStream.configure do |config| 
    config.consumer_key  = 'gfdsgfdsgfdsgfdsgfdsgfds' 
    config.consumer_secret = 'gfsdgfdsgfdsgfdsgfsdgfd' 
    config.oauth_token  = 'gfdgfdsgfsdgfdsgfsdgf' 
    config.oauth_token_secret = 'hsgfsdgfsdgfsdgfds' 
    config.auth_method  = :oauth 
end 

db = Mongo::Connection.new("ds045037.mongolab.com", 45037).db("tweets") 
auth = db.authenticate("gfsdgfdsgfsd", "gfdsgfdsgfdsgfsd") 
tweets = db.collection("tweetdata") 

TweetStream::Client.new.track('TERM') do |status| 
    puts status.text 
    data = {"created_at" => Time.parse(status.created_at), "text" => status.text, "geo" => status.geo, "coordinates" => status.coordinates, "id" => status.id, "id_str" => status.id_str} 
    tweets.insert({"data" => data}) 
end 

鳴叫在屏幕上顯示通過看跌期權,但...

+0

我發現本教程對於開始使用ruby和mongodb很有幫助:http://api.mongodb.org/ruby/current/在你的代碼中,你不會錯誤地檢查對mongodb驅動程序的任何調用,可能會添加一些人看到回報值將有助於找到核心問題。 – TeTeT

回答

0

您使用守護程序類獲得的初始錯誤是因爲您未將正確的參數傳遞給構造函數。 contructor接受一個字符串和一個散列。

從移動上,插入失敗,因爲:

  1. 解析status.datetime拋出異常(它已經是一個Time對象)。
  2. 如果沒有座標,status.coordinate會拋出異常。

下面的代碼對我的作品(注:我添加咆哮,所以你可以看到微博):

#!/usr/bin/env ruby 
require "tweetstream" 
require "mongo" 
require "time" 
require 'growl' 

DESIRED = %w{created_at text geo coordinates id id_str} 
host= ENV["MONGO_HOST"] || 'localhost' 
port = ENV["MONGO_PORT"] || 27017 
username = ENV["MONGO_USERNAME"] 
password = ENV["MONGO_PASSWORD"] 

term = ARGV[1] || 'TERM' 

begin 
    TweetStream.configure do |config| 
    config.consumer_key  = ENV["TWEET_CONSUMER_KEY"] 
    config.consumer_secret = ENV["TWEET_CONSUMER_SECRET"] 
    config.oauth_token  = ENV["TWEET_OAUTH_TOKEN"] 
    config.oauth_token_secret = ENV["TWEET_OAUTH_TOKEN_SECRET"] 
    config.auth_method  = :oauth 
    end 

    db = Mongo::Connection.new(host, port).db("tweets") 
    db.authenticate(username, password) 
    tweets = db.collection("tweetdata") 

    puts "about to start tracking term #{term}" 
    TweetStream::Daemon.new('tracker').track(term) do |status| 
    Growl.notify status.text, :title => status.user.screen_name 

    # 
    # filter out nil values 
    # filter out all keys not in the desired array 
    # 
    data = status.attrs.select{|k,v| !v.nil? && DESIRED.include?(k.to_s)} 
    tweets.insert({"data" => data}); 
    end 

rescue Mongo::ConnectionFailure 
    puts "Connection Error : #{$!}" 
rescue Mongo::AuthenticationError 
    puts "Auth Error : #{$!}" 
rescue Mongo::MongoDBError 
    puts "Unexpected Error : #{$!}" 
end 

你需要設置與下面的正確值環境:

export MONGO_USERNAME="..." 
export MONGO_PASSWORD="..." 
export TWEET_CONSUMER_KEY="..." 
export TWEET_CONSUMER_SECRET="..." 
export TWEET_OAUTH_TOKEN="..." 
export TWEET_OAUTH_TOKEN_SECRET="..." 

然後就可以開始使用類似的守護進程(在這種情況下,我們會尋找洋基隊):

ruby tweetscrape.rb start yankees