Получить 10 лучших репозиториев javascript/opensource, ранжированных по звездам, с помощью GitHub GraphQL Api

Я хотел бы получить 10 лучших репозиториев javascript/opensource, ранжированных по звездочке (и некоторую связанную информацию), используя GitHub GraphQL Api в проекте Python. У меня есть этот запрос до сих пор:

query{
  search(type: REPOSITORY, query: "language:javascript", first:10) {
    userCount
    edges {
      node {
        ... on Repository {
          name
          url
          stargazers {
            totalCount
          }
          owner{
            login
          }
        }
      }
    }
  }
}

Проблема в том, что он не всегда возвращает один и тот же результат: он вернет 10 случайных репозиториев, упорядоченный по количеству звезд при каждом запросе, а не абсолютный топ-10.

И вдобавок ко всему, я хотел бы получить те, которые с открытым исходным кодом.

Я использую запрос

query{
licenses{name}
}

чтобы получить список лицензий, но я не знаю, является ли это исчерпывающим списком (похоже, в нем отсутствуют некоторые лицензии, такие как MIT). Согласно документу это

Return a list of known open source licenses.

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

Кажется, я не могу найти четких ответов, поскольку документация по API GraphQl для GitHub скудна и довольно расплывчата.

Спасибо

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
320
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я получил частичное объяснение от службы поддержки GitHub о причине непостоянства результатов: это связано с тем, что существует тайм-аут, когда запросы выполняются слишком долго.

Some queries are computationally expensive for our search infrastructure to execute. To keep search fast for everyone, we limit how long any individual query can run. In rare situations when a query exceeds the time limit, search returns all matches that were found prior to the timeout and informs you that a timeout occurred.

Reaching a timeout does not necessarily mean that search results are incomplete. It just means that the query was discontinued before it searched through all possible data.

Our team wrote about this here:

https://help.github.com/articles/troubleshooting-search-queries/#potential-timeouts

Given this reality, these timeouts may cause inconsistencies while paging through the results. We see how this could be improved in future iterations of search, so we've let our team know so they're aware though we can't make any promises on specific changes.

Редактировать: предоставлено службой поддержки, добавление query: "language:javascript stars:>1600" (1600 — это более или менее минимальное количество звезд для 3000 лучших представителей, но оно должно быть достаточно большим, чтобы сузить поиск) будет последовательно обеспечивать 10 лучших репозиториев, упорядоченных по звездочке.

Другие вопросы по теме