我正在尝试创建一个脚本,该脚本将允许我使用python中的CrossRefApi下载特定期刊的所有pdf文章。有用。但是我似乎对速率限制间隔/限制限制有问题,因为我收到了很多文件,其中说我已经超出了配额。我不明白的是这是如何工作的。我正在使用的脚本如下:
import requests
from crossref.restful import Journals, Etiquette
def main():
headers = {"CR-Clickthrough-Client-Token": "XXXXXXXXXXXXXXXXXXX", 'X-Rate-Limit-Interval': '10s', 'X-Rate-Limit-Limit': '50'}
my_etiquette = Etiquette('jEFF analysis', '0.1', 'n/a', 's.h.young@brighton.ac.uk') # edit this to be your details
journals = Journals(etiquette=my_etiquette)
jeff = journals.query("Ecology of Freshwater Fish")
issns = {issn for journal in jeff for issn in journal["ISSN"]}
i = 1
for issn in issns:
for article in journals.works(issn).filter(has_full_text='true'):
res = requests.get(article["link"][0]["URL"], headers=headers)
filename = "out/%d_out.pdf" % i
with open(filename, "w") as f:
f.write(res.content)
i+=1
if __name__ == "__main__":
main()
我尝试了最长15分钟(“ 15m”)的速率限制间隔,但这实际上导致前100个左右文件的配额速率超出消息。我知道速率限制间隔是查询API的时间-因此2s(限制间隔)到50(限制限制)将是2s内的50个查询。也许我错了。如果有人可以帮助我理解它应该如何工作,我将不胜感激。