Skip to main content
Publicamos actualizaciones para la documentación con frecuencia y es posible que aún se esté traduciendo esta página. Para obtener la información más reciente, consulta la documentación en inglés.
Ahora la API de REST tiene control de versiones. Para obtener más información, consulta "Acerca del control de versiones de la API".

Search

Usa la API REST para buscar elementos específicos en GitHub.

Puedes usar la API REST para buscar el elemento específico que quieras encontrar. Por ejemplo, puedes buscar un usuario o un archivo específico en el repositorio. Tómalo como el simil de realizar una búsqueda en Google. Se diseñó para ayudarte a encontrar el resultado exacto que estás buscando (o tal vez algunos de los resultados que buscas). Tal como la búsqueda en Google, a veces quieres ver algunas páginas de los resultados de búsqueda para que puedas encontrar el elemento que mejor satisfaga tus necesidades. Para satisfacer esta necesidad, la API REST de GitHub proporciona hasta 1000 resultados por búsqueda.

Puedes delimitar tu búsqueda utilizando consultas. Para más información sobre la sintaxis de las consultas de búsqueda, consulta "Search".

Clasificar los resultados de la búsqueda

A menos de que se proporcione algún otro tipo de opción como parámetro de consulta, los resultados se clasificarán de acuerdo a la exactitud de la coincidencia en orden descendente. Varios factores se combinan para impulsar el elemento más relevante hasta arriba de la lista de resultados.

Límite de frecuencia

La API REST tiene un límite de frecuencia personalizado para la búsqueda. Para solicitudes autenticadas, puedes realizar hasta 30 solicitudes por minuto. En el caso de las solicitudes sin autenticación, el límite de frecuencia le permite hacer hasta 10 solicitudes por minuto.

Nota: A partir del 10 de abril de 2023, el punto de conexión "Código de búsqueda" requerirá que se autentique y limite a 10 solicitudes por minuto. Los demás puntos de conexión de búsqueda permanecerán iguales. Para más información, vea esta publicación del blog.

Consulte la documentación sobre el límite de frecuencia para obtener más información sobre cómo determinar el estado actual de su límite de frecuencia.

Construir una consulta de búsqueda

Cada punto de conexión de la búsqueda usa parámetros de consulta para realizar búsquedas en GitHub. Consulta los puntos de conexión individuales para obtener ejemplos que incluyen el punto de conexión y los parámetros de consulta.

Una consulta puede contener cualquier combinación de calificadores de búsqueda que sea compatible con GitHub. El formato de esta consulta de búsqueda es:

SEARCH_KEYWORD_1 SEARCH_KEYWORD_N QUALIFIER_1 QUALIFIER_N

Por ejemplo, si quiere buscar todos los repositorios que pertenecen a defunkt y contienen las palabras GitHub y Octocat en el archivo Léame, puede usar la consulta siguiente con el punto de conexión de búsqueda en repositorios:

GitHub Octocat in:readme user:defunkt

Nota: Asegúrese de usar el codificador HTML preferido de su lenguaje de programación para construir las cadenas de consulta. Por ejemplo:

// JavaScript
const queryString = 'q=' + encodeURIComponent('GitHub Octocat in:readme user:defunkt');

Consulta "Buscar en GitHub" para obtener una lista completa de los calificadores disponibles, su formato y un ejemplo de cómo usarlos. Para obtener información sobre cómo usar los operadores para comparar cantidades y fechas específicas, o para que excluyan resultados, consulta "Entender la sintaxis de búsqueda".

Limitaciones sobre la longitud de la consulta

No puedes usar consultas que:

  • sean mayores a 256 caracteres (sin incluir los operadores o calificativos).
  • Tienen más de cinco operadores AND, OR o NOT.

Estas consultas de búsqueda devolverán un mensaje de error de "Validation failed".

Límites del ámbito de búsqueda

A fin de mantener la velocidad de la API REST para todos los usuarios, se limita el número de repositorios en los que se buscará una consulta. La API REST encontrará hasta 4000 repositorios que coincidan con los filtros y devolverá resultados de esos repositorios.

Tiempos excedidos y resultados incompletos

Para que la API REST sea rápida para todos, se limita el tiempo que se puede ejecutar una consulta individual. Para las consultas que superan el límite de tiempo, la API devuelve las coincidencias que se han encontrado antes de que se cumpla el tiempo de espera y la respuesta tiene la propiedad incomplete_results establecida en true.

Llegar a una interrupción no necesariamente significa que los resultados de búsqueda estén incompletos. Puede que se hayan encontrado más resultados, pero también puede que no.

Errores de acceso o resultados de búsqueda faltantes

