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