我在尝试向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问题:)
答案 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。