Necesita autenticarse correctamente y tener acceso a los repositorios en sus consultas de búsqueda, de otro modo, verá un error 422 Unprocessable Entry con el mensaje "Validation Failed". Por ejemplo, se producirá un error en la búsqueda si su consulta incluye calificadores repo:, user: o org: que solicitan recursos a los cuales no tiene acceso cuando inicia sesión en GitHub.

Cuando su consulta de búsqueda solicita recursos múltiples, la respuesta solo contendrá aquellos a los que tenga acceso y no proporcionará un mensaje de error que liste los recursos que no se han devuelto.

Por ejemplo, si la consulta de búsqueda busca en los repositorios octocat/test y codertocat/test, pero solo tiene acceso a octocat/test, la respuesta mostrará los resultados de la búsqueda para octocat/test y no mostrará nada para codertocat/test. Este comportamiento simula cómo funciona la búsqueda en GitHub.

Metadatos en el texto coincidente

En GitHub, puedes usar el contexto que proporcionan los fragmentos de código y los puntos destacados en los resultados de búsqueda. Los puntos de conexión de búsqueda devuelven metadatos adicionales que te permiten resaltar los términos de búsqueda coincidentes cuando se muestran los resultados de la búsqueda.

Las solicitudes pueden decidir recibir esos fragmentos de texto en la respuesta, y cada fragmento se acompaña de intervalos numéricos que identifican la ubicación exacta de cada término de búsqueda coincidente.

Para obtener estos metadatos en los resultados de búsqueda, especifique el tipo de medio text-match en el encabezado Accept.

application/vnd.github.text-match+json

Al proporcionar el tipo de medio text-match, recibirá una clave extra en la carga de JSON llamada text_matches, la cual proporciona información sobre la posición de sus términos de búsqueda dentro del texto y la propiedad (property) que incluye dicho término de búsqueda. Dentro de la matriz text_matches, cada objeto incluye los siguientes atributos:

NombreDescripción
object_urlLa URL del recurso que contiene una propiedad de secuencia que empata con uno de los términos de búsqueda.
object_typeEl nombre del tipo de recurso que existe en el atributo object_url especificado.
propertyEl nombre de la propiedad del recurso que existe en object_url. Esa propiedad es una secuencia que empata con uno de los términos de la búsqueda. (En el código JSON que se devuelve de object_url, el contenido completo del objeto fragment se encontrará en la propiedad con este nombre).
fragmentUn subconjunto del valor de property. Este es el fragmento de texto que empata con uno o más de los términos de búsqueda.
matchesUna matriz de uno o más términos de búsqueda presentes en el objeto fragment. Los índices (es decir, "intervalos") son relativos al fragmento. (No son relativos al contenido completo del objeto property).

Ejemplo

Con un comando curl y el ejemplo de búsqueda de incidencias anterior, nuestra solicitud de API tendría este aspecto:

curl -H 'Accept: application/vnd.github.text-match+json' \
'https://api.github.com/search/issues?q=windows+label:bug \
+language:python+state:open&sort=created&order=asc'

La respuesta incluirá una matriz text_matches para cada resultado de búsqueda. En el código JSON siguiente, tenemos dos objetos en la matriz text_matches.

La primera coincidencia de texto se produjo en la propiedad body de la incidencia. Aquí vemos un fragmento de texto del cuerpo del informe de problemas. El término de búsqueda (windows) aparece dos veces en ese fragmento, y tenemos los índices de cada aparición.

La segunda coincidencia de texto se produjo en la propiedad body de uno de los comentarios de la incidencia. Tenemos la URL para el comentario del informe de problemas. Y, por supuesto, vemos un fragmento de texto del cuerpo del comentario. El término de búsqueda (windows) aparece una vez en ese fragmento.

{
  "text_matches": [
    {
      "object_url": "https://api.github.com/repositories/215335/issues/132",
      "object_type": "Issue",
      "property": "body",
      "fragment": "comprehensive windows font I know of).\n\nIf we can find a commonly
      distributed windows font that supports them then no problem (we can use html
      font tags) but otherwise the '(21)' style is probably better.\n",
      "matches": [
        {
          "text": "windows",
          "indices": [
            14,
            21
          ]
        },
        {
          "text": "windows",
          "indices": [
            78,
            85
          ]
        }
      ]
    },
    {
      "object_url": "https://api.github.com/repositories/215335/issues/comments/25688",
      "object_type": "IssueComment",
      "property": "body",
      "fragment": " right after that are a bit broken IMHO :). I suppose we could
      have some hack that maxes out at whatever the font does...\n\nI'll check
      what the state of play is on Windows.\n",
      "matches": [
        {
          "text": "Windows",
          "indices": [
            163,
            170
          ]
        }
      ]
    }
  ]
}

Search code

Funciona con GitHub Apps

Searches for query terms inside of a file. This method returns up to 100 results per page.

When searching for code, you can get text match metadata for the file content and file path fields when you pass the text-match media type. For more details about how to receive highlighted search results, see Text match metadata.

