GitHub jsonp исходный код API - PullRequest
       7

GitHub jsonp исходный код API

7 голосов
/ 11 февраля 2012

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

Разве нет?Если нет, то облом ...

Ответы [ 5 ]

11 голосов
/ 06 февраля 2013

Существует API для получения содержимого данных с 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

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

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

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

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

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

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

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

3 голосов
/ 11 февраля 2012

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

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

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

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

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

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

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

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

Найдите ваш BLOB-объект, соответствующий искомому пути, выясните его SHA и примените первый процесс

0 голосов
/ 09 ноября 2018

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

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

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

0 голосов
/ 20 марта 2018

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

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

0 голосов
/ 11 февраля 2012

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

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

...