Как получить сырой контент напрямую с api.github.com (или raw.githubusercontent.com) - PullRequest
1 голос
/ 30 апреля 2020

Прежде всего, пожалуйста, обратите внимание на новые изменения 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

вывод. 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, но это требует дополнительных шагов сценария. Ищу одну команду. АКА, я не хочу устанавливать jq в docker образе, если это возможно.

1 Ответ

0 голосов
/ 02 мая 2020

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

curl -H "Accept: application/vnd.github.v3.raw" \
     -H "Authorization: token $github_personal_access_token" \
     "$file_url"  2> err.log > output.json
...