有没有使用zenpy编写此API调用脚本的更有效方法?

时间:2019-05-02 15:20:07

标签: python-3.x zendesk zendesk-api

我编写了一个小脚本,用于根据提供的票证ID列表查询Zendesk API的票证注释。

我对使用此模块只有很少的经验,并且想确保我的循环方法调用API的次数最少。我一直在寻找最高的性能,我直觉我的迭代循环并不是实现此目的的最佳方法。

我已经查看了zenpy文档以及Zendesk API指南,并在zenpy中实施了主动速率限制,以避免达到速率限制。我也将侧载视为防止过多API调用的一种方式,但无法清楚地辨别如何在我的代码中实现它:(

import zenpy, datetime, zdcreds

zenpy_client = zenpy.Zenpy(proactive_ratelimit=700, **zdcreds.creds)

#later this will pull from a csv or excel range
ticket_list = [799380, 805404] 

pre_df = {'ticket_id':[], 'comment_text':[], 'author_id':[]}

for t in ticket_list:
    for comment in zenpy_client.tickets.comments(ticket=t):
        pre_df['ticket_id'].append(t)
        pre_df['comment_text'].append(comment.body)
        pre_df['author_id'].append(comment.author)

#will output data to file

1 个答案:

答案 0 :(得分:0)

我以前从未使用过zenpy,但是从我的经验中我可以分享,当调用API或抓取网站时,第一个好的方法是在每次调用之间增加睡眠时间。因此,以您的代码为例,可能是这样的:

import zenpy, datetime, zdcreds, time, random

zenpy_client = zenpy.Zenpy(proactive_ratelimit=700, **zdcreds.creds)

#later this will pull from a csv or excel range
ticket_list = [799380, 805404] 

pre_df = {'ticket_id':[], 'comment_text':[], 'author_id':[]}

for t in ticket_list:
    for comment in zenpy_client.tickets.comments(ticket=t):
        pre_df['ticket_id'].append(t)
        pre_df['comment_text'].append(comment.body)
        pre_df['author_id'].append(comment.author)
        time.sleep(random.randint(2,5))


#will output data to file

因此,这将在代码中添加2-5秒之间的随机睡眠时间。您可以测试一些数字,看看哪个数字在避免速率限制方面做得更好。您还可以使睡眠时间保持恒定,但是我认为某些API可以解决这一问题。这很可能避免过多的通话。您的代码需要更长的时间才能运行,但不会达到速率限制。