Разбор JSON с несколькими страницами в Ruby

#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 итераций, чтобы избежать бесконечного цикла.)