Получить содержимое файла из GitHub с помощью Requests и Github API - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь получить содержимое файла из GitHub - используя Python Запросы и GitHub API. Несмотря на то, что содержимое выглядит для меня JSON, когда я проверяю программно, он говорит, что это не формат JSON, и я не могу получить из него данные JSON. Вот что у меня есть (для небольшого подмножества моих URls):

Это два URL-адреса, которые я пробовал, и оба не удаются:

import requests

from requests.exceptions import HTTPError
from json.decoder import JSONDecodeError

myurl = 'https://github.com/bitpod-io/arsenal/blob/a5af2f9bff13d8b6c6592437a19a712edb49ecb0/tests/utils/samplePolicies.json'
myurl = 'https://github.com/yasuhisa1984/achieve/blob/fa6334c484ee9e7c08e2d280fa16ec5bba5f2369/vendor/bundle/gems/fog-aws-1.2.1/lib/fog/aws/iam/default_policy_versions.json'

token = 'mylongtoken'

    try:
        #response = requests.get(myurl, headers={'Authorization': 'token {}'.format(token), 'Accept': 'application/vnd.github.v3.raw'})
        response = requests.get(myurl, headers={'Authorization': 'token {}'.format(token)})

        response.raise_for_status()
    except HTTPError as http_err:
        print(f'HTTP error occurred: {http_err}')
    except Exception as err:
        print(f'Some other error occurred: {err}')
    else:
        print('Success')
        print(response.headers)
        if 'json' in response.headers.get('Content-Type'):
            try:
                resp_json = response.json()
            except JSONDecodeError:
                print(f'Unable to get data in JSON format.')
            else:
                print(resp_json)
        else:
            print('Response content is not in JSON format.')

Может кто-нибудь, пожалуйста, дайте мне знать если я где-то ошибаюсь Я хочу получить содержимое файла в виде текста или json (предпочтительно) с помощью API.

1 Ответ

1 голос
/ 22 февраля 2020

Убедитесь, что вы загружаете с «необработанного» содержимого URL, а не со страницы HTML github. Я считаю, что это URL для необработанного JSON файла, который вы хотите:

https://raw.githubusercontent.com/yasuhisa1984/achieve/master/vendor/bundle/gems/fog-aws-1.2.1/lib/fog/aws/iam/default_policy_versions.json

Следующий код работает для меня с этим URL:

import requests
url = "https://raw.githubusercontent.com/yasuhisa1984/achieve/master/vendor/bundle/gems/fog-aws-1.2.1/lib/fog/aws/iam/default_policy_versions.json"
resp = requests.get(url)
data = resp.json()
...