API исходного кода GitHub jsonp

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

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


person Paul Knopf    schedule 11.02.2012    source источник


Ответы (5)


Существует API для получения содержимого данных с github. Это часть API github v3.

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

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 и длина и т. д.), поэтому вы можете облегчить себе жизнь, установив для заголовка Accept значение application/vnd.github.3.raw.

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

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

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

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

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

person kybernetikos    schedule 05.02.2013

Согласно документации GitHub API, любой call поддерживает режим вызова JSONP:

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

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

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

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

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

Получить дерево, на которое он указывает, и рекурсивно перечислить каждую запись (деревья и большие двоичные объекты)

Найдите свой Blob, соответствующий искомому пути, узнайте его SHA и примените первый процесс

person nulltoken    schedule 11.02.2012

Это старый вопрос, в настоящее время вы можете получить доступ к источнику через: https://raw.githubusercontent.com

https://raw.githubusercontent.com/ пользователь/репозиторий/ветвь/каталог/файл

например https://raw.githubusercontent.com/sachatrauwaen/OpenContent-Templates/master/Bootstrap3Accordion/schema.json

person Peter    schedule 09.11.2018

У kybernetikos есть отличный ответ, но если вы хотите более быструю и простую настройку, вы также можете попробовать RawGit https://rawgit.com/

Он обслуживает необработанные файлы непосредственно из GitHub с соответствующими заголовками Content-Type. Просто вставьте URL-адрес вашего файла или gist, и он предоставит вам URL-адреса API как для производства, так и для разработки.

person Sia    schedule 20.03.2018

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

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

person Kevin Jalbert    schedule 11.02.2012