#bash #api #jq #github-api
Вопрос:
У меня есть простая задача написать скрипт с curl и jq, который будет печатать количество запросов на вытягивание, созданных каждым участником с помощью меток. Я смог отфильтровать запросы на вытягивание по участникам:
curl -H "Accept: application/vnd.github.v3 json" https://api.github.com/repos/jina-ai/jina/pulls?state=opened | jq '. [] | .user.login, .labels'
Но как быть дальше, может быть, ты сможешь что-нибудь придумать.
Спасибо
Комментарии:
1. Покажите нам образец ввода и вывода.
Ответ №1:
API GitHub сообщает, есть ли в заголовке больше страниц результатов link
.
Вы можете получить последнюю страницу результатов, проанализировав заголовок, например, следующим образом link
awk
:
Это сделано для того per_page=1
, чтобы заставить чрезмерную подкачку результатов для демонстрации того, как анализировать link
заголовок API GitHub.
НЕ ДЕЛАЙТЕ ЭТОГО НА ПРОИЗВОДСТВЕ, так как это было бы очень неэффективно
#!/usr/bin/env bash
API='https://api.github.com'
# DO NOT SET IT TO 1 IN PRODUCTION
per_page=1
# Get the last page
last_page=$(
curl
--silent
--head
--header "Accept: application/vnd.github.v3 json"
--url "${API}/repos/jina-ai/jina/pulls?per_page=${per_page}amp;state=opened" |
awk -F',' '
/^link:/{
for(i=1; i <= NF; i ) {
if(match($i, "[amp;?]page=([0-9] ).*rel="last"", a)) print a[1]
}
}'
)
# In case there is no paging, we need to set this to 1)
last_page=${last_page:-1}
for ((page=1; page <= last_page; page )); do
curl
--silent
--header "Accept: application/vnd.github.v3 json"
--url "${API}/repos/jina-ai/jina/pulls?per_page=${per_page}amp;page=${page}amp;state=opened" |
jq '.[] | (.user.login, .labels)'
done
Комментарии:
1. Привет, это не сработает, в нем будут отображаться только имена участников с пустыми ярлыками, например: «декайлала» [] «МузафферДеде» [] «хендрасоб» [] Какие-либо другие идеи?
2. Да, вы можете условно отображать метки
jq
. Я позволил тебе немного поискать, какif then end
jq
это сделать .