Zenpy 增量导出在 start_date 之前提供票证

问题描述

我正在尝试使用 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,似乎有点错误,但不幸的是它是如何工作的。

来源:https://developer.zendesk.com/documentation/ticketing/managing-tickets/using-the-incremental-export-api/#excluding-system-updated-tickets-time-based-exports

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...