Как получить следующий URL из JSON, используя Bash - PullRequest
0 голосов
/ 27 марта 2019

Я создал простой скрипт для хранения ответа от стороннего API

Запрос такой: ..

https://externalservice.io/orders?key=password&records=50&offset=0

Ответ выглядит следующим образом:

{
  "results": [
    {
      "engagement": {
        "id": 29090716,
        "portalId": 62515,
        "active": true,
        "createdAt": 1444223400781,
        "lastUpdated": 1444223400781,
        "createdBy": 215482,
        "modifiedBy": 215482,
        "ownerId": 70,
        "type": "NOTE",
        "timestamp": 1444223400781
      },
    },
  ],
  "hasMore": true,
  "offset": 4623406
}

Если есть атрибут hasMore , мне нужно прочитать значение offset, чтобы получить следующий набор записей.

Прямо сейчас я создал сценарий, который просто перебирает предполагаемое количество записей (я думал, что это так) и думал, что увеличение смещения будет работать, но это не так, поскольку смещение не является инкрементным.

#!/bin/bash

for i in {1..100}; do
    curl -s "https://externalservice.io/orders?key=password&records=50&offset=$i" >>outfile.txt 2>&1
done

Может кто-нибудь объяснить, как я могу продолжить чтение сценария, читая значение offset до hasMore=false?

1 Ответ

0 голосов
/ 27 марта 2019

Вы можете прочитать значение из json, используя утилиту jq :

$ jq -r ".hasMore" outfile

true

Вот что вы можете использовать:

more="true"
offset=0
while [ $more = "true" ]; do
    echo $offset
    response=$(curl -s "https://example.com/orders?offset=$offset")
    more=$(echo $response | tr '\r\n' ' ' | jq -r ".hasMore")
    offset=$(echo $response | tr '\r\n' ' ' | jq -r ".offset")
done

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...