Получение информации JSON из API пользовательского поиска Google с использованием ruby - PullRequest
0 голосов
/ 13 июня 2011

В настоящее время я использую Google RESTful API пользовательского поиска для получения результатов пользовательского поиска Google в формате JSON.Мой код выглядит примерно так:

require 'uri'
require 'net/http'

params = "key=#{key}&cx=#{cx}&q=#{query}&alt=#{alt}"
uri = "https://www.googleapis.com/customsearch/v1?#{params}"
r = Net::HTTP.get_response(URI.parse(uri).host, URI.parse(uri).path)

temp_file = 'testfile.html'
File.open(temp_file, 'w') { |f| f.write(r.body) }
`firefox #{temp_file}`

С переменными key, cx, query и alt всем были заданы подходящие значения.Теперь, когда я копирую и вставляю строку URI в свой браузер, я возвращаю информацию JSON, которую я ожидал.Однако при попытке запустить код Firefox открывает страницу, содержащую только следующее сообщение:

{"error":{"errors":[{"domain":"global","reason":"sslRequired","message":"SSL is required    to perform this operation."}],"code":403,"message":"SSL is required to perform this operation."}}

Это сообщение также появляется, если я пытаюсь запустить puts r.body вместо записи в файл и открытия в браузере.Может кто-нибудь сказать мне, что происходит не так?

1 Ответ

1 голос
/ 13 июня 2011

Net :: HTTP использует http без SSL (https) по умолчанию. Вы можете увидеть инструкции здесь: http://www.rubyinside.com/nethttp-cheat-sheet-2940.html в разделе «SSL / HTTPS-запрос»

require 'uri'
require 'net/https'

params = "key=#{key}&cx=#{cx}&q=#{query}&alt=#{alt}"
uri = URI.parse("https://www.googleapis.com/customsearch/v1?#{params}")

http= Net::HTTP.new(uri.host,uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
r=http.request(Net::HTTP::Get.new(uri.request_uri))

temp_file = 'testfile.html'
File.open(temp_file, 'w') { |f| f.write(r.body) }
`firefox #{temp_file}`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...