如何在ruby中向文件写入TwitterAPI请求

如何在ruby中向文件写入TwitterAPI请求,ruby,twitter,Ruby,Twitter,如果这是显而易见的,请原谅,我在ruby方面只有大约5天的经验。我正在尝试将Twitter上最热门的10个主题写入一个json文件。API请求是对的GET请求。我的代码是 require "net/http" require "uri" require "JSON" uri = URI.parse("https://api.twitter.com/1/trends/1.json") File.open("test.json", "w") do |f| f.write(Net::HTTP.

如果这是显而易见的,请原谅,我在ruby方面只有大约5天的经验。我正在尝试将Twitter上最热门的10个主题写入一个json文件。API请求是对的GET请求。我的代码是

require "net/http"
require "uri"
require "JSON"

uri = URI.parse("https://api.twitter.com/1/trends/1.json")

File.open("test.json", "w") do |f|
  f.write(Net::HTTP.get(uri.host, uri.port))
end
这给了我一个错误

D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:1668:in 'initialize': undefined method 'empty?' for 443:Fixnum (NoMethodError) from 
D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:1787:in 'intialize' from 
D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:1081:in 'new' from D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:1081:in 'request_get' from 
D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:389:in 'block in get_response' from 
D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:627:in 'start' from 
D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:388:in 'get_response' from 
D:/Program Files/ruby-1.9.2/lib/ruby/1.9.1/net/http.rb:370:in 'get' from test:8:in 'block in (main)'
这方面的任何帮助都会很好

编辑:
如果我没有提供任何重要信息,那么我正在使用的API调用的所有信息是否都不正确?您对Net::HTTP.get的调用不正确,它需要(主机、路径)而不是(主机、端口):

get方法尝试将传入的内容作为字符串处理,这就是导致出现异常的原因

你也可以写

f.write(Net::HTTP.get(uri.host, uri.path, uri.port))
让它使用https,但这会导致一个空响应(出于某种原因twitter不喜欢https?)


顺便说一句,api v1已被弃用,我建议转到与v1.1等效的请求:

如前所述

require "net/http"
require "uri"
require "JSON"

uri = URI.parse("https://api.twitter.com/1/trends/1.json")  

File.open("test.json", "w") do |f|
   f.write(Net::HTTP.get(uri.host, uri.path)) 
end
应该有用


然而,使其可读性要困难得多。

谢谢您,先生。对于答案和v1.1信息,可能还值得注意的是,OP得到了一个异常,因为Net::HTTP正在调用Fixnum,而端口号不是字符串。
require "net/http"
require "uri"
require "JSON"

uri = URI.parse("https://api.twitter.com/1/trends/1.json")  

File.open("test.json", "w") do |f|
   f.write(Net::HTTP.get(uri.host, uri.path)) 
end