0

我正在尝试使用 Python 中的以下代码行从我的 Clockify 工作区获取所有时间条目:

import boto3
import json
import requests
import pprint

pp = pprint.PrettyPrinter(indent=2)

url = "https://reports.api.clockify.me/v1/workspaces/{workspaceID}/reports/detailed/"

x=list(range(1,5373,1))
for i in x:
  pagenumber=i
  payload1="{\r\n  \"dateRangeStart\": \"2020-12-10T00:00:00.000\",\r\n  \"dateRangeEnd\": \"2021-03-31T23:59:59.000\",\r\n  \"detailedFilter\": {\r\n    \"page\": "
  payload2=f"{pagenumber}"
  payload3=",\r\n    \"pageSize\": 200}\r\n}"
  payload = payload1+payload2+payload3
  headers = {
    'X-Api-Key': {APIKEY},
    'Content-Type': 'application/json'}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

它有效,但我只获得 5373 页中第一页的信息。有什么办法可以更好地循环它们吗?我在那里的for循环似乎无法正常工作。或者,Clockify 可能由于 API 限制而停止了我的请求?我将不胜感激,无论如何我都不是经验丰富的开发人员!

4

1 回答 1

1

看起来您的响应对象和打印命令位于 for 循环之外。这将导致只返回第一页,然后脚本停止而不是循环遍历所有页面。

for i in x:
  pagenumber=i
  payload1="{\r\n  \"dateRangeStart\": \"2020-12-10T00:00:00.000\",\r\n  \"dateRangeEnd\": \"2021-03-31T23:59:59.000\",\r\n  \"detailedFilter\": {\r\n    \"page\": "
  payload2=f"{pagenumber}"
  payload3=",\r\n    \"pageSize\": 200}\r\n}"
  payload = payload1+payload2+payload3
  headers = {
    'X-Api-Key': {APIKEY},
    'Content-Type': 'application/json'}

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)

Clockify 在 JSON 响应的“totals”对象中返回一个“entriesCount”字段。我建议使用它来计算您的页面,而不是对页面进行硬编码,因为时间表条目是快速创建的,因此虽然您现在可能有 5373 个页面,但当我键入此内容时,它很可能会更多。

于 2021-04-15T00:02:18.373 回答