未定义的方法`OAuth'在向Twitter api发出HTTP请求时

时间:2016-01-02 21:50:24

标签: ruby-on-rails twitter oauth httparty

我在尝试向Twitter流式传输API发出请求时收到以下OAuth错误:

  

" #NoMethodError:未定义的方法`OAuth'对于#TwitterMoment:0x007fa081d821f0"

def query
 authorisation_header = OAuth oauth_consumer_key=ENV["oauth_consumer_key"], oauth_nonce=ENV["oauth_nonce"], oauth_signature=ENV["oauth_signature"], oauth_signature_method=ENV["oauth_signature_method"], oauth_timestamp=ENV["oauth_timestamp"], oauth_token=ENV["oauth_token"], oauth_version=ENV["oauth_version"]
 response = HTTParty.get("https://stream.twitter.com/1.1/statuses/filter.json?locations=-#{@bounds}", headers: {"Authorization" => authorisation_header})
end

OAuth包含在我的gemfile中。

非常感谢任何想法!这是我的第一个Stack Overflow问题:)

1 个答案:

答案 0 :(得分:1)

您在这里使用OAuth作为函数/方法,但该方法不存在。 def OAuth(...) gem中没有任何oauth,因此它会爆炸并为您提供NoMethodError。

Header example at the bottom of this question判断,我认为你已经混淆了Ruby代码的头字符串。

相反,您需要自己制作字符串(安全地做一点烦恼),或者使用the OAuth gem's方法(API)来完成。

这是an example from the OAuth github repo

consumer = OAuth::Consumer.new(
  options[:consumer_key],
  options[:consumer_secret],
  :site => "http://query.yahooapis.com"
)

access_token = OAuth::AccessToken.new(consumer)

response = access_token.request(
  :get,
  "/v1/yql?q=#{OAuth::Helper.escape(query)}&format=json"
)
rsp = JSON.parse(response.body)
pp rsp

这个例子可能适合你(我不能在这里测试它,抱歉):

def query
  consumer = OAuth::Consumer.new(
    ENV["oauth_consumer_key"],
    ENV["oauth_consumer_token"],
    site: "https://stream.twitter.com"
  )
  access_token = OAuth::AccessToken.new(consumer)

  response = access_token.request(
    :get,
    "/1.1/statuses/filter.json?locations=-#{OAuth::Helper.escape(@bounds)}"
  )
  response = JSON.parse(response.body)
  pp response  # Just a bit of debug printing for the moment; remove this later.
  response
end

附录:

通常我可能会指示您使用现有的Twitter客户端gem,例如https://github.com/sferik/twitter,但在这种情况下,它们看起来还没有实现Moments API。