【问题标题】:Is there a more efficient way to script this API call using zenpy?有没有更有效的方法来使用 zenpy 编写这个 API 调用的脚本?
【发布时间】:2019-05-02 23:34:17
【问题描述】:

我编写了一个小脚本来根据提供的票证 ID 列表查询 Zendesk API 的票证 cmets。

我对使用这个模块只有一点经验,想确保我的循环方法调用 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

【问题讨论】:

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


    【解决方案1】:

    我以前从未使用过 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-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多