0

これが明白である場合はすみません、私はルビーで約5日間の経験しかありません。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 への呼び出しが正しくありません。(ホスト、ポート) ではなく (ホスト、パス) が必要です。

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 に答える