前提
Imgur の API を利用していますが、レート制限に達していないと思われるにも関わらず429 Too Many Requestsが返されます。
なにか問題は考えられますか?
レスポンス
json
1{ 2 "errors": [ 3 { 4 "id": "legacy-api-86869d4c8c-f755t/Wtq1naVA0s-051815", 5 "code": "429", 6 "status": "Too Many Requests", 7 "detail": "Too Many Requests" 8 } 9 ] 10}
レスポンスヘッダ
json
1{ 2 "Connection": "keep-alive", 3 "Content-Length": "142", 4 "Content-Type": "application/vnd.imgur.v1+json", 5 "Content-Encoding": "gzip", 6 "Imgur-Media-Type": "imgur.v1; param=full; format=json", 7 "X-Post-Rate-Limit-Limit": "1250", 8 "X-Post-Rate-Limit-Remaining": "1204", 9 "X-Post-Rate-Limit-Reset": "2788", 10 "X-Ratelimit-Clientlimit": "12500", 11 "X-Ratelimit-Clientremaining": "12450", 12 "X-Ratelimit-Clientreset": "83609", 13 "X-Ratelimit-Userlimit": "500", 14 "X-Ratelimit-Userremaining": "449", 15 "X-Ratelimit-Userreset": "660", 16 "Accept-Ranges": "bytes", 17 "Date": "Fri, 16 Dec 2022 19:38:15 GMT", 18 "X-Served-By": "cache-bur-kbur8200048-BUR", 19 "X-Cache": "MISS", 20 "X-Cache-Hits": "0", 21 "X-Timer": "S1671219495.314450,VS0,VE263", 22 "access-control-allow-methods": "GET, PUT, POST, PATCH, DELETE, OPTIONS", 23 "Server": "cat factory 1.0", 24 "Access-Control-Allow-Origin": "*", 25 "Access-Control-Allow-Credentials": "true", 26 "X-Frame-Options": "DENY", 27 "Access-Control-Allow-Headers": "Authorization, Content-Type, Accept, X-Mashape-Authorization, IMGURPLATFORM, IMGURUIDJAFO, sessionCount, IMGURMWBETA, IMGURMWBETAOPTIN, X-expSNKPK127, X-Imgur-Defender-Bypass" 28}
プログラムは以下の関数を単純にfor文で回して画像を50枚ほどアップロードしようとしています。
アップロードに使った関数
Python
1 def upload_url(self, libkey, src_link) -> str: 2 res = requests.post( 3 'https://api.imgur.com/3/upload', 4 data={'image': src_link, 'type': 'url'}, 5 headers={'Authorization': 'Client-ID ' + self.client_id} 6 ) 7 decode_res = res.json() 8 try: 9 status = decode_res['status'] 10 if not status // 100 == 2: 11 raise RuntimeError() 12 except (KeyError, RuntimeError): 13 log_path = 'error_' + datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + '.json' 14 with open(log_path, 'wb') as f: 15 f.write(res.content) 16 log_path2 = 'res_header_' + datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + '.json' 17 with open(log_path2, 'w') as f: 18 json.dump(dict(res.headers), f, indent=4, ensure_ascii=False) 19 raise RuntimeError(f"upload error. see {log_path} and {log_path2}") 20 21 data = decode_res['data'] 22 self.library[libkey] = {} 23 self.library[libkey]['id'] = data['id'] 24 self.library[libkey]['deletehash'] = data['deletehash'] 25 self.library[libkey]['link'] = data['link'] 26 self.library[libkey]['datetime'] = data['datetime'] 27 28 with open(self.savedata_path, 'w') as f: 29 json.dump({'library': self.library}, f, indent=4, ensure_ascii=False) 30 31 return data['link']

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。