Мне нужно собрать несколько JSON результатов с сайта. Поскольку на сайте есть ограничение параллелизма запросов и время ожидания запросов, временные рамки для запросов должны быть разделены. Итак, у меня осталось JSON следующим образом:
{
"results": [
[
{
"field": "AccountId",
"value": "11352"
},
{
"field": "number_of_requests",
"value": "241398"
}
],
[
{
"field": "AccountId",
"value": "74923"
},
{
"field": "number_of_requests",
"value": "238566"
}
]
],
"statistics": {
"recordsMatched": 502870.0,
"recordsScanned": 165908292.0,
"bytesScanned": 744173091162.0
},
"status": "Complete"
}
{
"results": [
[
{
"field": "AccountId",
"value": "11352"
},
{
"field": "number_of_requests",
"value": "185096"
}
]
],
"statistics": {
"recordsMatched": 502870.0,
"recordsScanned": 165908292.0,
"bytesScanned": 744173091162.0
},
"status": "Complete"
}
Моя цель - агрегировать результаты, а также идентификатор учетной записи фида в качестве аргумента кода python, который выводит строку. Код python выглядит следующим образом:
python check_account.py 11352
Internal
python check_account.py 74923
External
Итак, мой желаемый результат для добавления в файл:
AccountID: Количество запросов: Тип
11352: 426494: Внутренний
74923: 238566 : External
На данный момент у меня есть код python с API, который вызывает соответствующие функции и выводит Internal или External в качестве вывода.
И следующий скрипт в bash используя jq:
#!/bin/zsh
ResultsDir=$1
list=$(jq -nr '
[inputs | .results[] | map( { (.field) : .value} ) | add]
| group_by(.AccountId)
| map([.[0].AccountId, (map(.number_of_requests|tonumber) | add)])
| sort_by(.[1]) | reverse
| "\(.[]) " ' $ResultsDir)
echo "Results saved in file query-results"
echo "ACCOUNT ID : #_OF_REQUESTS" > $ResultsDir/query-results
echo "$list" >> $ResultsDir/query-results
Существует способ сделать это в самом коде python, но мне было интересно, есть ли способ использовать сценарий python выше как код python используется во многих других функциях.