SHELLまたはPythonを使用してJSONを変数APIとして呼び出す

SHELLまたはPythonを使用してJSONを変数APIとして呼び出す

次のURLへのAPIアクセス権があります。

curl https://api_url.com/device_groups/ -u api_key:

JSON出力:

{
   "data":[
      {
         "type":"device_group",
         "id":85015,
         "attributes":{
            "name":"Initial"
         },
         "relationships":{
            "devices":{
               "data":[
                  
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":85683,
         "attributes":{
            "name":"mode-4"
         },
         "relationships":{
            "devices":{
               "data":[
                  
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":85684,
         "attributes":{
            "name":"Employees-3"
         },
         "relationships":{
            "devices":{
               "data":[
                  {
                     "type":"device",
                     "id":506044
                  },
                  {
                     "type":"device",
                     "id":658670
                  },
                  {
                     "type":"device",
                     "id":506034
                  },
                  {
                     "type":"device",
                     "id":506037
                  },
                  {
                     "type":"device",
                     "id":506038
                  },
                  {
                     "type":"device",
                     "id":506046
                  },
                  {
                     "type":"device",
                     "id":506043
                  },
                  {
                     "type":"device",
                     "id":658669
                  },
                  {
                     "type":"device",
                     "id":506036
                  },
                  {
                     "type":"device",
                     "id":502256
                  }
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":91589,
         "attributes":{
            "name":"Subcontractors-2"
         },
         "relationships":{
            "devices":{
               "data":[
                  {
                     "type":"device",
                     "id":658668
                  },
                  {
                     "type":"device",
                     "id":658671
                  },
                  {
                     "type":"device",
                     "id":506051
                  },
                  {
                     "type":"device",
                     "id":506048
                  },
                  {
                     "type":"device",
                     "id":506040
                  },
                  {
                     "type":"device",
                     "id":506050
                  },
                  {
                     "type":"device",
                     "id":506042
                  },
                  {
                     "type":"device",
                     "id":502236
                  },
                  {
                     "type":"device",
                     "id":506041
                  },
                  {
                     "type":"device",
                     "id":523577
                  },
                  {
                     "type":"device",
                     "id":506053
                  },
                  {
                     "type":"device",
                     "id":655780
                  },
                  {
                     "type":"device",
                     "id":508070
                  },
                  {
                     "type":"device",
                     "id":506052
                  },
                  {
                     "type":"device",
                     "id":506047
                  },
                  {
                     "type":"device",
                     "id":506035
                  },
                  {
                     "type":"device",
                     "id":506045
                  },
                  {
                     "type":"device",
                     "id":506039
                  },
                  {
                     "type":"device",
                     "id":506049
                  },
                  {
                     "type":"device",
                     "id":589426
                  }
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":92316,
         "attributes":{
            "name":"Employees-2"
         },
         "relationships":{
            "devices":{
               "data":[
                  {
                     "type":"device",
                     "id":673452
                  },
                  {
                     "type":"device",
                     "id":576554
                  },
                  {
                     "type":"device",
                     "id":672077
                  },
                  {
                     "type":"device",
                     "id":589167
                  }
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":92325,
         "attributes":{
            "name":"Employees"
         },
         "relationships":{
            "devices":{
               "data":[
                  
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":94908,
         "attributes":{
            "name":"mode 2"
         },
         "relationships":{
            "devices":{
               "data":[
                  {
                     "type":"device",
                     "id":501727
                  }
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":95017,
         "attributes":{
            "name":"Mode 1"
         },
         "relationships":{
            "devices":{
               "data":[
                  
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":95381,
         "attributes":{
            "name":"Employees-test"
         },
         "relationships":{
            "devices":{
               "data":[
                  {
                     "type":"device",
                     "id":658672
                  }
               ]
            }
         }
      },
      {
         "type":"device_group",
         "id":95382,
         "attributes":{
            "name":"Subcontracters-test"
         },
         "relationships":{
            "devices":{
               "data":[
                  
               ]
            }
         }
      }
   ],
   "has_more":false
}

各デバイスを事前定義されたデバイスグループIDに移動し、最初のJSONカールから取得した元のグループにデバイスを返す必要があります。

例えば。

curl https://api_url.com/group/$predefined_group_id/devices/506044 -u api_key: -X POST

curl https://api_url.com/group/$original_group_id/devices/506044 -u api_key: -X POST

IDまたは説明に基づいて特定のdevice_groupを変数として除外できますか?

ベストアンサー1

jqコマンド

jq -r '
    .data.id as $groupid |
    .data.relationships.devices.data[].id |
    @sh "https://api_url.com/group/\($groupid)/devices/\(.)"' file

...グループIDを抽出し、配列idのすべての値を抽出しますdata。各id値に対して出力するURLを設定します。

呼び出し時に生成されたURLを使用するにはcurl

jq -r '
    .data.id as $groupid |
    .data.relationships.devices.data[].id |
    @sh "https://api_url.com/group/\($groupid)/devices/\(.)"' file |
xargs -I {} curl -X POST -u api_key: {}

質問のJSON文書が与えられると、次のコマンドが実行されます。

curl -X POST -u api_key: https://api_url.com/group/85684/devices/506044
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506034
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506037
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506038
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506046
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506043
curl -X POST -u api_key: https://api_url.com/group/85684/devices/658669
curl -X POST -u api_key: https://api_url.com/group/85684/devices/506036
curl -X POST -u api_key: https://api_url.com/group/85684/devices/502256

xargsまた、次のURLを使用してできるだけ少ない呼び出しを行うこともできます。curl

jq -r '
    .data.id as $groupid |
    .data.relationships.devices.data[].id |
    @sh "https://api_url.com/group/\($groupid)/devices/\(.)"' file |
xargs curl -X POST -u api_key:

これにより、単一のコマンドが生成されます。

curl -X POST -u api_key: https://api_url.com/group/85684/devices/506044 https://api_url.com/group/85684/devices/506034 https://api_url.com/group/85684/devices/506037 https://api_url.com/group/85684/devices/506038 https://api_url.com/group/85684/devices/506046 https://api_url.com/group/85684/devices/506043 https://api_url.com/group/85684/devices/658669 https://api_url.com/group/85684/devices/506036 https://api_url.com/group/85684/devices/502256

some_groupid次のようにデータで見つかったグループID(変数を使用)を使用する代わりに、コマンドラインからグループIDを指定できます。

jq -r --arg groupid "$some_groupid" '
    .data.relationships.devices.data[].id |
    @sh "https://api_url.com/group/\($groupid)/devices/\(.)"' file

おすすめ記事