GitHub API - Разное количество результатов для jq отфильтрованного ответа - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь использовать GitHub API, чтобы составить список хорошо документированных библиотек Java с открытым исходным кодом. Для этого я просмотрел документацию по GitHub API и сделал этот простой завиток.

curl -G  https://api.github.com/search/repositories?q=language:Java+stars:%3E=500+library+java+in:readme > output1.txt

Результатом этого является гигантский текстовый файл, содержащий информацию обо всех найденных репозиториях. В этом примере было всего 736 матчей. Однако файл из приведенной выше команды довольно нечитабелен, поэтому я решил выполнить синтаксический анализ, используя jq, что привело к следующему коду:

curl -G  https://api.github.com/search/repositories?q=language:Java+stars:%3E=500+library+java+in:readme \
 | jq ".items[] | {name, description, language, watchers_count, html_url}" > parsedOutput1.txt

После этого вместо 736 результатов я получил около 30 репозиториев, что неприемлемо для моих целей.

Выполнение этого поиска: language:java stars:>=500 java library in:readme в окне поиска GitHub дает мне те же 736 результатов. Я действительно не знаю, что я делаю неправильно, поэтому я мог бы использовать помощь.

1 Ответ

0 голосов
/ 08 сентября 2018

Это была проблема с подкачкой, как показано в документации, API дает вам только 30 элементов на запрос, поэтому вам нужно добавить код, чтобы включить все страницы.Я использовал bash, поэтому мой код в итоге выглядел следующим образом:

 for i in `seq 1 34`;
        do
            URL="https://api.github.com/search/repositories?q=language:Java+stars:%3E=500+library+java+in:readme&page=$i"
            echo $URL
            curl -G  $URL \
            | jq ".items[] | {name, description, language, watchers_count, html_url}" >> parsedOutput1.txt
        done

С другой стороны, при выполнении большого количества запросов вы должны проходить аутентификацию, в противном случае вы получите сообщение об превышении предела скорости API.

...