0

对不起,如果这很明显,我只有大约 5 天的 ruby​​ 经验。我正在尝试将 Twitter 上的前 10 个热门话题写入 json 文件。API 请求是对https://api.twitter.com/1/trends/1.json的 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)'

对此的任何帮助都会很棒

编辑: https ://dev.twitter.com/docs/api/1/get/trends/%3Awoeid是如果我错过提供任何重要信息,我正在使用的 API 调用的所有信息

4

2 回答 2

2

您对 Net::HTTP.get 的调用不正确,它需要 (host, path) 而不是 (host, port):

f.write(Net::HTTP.get(uri.host, uri.path))

get 方法尝试将您传入的内容视为字符串,这就是导致您看到的异常的原因。

你也可以写

f.write(Net::HTTP.get(uri.host, uri.path, uri.port))

让它使用 https,但这会导致一个空响应(由于某种原因 twitter 不喜欢 https?)

顺便提一下 api v1 已被弃用,我建议移至 v1.1 等效请求:https ://dev.twitter.com/docs/api/1.1/get/trends/place

于 2013-01-26T02:55:16.733 回答
0

如前所述,

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

应该管用。

然而,使它具有可读性是一项艰巨的任务。

于 2013-01-26T04:19:27.490 回答