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