问题描述
我正在尝试使用 zenpy 获取有关上周创建或修改的票证的信息。这是我正在使用的代码:
stream_status = False #Exit condition
while(stream_status==False):
print(start_date)
all_tickets = zendesk.tickets.incremental(start_time=start_date,include=['users','organizations'])
print(len(all_tickets))
print(all_tickets.end_time)
for ticket in all_tickets:
#grab ticket fields and store them in a Dataframe
df.loc[len(df)] = [ticket_id,created_at,requester,organization,product,subject,assignee,status,priority,opened_at,opened_by,solved_at,solved_by,closed_at,closed_by]
count +=1
print(count,ticket_id)
start_date = all_tickets.end_time
stream_status = all_tickets.end_of_stream
print(start_date,stream_status)
today = datetime.Now().strftime("%Y%m%d%H%M")
df.to_excel('Ticket_report{0}.xlsx'.format(today))
现在这里有几个问题。日期计算正确,确实是 7 天前。但是我得到的票至少可以追溯到四月,而且从那以后它们绝对没有被修改过。我在这一点上停止了它,因为我们有数千张票。 此外,增量方法最多返回 1000 个票证对象,但即使在 1000 个之后,循环似乎也不会重新启动(最后的打印语句不会触发)。我不确定我是否正确使用了 stream_status 标志。任何建议都非常受欢迎。谢谢!
可以在此处找到有关增量的 Zenpy 文档:http://docs.facetoe.com.au/zenpy.html#incremental-exports
解决方法
毕竟是 API 问题。
对于任何面临类似问题的人,结果是将开始日期与 generate_timestamp 而不是 updated_at 或 created_at 字段进行比较。 Updated_at 保存生成票证事件(例如更改)的最后一个操作,但即使是系统,每次票证受到影响时也会更新generated_timestamp。这会导致获取在输入日期之前更新或创建的票证。一个解决方案是在调用后过滤掉结果:
all_tickets = zendesk_client.incremental(start_time=start_date)
accurate_tickets = [ticket for ticket in all tickets if parser.parse(ticket.updated_at) > start_date]
不太清楚他们为什么设计这样的 API,似乎有点错误,但不幸的是它是如何工作的。