0

我编写了一个小脚本来根据提供的票证 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
4

1 回答 1

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 可以捕捉到这一点。这很可能会避免过多的调用。您的代码将需要更长的时间才能运行,但不会达到速率限制。

于 2019-05-02T15:34:17.927 回答