Запрос на поиск в Github без разбивки на страницы

#bash #shell #github

Вопрос:

Я пытаюсь получить в организации Github список репозиториев, который зависит от конкретных.

Например. Если у меня есть вызываемая библиотека string_utils , я хочу искать только имя репозиториев (не файлы, не содержимое, а только имена репозиториев), которые содержат что-то вроде import string_utils .

Когда я выполняю поиск с помощью браузера Github, я получаю все файлы в репозиториях и конкретную строку соответствия его содержимому. Мне нужны только имена репозиториев.

Я закончил копирование запроса как запроса curl и выполнил некоторые сценарии оболочки:

 query_string="q=<query search> -repo:<repo>"
url="https://<URL stuff>/search"

grep_regex='<a. class="Link--secondary". href="/[^/] /[^"] (?=">)'

declare -a dependents="$(
  (
    seq 1 "$PAGES" 
    | xargs -P0 -I page_number 
      curl 
        --get 
        --data-urlencode "${query_string}" 
        --data-urlencode "type=Code" 
        --data-urlencode "p=page_number" 
        --data-urlencode "filename=pom.xml" 
        --header "${COOKIE_HEADER}" 
        --silent 
        "$url"
  ) 
  | grep -Po "$grep_regex" 
  | awk '!unique[$0]  '
)"
 

Но я получил меньше репозиториев, чем ожидалось. Я думаю, это из-за проблемы с разбиением на страницы.

Кто-нибудь знает, как получить все результаты без разбивки на страницы или лучший подход?

Комментарии:

1. Вы, вероятно, хотите использовать API github для такого рода вещей: docs.github.com/en/rest

2. @match Спасибо! Я изучаю документы.

Ответ №1:

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

Однако обратите внимание, что ответы REST API по-прежнему разбиты на страницы. Это потому, что GitHub не знает, сколько ответов вы хотите, и на ваш запрос может быть много ответов (для поиска, возможно, миллионы). Если вам нужна только первая тысяча, было бы очень расточительно генерировать остальные ответы, поэтому GitHub требует, чтобы вы запрашивали не более ста за раз. Это стандартная мера в REST API для обеспечения хорошей производительности и предотвращения DoS-атак.

Комментарии:

1. Круто! Спасибо! Это полезно знать. Мне просто нужно имя репозиториев, которые соответствуют моему поиску. Я думаю, что документы API будут очень полезны.