2012-02-11 17 views
7

¿Tiene GitHub una jsonp api para el origen de un archivo? Sé que BitBucket tiene, pero no puedo encontrar ninguna información para GitHubs (suponiendo que tengan uno).GitHub jsonp código fuente api

¿No es así? Si no, entonces fastidiar ...

Respuesta

0

No creo que GitHub tenga una API para extraer el origen de un archivo. Tienen devoluciones de llamada JSONP aunque especificando el devolución de llamada = Funciton después de cualquier llamada a la API (es decir, curl https://api.github.com?callback=foo)

Probablemente se podría utilizar la API de Trees para encontrar los archivos de origen presentes en un repositorio en un determinado commit (HEAD de la rama principal). A continuación, sólo puede adquirir la fuente mediante el uso de la dirección URL de la versión cruda del archivo (es decir, https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/directories.zsh)

3

Un afirma en el GitHub API documentation, cualquier llamada es compatible con el modo de invocación JSONP:

Usted puede enviar un ?callback parámetro a cualquier llamada GET para tener los resultados envueltos en una función JSON. Esto se suele utilizar cuando los navegadores quieren incrustar el contenido de GitHub en páginas web al resolver problemas de dominio cruzado. La respuesta incluye la misma salida de datos que la API normal, más la información relevante del encabezado HTTP.

Si el fin de recuperar la fuente de corriente de un archivo (o cualquier otra versión de la misma), usted tiene que o bien sabe el SHA del Blob va a guardar en. Ver el Git Database API para más información sobre este tema.

Más de una vez, uno no conoce el SHA, pero solo la ruta relativa al archivo en el directorio de trabajo.

A continuación, tendrá que seguir los siguientes pasos

Escoja una confirmación sha de la lista

Recuperar el árbol al que apunta y de forma recursiva una lista de todas las entradas (árboles y Gotas)

Encuentra aquí la gota que coincide con el camino buscado, averiguar su SHA y aplicar primer proceso

+0

¡Esto es tan útil! ¡¡Gracias!! –

8

Existe una API para obtener el contenido de los datos de github. Es parte de v3 github API.

usted hace una petición a

https://api.github.com/repos/{username}/{repository name}/contents/{filepath and name} 

por ejemplo, https://api.github.com/repos/mono/monodevelop/contents/README

A menos que configure el encabezado accept, recibirá de regreso algunos archivos JSON con el contenido del archivo codificado en base64. Tendrás que decodificar esto, algo que es muy fácil en node.js, pero más doloroso en el navegador. Puede encontrar decodificadores base64 en javascript en otras preguntas en stackoverflow con bastante facilidad. Una cosa que hay que notar, el código base64 que obtienes de github tiene caracteres de nueva línea para que se formatee bien y muchos decodificadores base64 no pueden hacer frente a las nuevas líneas, por lo que podrías necesitar eliminarlos o modificar el decodificador.

Probablemente solo desee el contenido y no necesite las otras cosas en el json (como sha y longitud, etc.), para que pueda hacer su vida más fácil configurando el encabezado Aceptar en application/vnd.github.3.raw.

He aquí un ejemplo con la acepta encabezado utilizando rizo:

curl -i https://api.github.com/repos/mono/monodevelop/contents/README --header "Accept: application/vnd.github.3.raw" 

Ahora, si usted está utilizando nodo o rizo, eso es probablemente muy bien, pero si se está ejecutando dentro del navegador, hacer que Necesitaremos usar CORS. Github solo permite el acceso desde hosts que están registrados como aplicaciones OAuth. No es particularmente difícil hacer esto, pero para mi caso de uso (un bookmarketlet), esa no era una opción.

Hay una manera de obtener acceso sin utilizar CORS, y eso es con JSONP, puede agregar, p. ?callback=_processGithubResponse para obtener una salida de javascript adecuada para incluir con una etiqueta de script (que llama a una función llamada _processGithubResponse con la respuesta). Lamentablemente, no puede establecer un encabezado de acepta en eso, por lo que está atascado con la decodificación de base64 en este caso.

Si está utilizando node.js, le recomendaría que use node-github, lo que hace que la API sea un poco más fácil de usar.

+0

no funciona con la versión actual de api – rakesh

Cuestiones relacionadas