#ruby #parsing
#рубин #разбор
Вопрос:
Я понимаю, как анализировать JSON, но я не понимаю, как его анализировать, если он содержит ссылки на другие страницы.
Я был бы благодарен вам за помощь!
api.example.com/v0/accounts
При первом запросе файла JSON мы получаем:
{ "response": "OK", "nfts": [ { "token_id": "35507806371588763669298464310896317145981867843055556101069010709538683224114" } ], "total": null, "continuation": "1634866413000" }
Есть строка: продолжение, которая является ссылкой на следующий запрос, и поэтому она повторяется еще много раз.
При следующем запросе ссылка изменится на api.example.com/v0/accountsamp;continuation=1634866413000
Мой код теперь выглядит так:
class Source include Mongoid::Document include Mongoid::Timestamps require 'json' after_save :add_items def add_items json= HTTParty.get("https://api.example.com/v0/accounts") json.dig('nfts') load_items_ethereum.each do |item| Item.create!( :token_id =gt; item['token_id'], ) end end end
Комментарии:
1. Вам придется сделать дополнительный вызов API, а затем либо объединить его с существующими данными, либо просмотреть результаты.
Ответ №1:
Низкоуровневые HTTP-клиенты, такие как HTTParty, обычно не обрабатывают итерации. Вам нужно будет сделать это самостоятельно, используя цикл до тех пор, пока не останется поля продолжения, например:
begin continuation_param = "?continuation=#{continuation_id}" if continuation_id json = HTTParty.get("https://api.example.com/v0/accounts#{continuation_param}") continuation_id = json.dig('continuation'); # process latest payload, append it to a running list, etc. end while continuation_id
(И для производства лучше всего было бы сохранить счетчик, чтобы вы могли выйти из игры после N итераций, чтобы избежать бесконечного цикла.)