0

API を介してニューヨーク公共図書館のデジタル コレクションにアクセスしようとしています。

呼び出しを行うために使用しているルビーコードは次のとおりです。

require 'sinatra'
require 'pp'
require 'httparty'


    get '/' do
        url = "http://api.repo.nypl.org/api/v1/items/8568ccd0-c614-012f-1d74-58d385a7bc34.json"
        uri = URI.parse(url)
        http = Net::HTTP.new(uri.host, uri.port)

        headers = { "Authorization" => "Token token=mytoken" }
        request = Net::HTTP::Get.new(uri.request_uri, headers)
        response = http.request(request)
        puts response
        @response = response.body
        erb :index
    end

それで、いくつかの質問があります:

  1. これは結果を生成せず、ターミナルに puts 応答で何も返されず、エラー メッセージも返されません。私は何を間違っていますか?

  2. いずれにせよ、URI 文字列の最後にクエリを追加するにはどうすればよいですか? ? を追加して クエリが続きますか?たとえば、?leonardodavinci

4

1 に答える 1

1

irb コマンド プロンプトで遊んでみることをお勧めします。

irb [enter]

おそらく許可されていないように見えますか?私は最終的に次のようになります=> nil

irb(main):003:0> require 'sinatra'
=> true
irb(main):004:0> require 'pp'
=> true
irb(main):005:0> require 'httparty'
=> false
irb(main):006:0> url = "http://api.repo.nypl.org/api/v1/items/8568ccd0-c614-012f-1d74-58d385a7bc34.json"
=> "http://api.repo.nypl.org/api/v1/items/8568ccd0-c614-012f-1d74-58d385a7bc34.json"
irb(main):007:0>   uri = URI.parse(url)
=> #<URI::HTTP:0x9826744 URL:http://api.repo.nypl.org/api/v1/items/8568ccd0-c614-012f-1d74-58d385a7bc34.json>
irb(main):008:0>  http = Net::HTTP.new(uri.host, uri.port)
=> #<Net::HTTP api.repo.nypl.org:80 open=false>
irb(main):009:0> headers = { "Authorization" => "Token token=mytoken" }
=> {"Authorization"=>"Token token=mytoken"}
irb(main):010:0> request = Net::HTTP::Get.new(uri.request_uri, headers)
=> #<Net::HTTP::Get GET>
irb(main):011:0> response = http.request(request)
=> #<Net::HTTPUnauthorized 401 Authorization Required readbody=true>
irb(main):012:0> puts response
#<Net::HTTPUnauthorized:0x9938a74>
=> nil
irb(main):013:0> 
于 2013-05-25T02:19:45.983 に答える