2

ルビーとmongodbの概念を学び始めたばかりです。これは私が実行しようとしているスクリプトです

require 'rubygems'
require 'tweetstream'
require 'mongo'

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

connection = Mongo::Connection.new

db = connection.db("tweetsDB")

tweets = db.collection("tweets")

client = TweetStream::Client.new

client.on_error do |message|
  puts message
end

client.follow(<user_id>,<user_id>) do |status|
        id = tweets.insert(status, :safe => true)
end

注: この投稿の上記のスクリプトで、静的なプライベート値をすべて削除しました。

Mongo、bson、bson_ext のバージョン - 1.7.0

エラーメッセージ

NoMethodError: undefined method `has_key?' for #<Twitter::Tweet:0x7f21cd14cf08>
    /var/lib/gems/1.8/gems/bson-1.7.0/lib/bson/types/object_id.rb:93:in `create_pk'
    /var/lib/gems/1.8/gems/mongo-1.7.0/lib/mongo/collection.rb:360:in `insert'
    /var/lib/gems/1.8/gems/mongo-1.7.0/lib/mongo/collection.rb:360:in `collect!'
    /var/lib/gems/1.8/gems/mongo-1.7.0/lib/mongo/collection.rb:360:in `insert'
    tracker.rb:28
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:525:in `call'
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:525:in `invoke_callback'
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:533:in `yield_message_to'
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:471:in `respond_to'
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:411:in `connect'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:296:in `call'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:296:in `invoke_callback'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:143:in `handle_stream'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:193:in `on_body'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:192:in `each'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:192:in `on_body'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:74:in `<<'
    /var/lib/gems/1.8/gems/em-twitter-0.2.1/lib/em-twitter/connection.rb:74:in `receive_data'
    /var/lib/gems/1.8/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run_machine'
    /var/lib/gems/1.8/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run'
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:385:in `start'
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:128:in `filter'
    /var/lib/gems/1.8/gems/tweetstream-2.3.0/lib/tweetstream/client.rb:106:in `follow'
    tracker.rb:27
4

3 に答える 3

0

一般的なルビーオブジェクトを返すだけのドキュメントを見ているようです。Client.followオブジェクトから関連するフィールドを取得し、それらを json (または、より望ましいのはmongoidオブジェクト) に引き出して、データベースに送信する必要があります。

于 2012-11-13T15:10:56.420 に答える
0

has_key? Hash スーパークラスで使用できるメソッドです。それがやろうとしているのは、Mongo に渡す JSON 文字列を作成することです。文字列を渡すことを除いて、has_key? String クラスの一部ではありません。それをハッシュに変換するだけで、準備完了です。

client.follow(<user_id>,<user_id>) do |status|
    id = tweets.insert({:status => status.text}, :safe => true)
end
于 2013-03-11T20:35:18.527 に答える