2

アプリで YAJL を動作させようとしています。Twitter API と Digg API でテストしていますが、うまく動作していないようです。

どこが間違っているのかわかりません。このコードを使用して Twitter ストリーミング API を利用する: (ユーザー名/パスワードは削除されています)

max_allowed_errors = 1200
consecutive_errors = 0
while consecutive_errors < max_allowed_errors do
  url = URI.parse("https://[username]:[password]!@stream.twitter.com/1/statuses/sample.json")
  begin
    Yajl::HttpStream.get(url) do |status|
      consecutive_errors = 0
     # puts status.inspect
    end
  rescue Yajl::HttpStream::InvalidContentType
    consecutive_errors += 1
  end
  sleep(0.25*consecutive_errors)
end

エラーが発生します:

Yajl::HttpStream::HttpError in DashboardsController#streamit

Code 200 expected got 0

エラーは次の行を参照しています。

Yajl::HttpStream.get(url) do |status|

API 固有の gem は避けたいので、コードを再利用して、他の API (TweetStream など) を利用できるようにします。

助けてくれてありがとう!ご不明な点がございましたら、またはこれを明確にすることができるかどうかお知らせください。

おー!推奨事項があれば、ストリーミングを管理するために他の宝石を受け入れることに注意してください。

4

1 に答える 1

5

問題は、HTTPS 呼び出しを行うときに SSL をネゴシエートする必要があるという事実にあると思います。ソースを見ると、次のように表示されます。

    socket = opts.delete(:socket) || TCPSocket.new(uri.host, uri.port)
    request = "#{method} #{uri.path}#{uri.query ? "?"+uri.query : nil} HTTP/1.1\r\n"

ソースはこちら: https://github.com/brianmario/yajl-ruby/blob/master/lib/yajl/http_stream.rb

単純な TCP ソケットを開くだけのようです。

おそらくsslにはhttp://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/SSL/SSLSocket.htmlを使用する必要があります

于 2012-06-13T16:07:58.777 に答える