Подтвердить что ты не робот

Взаимодействие с сторонним API в Rails? (URL-адреса Opeing и анализ XML/JSON)

Я работаю над проектом Rails, который должен взаимодействовать с несколькими сторонними API. Я новичок в Rails, и я никогда раньше этого не делал, поэтому здесь мне не хватает базовой информации. В частности, Какой предпочтительный способ Rails просто запрашивать внешний URL?

В мире PHP это было cURL. Вы берете любой URL ресурса, бросаете cURL на нем и начинаете обработку ответа, будь то XML, JSON и т.д.

Итак, что эквивалентно cURL в Rails? Пока мы на нем, , что является предпочтительным методом анализа XML и ответов JSON? Мои инстинкты для Google для некоторых камней Ruby, чтобы выполнить эту работу, но это такая практическая проблема, что я не удивлюсь, если сообщество Rails уже разработало проверенное решение этой проблемы.

Если он имеет какое-либо контекстуальное значение, я планирую запустить эти сторонние взаимодействия с API как ночные cronjobs, возможно, все они упакованы как пользовательские задачи rake.

Спасибо, что поделились своими знаниями.

4b9b3361

Ответ 1

для открытия URL-адресов вы можете использовать open-uri

просто

require 'open-uri'
file_handle = open("http://google.com/blah.xml")

для разбора xml вы можете использовать Nokogiri

$ gem install nokogiri

document = Nokogiri::XML(file_handle)
document/"xpath/search"

очень мощная библиотека, может выполнять все виды поиска и изменения как для XML, так и для HTML

для html Nokogiri::HTML

там также много поддержки JSOM.

checkout Nokogiri также Hpricot хорош для XML/HTML

для JSON в рельсах

parsed_json = ActiveSupport::JSON.decode(your_json_string)

parsed_json["results"].each do |longUrl, convertedUrl|
  site = Site.find_by_long_url(longUrl)
  site.short_url = convertedUrl["shortUrl"]
  site.save
end

см. этот вопрос: Как разобрать JSON с Ruby on Rails?

Ответ 2

В идеальном мире, камень уже существует для API, который вы хотите использовать, и вы просто использовали бы это. В противном случае у вас есть несколько вариантов:

  • ActiveResource может иметь смысл для вас в зависимости от сложности API, который вы хотите использовать. Например, здесь используется старый (и не более функциональный) пример с помощью ActiveResource для подключения к API Twitter
  • Net:: Http является более низким уровнем, но, безусловно, делает трюк
  • open-uri - это оболочка для net/http
  • Curb использует libcurl для выполнения действий

Разбор JSON, как правило, очень прост. Для XML, как указано в другом ответе, Nokogiri, вероятно, путь.