1

我正在尝试使用 TradeKing API 让股票价格流工作

https://developers.tradeking.com/documentation/ruby-streaming

或下面复制和粘贴的代码

require 'em-http'
require 'em-http/middleware/oauth'

credentials = {
  :consumer_key        => "<CONSUMER_KEY>",
  :consumer_secret     => "<CONSUMER_SECRET>",
  :access_token        => "<ACCESS_TOKEN>",
  :access_token_secret => "<ACCESS_TOKEN_SECRET>"
}

EM.run do
  conn = EventMachine::HttpRequest.new('https://stream.tradeking.com/v1/market/quotes.json?symbols=F')
  conn.use EventMachine::Middleware::OAuth, credentials

  http = conn.get
  http.stream { |chunk| puts chunk }

  http.errback do
    EM.stop
  end

  trap("INT")  { http.close; EM.stop }
  trap("TERM") { http.close; EM.stop }
end

获得密钥、秘密和令牌后,我构建了一个简单的 Ruby 应用程序来处理代码,但我收到一个错误,说它无法加载

require 'em-http/middleware/oauth'

如果我禁用它,代码EventMachine::Middleware::OAuth将不起作用。

这是错误消息:

    c:/tools/ruby215/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/
kernel_require.rb:54:in `require': cannot load such file --
simple_oauth (LoadError)
        from c:/tools/ruby215/lib/ruby/site_ruby/2.1.0/rubyg
ems/core_ext/kernel_require.rb:54:in `require'
        from c:/tools/ruby215/lib/ruby/gems/2.1.0/gems/em-ht
tp-request-1.1.2/lib/em-http/middleware/oauth.rb:1:in `<top
(required)>'
        from c:/tools/ruby215/lib/ruby/site_ruby/2.1.0/rubyg
ems/core_ext/kernel_require.rb:54:in `require'
        from c:/tools/ruby215/lib/ruby/site_ruby/2.1.0/rubyg
ems/core_ext/kernel_require.rb:54:in `require'
        from app.rb:2:in `<main>'

我是事件机器和 em-http gem 的新手。我查看了他们的文档,但找不到有关此错误的信息。有人可以帮我弄清楚为什么文件无法加载吗?

4

1 回答 1

0

好的,所以我自己解决了这个问题。我有一段时间没有使用 vanilla Ruby,所以我对阅读错误消息有点生疏了。该错误表示它无法加载文件并指向gemoauth.rb中文件的第 1 行。em-http-request我查看了文件,第一行说require simple_oauth我还没有安装它。我认为安装em-http-requestgem 会simple_oauth作为依赖项安装,但我猜不是(嗯,em-http-request 已经好几年没有更新了)。

解决此问题的方法是安装simple_oauthgem。

gem install simple_oauth

并再次运行这些代码,它应该可以工作。

https://rubygems.org/gems/simple_oauth/versions/0.3.1

https://github.com/laserlemon/simple_oauth

我希望这对遇到同样问题的任何人都有帮助(因为 TradeKing API 文档不太清楚)。

于 2015-10-27T21:14:15.873 回答