2012-02-11 3 views
7

Есть ли у GitHub jsonp api для источника файла? Я знаю, что у BitBucket есть, но я не могу найти никакой информации для GitHubs (если у них есть).GitHub jsonp исходный код api

Не так ли? Если нет, то bummer ...

ответ

0

Я не думаю, что у GitHub есть API для извлечения источника файла. У них действительно есть JSONP обратных вызовов, хотя, указав обратного вызова = Funciton после любого API вызова (т.е. curl https://api.github.com?callback=foo)

Вы могли бы, вероятно, использовать Trees API, чтобы найти исходные файлы, присутствующие в хранилище на определенном обязательстве (глава ведущая ветка). Тогда вы можете просто приобрести источник, используя URL-адрес для необработанной версии файла (то есть, https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/directories.zsh)

3

Заявленных в GitHub API documentation, любой вызов поддерживает режим invokation JSONP:

Вы может отправить параметр ?callback любому вызову GET, чтобы получить результаты, завернутые в функцию JSON. Это обычно используется, когда браузеры хотят встраивать контент GitHub в веб-страницы, обойдя проблемы с перекрестными доменами. Ответ включает в себя тот же вывод данных, что и обычный API, а также соответствующую информацию заголовка HTTP.

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

Более чем часто один из них не знает SHA, а только относительный путь к файлу в рабочем каталоге.

Тогда вы должны выполнить следующие шаги

Выберите коммит ша из списка

  • Синтаксис: GET/репо /: пользователь /: репо/мерзавец/совершающей
  • Пример:https://api.github.com/repos/git/git/commits Чтобы получить список коммитов проекта Git

Получить дерево он указывает и рекурсивно перечислить все записи (Деревья и BLOB)

Найдите кляксу соответствия найденного пути, найти свой алгоритм SHA и применить первый процесс

+0

Это очень полезно! Спасибо!! –

8

Существует АНИ, чтобы получить содержимое данных от github. Это часть v3 github API.

Вы делаете запрос на

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

например https://api.github.com/repos/mono/monodevelop/contents/README

Если вы не установили заголовок accepts, вы получите обратно некоторый JSON с содержимым файла, закодированным в base64. Вам придется декодировать это, что очень просто в node.js, но больше боли в браузере. Вы легко можете найти декодеры base64 в javascript в других вопросах на stackoverflow. Одно замечание: код base64, который вы возвращаете из github, имеет символы новой строки в нем, чтобы сделать его форматированным, и многие декодеры base64 не могут справиться с новыми символами, поэтому вам может потребоваться удалить их или изменить декодер.

Возможно, вы просто хотите получить контент и не нуждаетесь в другом материале в json (например, sha и length и т. Д.), Чтобы упростить вашу жизнь, установив заголовок Accept на application/vnd.github.3.raw.

Вот пример с принимает заголовок с помощью завиток:

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

Теперь, если вы используете узел или завиток, который, вероятно, хорошо, но если вы работаете в браузере, чтобы сделать вас нужно будет использовать CORS. Github разрешает доступ только с хостов, зарегистрированных в OAuth Applications. Это не особенно сложно сделать, но для моей usecase (bookmarketlet) это не вариант.

Существует способ получить доступ без использования CORS, и это с помощью JSONP, вы можете добавить, например, ?callback=_processGithubResponse, чтобы получить вывод javascript, подходящий для включения с тегом скрипта (который вызывает функцию с именем _processGithubResponse с ответом). К сожалению, вы не можете установить заголовок accepts, поэтому в этом случае вы застряли с декодированием base64.

Если вы используете node.js, я бы порекомендовал вам использовать node-github, что делает API несколько проще в использовании.

+0

не работает с текущей версией api – rakesh

Смежные вопросы