Python & API: почему я получаю KeyErrors при запуске на python, но значение есть в почтальоне? - PullRequest
0 голосов
/ 11 июня 2019

Я использую приведенный ниже код для возврата необработанных данных json из Harvest, изменив URL-адрес, который я назвал. Я успешно создал запущенные сценарии для 6 файлов, однако у меня возникли проблемы с одним, и я не могу понять, почему ...

import requests, json

AUTH = "Bearer  REDACTED"
ACCOUNT = "REDACTED"

URL = "https://api.harvestapp.com/v2/clients/?"
HEADERS = { "Authorization": AUTH,
            "Harvest-Account-ID": ACCOUNT,
            "Accept":"application/json"}

r = requests.get(url=URL, headers=HEADERS).json()
total_pages = int(r['total_pages'])
total_entries = int(r['total_entries'])

results = []
for x in range(1, total_pages):
    response = requests.get(URL+"page="+str(x), headers=HEADERS)

    data = response.json()
    next_page = data["next_page"]
    results.extend(data["time_entries"])

filepath = "Z:/System Administrator/System Backups/08. Harvest/HARVEST_Clients.json"
with open(filepath, 'w') as outfile:
    json.dump(results, outfile)

print('Done!')
print('Total Pages : '+str(total_pages))
print('Total Entries : '+str(total_entries))

Когда я запускаю вышеупомянутое, это дает мне желаемый результат:
Готово!
Всего страниц: 3
Всего записей: 237

Однако, если япопробуйте использовать URL с переменными даты, я получаю KeyErrors.Все, что я делаю, это изменяю код с:

URL = "https://api.harvestapp.com/v2/clients/?"

на

URL = "https://api.harvestapp.com/v2/time_entries?from=2017-04-01&to=2018-03-31/?"

И переменную results.extend с

results.extend(data["clients"])

на

results.extend(data["time_entries"])

Я получаю сообщение об ошибке

Traceback (последний вызов был последним): файл "Z: \ Системный администратор \ Резервные копии системы \ 08. Harvest \ Scripts \ API_Harvest_Timesheets 2017-18.py",строка 19, в total_pages = int (r ['total_pages']) KeyError: 'total_pages'

Когда я запускаю URL и авторизацию через почтальона, я получаю следующий результат

{
    "time_entries": [FULL DATA RESULT HERE]
    "per_page": 100,
    "total_pages": 138,
    "total_entries": 13711,
    "next_page": 2,
    "previous_page": null,
    "page": 1,
    "links": {
        "first": "https://api.harvestapp.com/v2/time_entries?from=2017-04-01&page=1&per_page=100&to=2018-03-31",
        "next": "https://api.harvestapp.com/v2/time_entries?from=2017-04-01&page=2&per_page=100&to=2018-03-31",
        "previous": null,
        "last": "https://api.harvestapp.com/v2/time_entries?from=2017-04-01&page=138&per_page=100&to=2018-03-31"
    }
}

Итак, я вижу, что значение «total_pages» возвращается из этого URL, а значение равно 138 - так почему этот код не работает для этого конкретного URL-адреса, но работает нормально для других?

...