Как получить необработанный контент напрямую с api.github.com (или raw.githubusercontent.com)

Прежде всего, обратите внимание на новые изменения API:https://developer.github.com/changes/2020-02-10-deprecating-auth-through-query-param/

Проблема, кажется, что я должен обменять GitHub личного маркера доступа для временных маркеров, для того, чтобы читать из raw.githubusercontent.com.

У меня есть информация о запросе:

set -e
export github_personal_access_token=a8f464fdxxxxxxxxxxxxxxxxxxxxxxfb89e6be
export file_url="https://api.github.com/repos/oresoftware/live-mutex/contents/package.json?ref=master"
mkdir tmp && cd tmp
curl -H "Authorization: token $github_personal_access_token" "$file_url"  2> err.log > output.json

output.json выглядит так:

{
  "name": "package.json",
  "path": "package.json",
  "sha": "6a2d55983bb641ff217d822d8e60dbb6c8f85ea3",
  "size": 1343,
  "url": "https://api.github.com/repos/ORESoftware/live-mutex/contents/package.json?ref=master",
  "html_url": "https://github.com/ORESoftware/live-mutex/blob/master/package.json",
  "git_url": "https://api.github.com/repos/ORESoftware/live-mutex/git/blobs/6a2d55983bb641ff217d822d8e60dbb6c8f85ea3",
  "download_url": "https://raw.githubusercontent.com/ORESoftware/live-mutex/master/package.json",
  "type": "file",
  "content": "ewogICJuYW1lIjogImxpdmUtbXV0ZXgiLAogICJ2ZXJzaW9uIjogIjAuMi4y\nNCIsCiAgImRlc2NyaXB0aW9uIjogIlNpbXBsZSBtdXRleCB0aGF0IHVzZXMg\nYSBUQ1Agc2VydmVyOyB1c2VmdWwgaWYgeW91IGNhbm5vdCBpbnN0YWxsIFJl\nZGlzLCBldGMuIiwKICAibWFpbiI6ICJkaXN0L21haW4uanMiLAogICJ0eXBp\nbmdzIjogImRpc3QvbWFpbi5kLnRzIiwKICAidHlwZXMiOiAiZGlzdC9tYWlu\nLmQudHMiLAogICJiaW4iOiB7CiAgICAibG14X2FjcXVpcmVfbG9jayI6ICJh\nc3NldHMvY2xpL2FjcXVpcmUuanMiLAogICAgImxteF9yZWxlYXNlX2xvY2si\nOiAiYXNzZXRzL2NsaS9yZWxlYXNlLmpzIiwKICAgICJsbXhfaW5zcGVjdF9i\ncm9rZXIiOiAiYXNzZXRzL2NsaS9pbnNwZWN0LmpzIiwKICAgICJsbXhfbGF1\nbmNoX2Jyb2tlciI6ICJhc3NldHMvY2xpL3N0YXJ0LXNlcnZlci5qcyIsCiAg\nICAibG14X3N0YXJ0X3NlcnZlciI6ICJhc3NldHMvY2xpL3N0YXJ0LXNlcnZl\nci5qcyIsCiAgICAibG14X2xzIjogImFzc2V0cy9jbGkvbHMuanMiLAogICAg\nImxteCI6ICJhc3NldHMvbG14LnNoIgogIH0sCiAgInNjcmlwdHMiOiB7CiAg\nICAidGVzdCI6ICIuL3NjcmlwdHMvdGVzdC5zaCIsCiAgICAicG9zdGluc3Rh\nbGwiOiAiLi9hc3NldHMvcG9zdGluc3RhbGwuc2giCiAgfSwKICAicjJnIjog\newogICAgInRlc3QiOiAiLi90ZXN0L3NldHVwLXRlc3Quc2ggJiYgc3VtYW4g\nLS1kZWZhdWx0IgogIH0sCiAgInJlcG9zaXRvcnkiOiB7CiAgICAidHlwZSI6\nICJnaXQiLAogICAgInVybCI6ICJnaXQraHR0cHM6Ly9naXRodWIuY29tL09S\nRVNvZnR3YXJlL2xpdmUtbXV0ZXguZ2l0IgogIH0sCiAgImF1dGhvciI6ICJP\nbGVnemFuZHIgVkQiLAogICJsaWNlbnNlIjogIk1JVCIsCiAgImJ1Z3MiOiB7\nCiAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9PUkVTb2Z0d2FyZS9s\naXZlLW11dGV4L2lzc3VlcyIKICB9LAogICJob21lcGFnZSI6ICJodHRwczov\nL2dpdGh1Yi5jb20vT1JFU29mdHdhcmUvbGl2ZS1tdXRleCNyZWFkbWUiLAog\nICJkZXBlbmRlbmNpZXMiOiB7CiAgICAiQG9yZXNvZnR3YXJlL2pzb24tc3Ry\nZWFtLXBhcnNlciI6ICIwLjAuMTI0IiwKICAgICJAb3Jlc29mdHdhcmUvbGlu\na2VkLXF1ZXVlIjogIjAuMS4xMDYiLAogICAgImNoYWxrIjogIl4yLjQuMiIs\nCiAgICAidGNwLXBpbmciOiAiXjAuMS4xIiwKICAgICJ1dWlkIjogIl4zLjMu\nMiIKICB9LAogICJkZXZEZXBlbmRlbmNpZXMiOiB7CiAgICAiQHR5cGVzL25v\nZGUiOiAiXjEwLjEuMiIsCiAgICAiQHR5cGVzL3RjcC1waW5nIjogIl4wLjEu\nMCIsCiAgICAiQHR5cGVzL3V1aWQiOiAiXjMuNC4zIgogIH0KfQo=\n",
  "encoding": "base64",
  "_links": {
    "self": "https://api.github.com/repos/ORESoftware/live-mutex/contents/package.json?ref=master",
    "git": "https://api.github.com/repos/ORESoftware/live-mutex/git/blobs/6a2d55983bb641ff217d822d8e60dbb6c8f85ea3",
    "html": "https://github.com/ORESoftware/live-mutex/blob/master/package.json"
  }
}

но мне просто нужно необработанное содержимое файла, а не метаданные. Метаданные действительно дают мне ссылку на необработанный контент:

https://raw.githubusercontent.com/ORESoftware/live-mutex/master/package.json

но для частных репозиториев требуется токен доступа. Так есть ли более простой способ сделать это, кроме этого?

curl -H "Authorization: token $github_personal_access_token" "$file_url"  | 
  jq -r '.content' | base64 -d > output.json

как я уже сказал, самая большая проблема в том, что у меня нет действующего access_token в руке, и я могу получить токен доступа для загрузки файла с download_url, но это требует дополнительных шагов сценария. Ищу единственную команду. AKA, я не хочу устанавливатьjq в образе докера, если возможно.

1 ответ

GitHub поддерживает различные типы мультимедиа, чтобы указать, что клиент хочет принять. В вашем случае вы можете получить необработанный файл следующим образом:

curl -H "Accept: application/vnd.github.v3.raw" \
     -H "Authorization: token $github_personal_access_token" \
     "$file_url"  2> err.log > output.json
Другие вопросы по тегам