For example, if you want to find the definition of the addClass function inside jQuery repository, your query would look something like this:

q=addClass+in:file+language:js+repo:jquery/jquery

This query searches for the keyword addClass within a file's contents. The query limits the search to files where the language is JavaScript in the jquery/jquery repository.

Due to the complexity of searching code, there are a few restrictions on how searches are performed:

  • Only the default branch is considered. In most cases, this will be the master branch.
  • Only files smaller than 384 KB are searchable.
  • You must always include at least one search term when searching source code. For example, searching for language:go is not valid, while amazing language:go is.

Note: Starting on April 10, 2023, code search on GitHub.com will have a separate rate limit from other search types, of 10 requests per minute, and all code search requests will require authentication. For more information, see this blog post.

Parámetros para "Search code"

Encabezados
Nombre, Tipo, Descripción
accept string

Setting to application/vnd.github+json is recommended.

Parámetros de consulta
Nombre, Tipo, Descripción
q string Requerido

The query contains one or more search keywords and qualifiers. Qualifiers allow you to limit your search to specific areas of GitHub. The REST API supports the same qualifiers as the web interface for GitHub. To learn more about the format of the query, see Constructing a search query. See "Searching code" for a detailed list of qualifiers.

sort string

Note: This field is deprecated, and will be ignored after April 10, 2023 (except on GitHub Enterprise Server). Sorts the results of your query. Can only be indexed, which indicates how recently a file has been indexed by the GitHub search infrastructure. Default: best match

Value: indexed

order string

Note: This field is deprecated, and will be ignored after April 10, 2023 (except on GitHub Enterprise Server). Determines whether the first search result returned is the highest number of matches (desc) or lowest number of matches (asc). This parameter is ignored unless you provide sort.

Valor predeterminado: desc

Puede ser uno de los siguientes: desc, asc

per_page integer

The number of results per page (max 100).

Valor predeterminado: 30

page integer

Page number of the results to fetch.

Valor predeterminado: 1

Códigos de estado de respuesta HTTP para "Search code"

status codeDescripción
200

OK

304

Not modified

403

Forbidden

422

Validation failed, or the endpoint has been spammed.

503

Service unavailable

Ejemplos de código para "Search code"

get/search/code
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>"\ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/search/code?q=Q

Response

Status: 200
{ "total_count": 7, "incomplete_results": false, "items": [ { "name": "classes.js", "path": "src/attributes/classes.js", "sha": "d7212f9dee2dcc18f084d7df8f417b80846ded5a", "url": "https://api.github.com/repositories/167174/contents/src/attributes/classes.js?ref=825ac3773694e0cd23ee74895fd5aeb535b27da4", "git_url": "https://api.github.com/repositories/167174/git/blobs/d7212f9dee2dcc18f084d7df8f417b80846ded5a", "html_url": "https://github.com/jquery/jquery/blob/825ac3773694e0cd23ee74895fd5aeb535b27da4/src/attributes/classes.js", "repository": { "id": 167174, "node_id": "MDEwOlJlcG9zaXRvcnkxNjcxNzQ=", "name": "jquery", "full_name": "jquery/jquery", "owner": { "login": "jquery", "id": 70142, "node_id": "MDQ6VXNlcjcwMTQy", "avatar_url": "https://0.gravatar.com/avatar/6906f317a4733f4379b06c32229ef02f?d=https%3A%2F%2Fidenticons.github.com%2Ff426f04f2f9813718fb806b30e0093de.png", "gravatar_id": "", "url": "https://api.github.com/users/jquery", "html_url": "https://github.com/jquery", "followers_url": "https://api.github.com/users/jquery/followers", "following_url": "https://api.github.com/users/jquery/following{/other_user}", "gists_url": "https://api.github.com/users/jquery/gists{/gist_id}", "starred_url": "https://api.github.com/users/jquery/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/jquery/subscriptions", "organizations_url": "https://api.github.com/users/jquery/orgs", "repos_url": "https://api.github.com/users/jquery/repos", "events_url": "https://api.github.com/users/jquery/events{/privacy}", "received_events_url": "https://api.github.com/users/jquery/received_events", "type": "Organization", "site_admin": false }, "private": false, "html_url": "https://github.com/jquery/jquery", "description": "jQuery JavaScript Library", "fork": false, "url": "https://api.github.com/repos/jquery/jquery", "forks_url": "https://api.github.com/repos/jquery/jquery/forks", "keys_url": "https://api.github.com/repos/jquery/jquery/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/jquery/jquery/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/jquery/jquery/teams", "hooks_url": "https://api.github.com/repos/jquery/jquery/hooks", "issue_events_url": "https://api.github.com/repos/jquery/jquery/issues/events{/number}", "events_url": "https://api.github.com/repos/jquery/jquery/events", "a