首先,我已经使用 Python 大约几天了,所以我不一定知道最佳实践或所有术语......但是。我通过逆向工程学得最好,下面的代码基于 Harvest 的官方文档和我在 google-fu 中找到的其他内容
我的要求是从 Harvest 下载所有时间条目记录并保存为 JSON(或理想情况下为 CSV 文件)。
这是我改编的代码(包括所有输出,这在最终代码中不是必需的,但对我的学习很方便):
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 文件,我将不胜感激。