Прежде всего, я работал с Python около двух дней, поэтому я не обязательно знаю лучшие практики или всю терминологию ... пока. Я лучше учусь с помощью обратного инжиниринга, и мой код ниже основан на официальной документации от Harvest и других битах, которые я нашел с google-fu
Мой запрос состоит в том, чтобы загрузить все записи записей времени из Harvest и сохранить их в формате JSON (или, в идеале, в формате CSV).
Официальный пример Python от Harvest Git Hub
Это мой адаптированный код (включая все выходные данные, которые не будут необходимы в конечном коде, но пригодны для моего обучения):
import requests, json, urllib.request
#Set variables for authorisation
AUTH = "REDACTED"
ACCOUNT = "REDACTED"
URL = "https://api.harvestapp.com/v2/time_entries"
HEADERS = { "Authorization": AUTH,
"Harvest-Account-ID": ACCOUNT}
PAGENO = str("5")
request = urllib.request.Request(url=URL+"?page="+PAGENO, headers=HEADERS)
response = urllib.request.urlopen(request, timeout=5)
responseBody = response.read().decode("utf-8")
jsonResponse = json.loads(responseBody)
# Find the values for pagination
parsed = json.loads(responseBody)
links_first = parsed["links"]["first"]
links_last = parsed["links"]["last"]
links_next = parsed["links"]["next"]
links_previous = parsed["links"]["previous"]
nextpage = parsed["next_page"]
page = parsed["page"]
perpage = parsed["per_page"]
prevpage = parsed["previous_page"]
totalentries = parsed["total_entries"]
totalpages = parsed["total_pages"]
#Print the output
print(json.dumps(jsonResponse, sort_keys=True, indent=4))
print("first link : " + links_first)
print("last link : " + links_last)
print("next page : " + str(nextpage))
print("page : " + str(page))
print("per page : " + str(perpage))
print("total records : " + str(totalentries))
print("total pages : " + str(totalpages))
Выходной ответ
«Сжатый текст (5816 строк)»
первая ссылка: https://api.harvestapp.com/v2/time_entries?page=1&per_page=100
последняя ссылка: https://api.harvestapp.com/v2/time_entries?page=379&per_page=100
следующая страница: 6
страница: 5
на странице: 100
всего записей: 37874
всего страниц: 379
Может, кто-нибудь посоветует лучший способ перебрать страницы, чтобы сформировать один файл JSON?
Если вы также можете посоветовать лучший способ, то выведите этот JSON-файл, я был бы очень признателен.