summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/wallhaven.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2023-06-19 01:14:28 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2023-06-19 01:14:28 -0400
commit9fb906aeb3816abb42f459d1b67e35024e6f2348 (patch)
tree30b039301c783475c0f4d46b0e0c5ec9851b2567 /gallery_dl/extractor/wallhaven.py
parent8950c0f2ef55ec2ed36b3fccc9fd85b64b877c3b (diff)
New upstream version 1.25.6.upstream/1.25.6
Diffstat (limited to 'gallery_dl/extractor/wallhaven.py')
-rw-r--r--gallery_dl/extractor/wallhaven.py24
1 files changed, 19 insertions, 5 deletions
diff --git a/gallery_dl/extractor/wallhaven.py b/gallery_dl/extractor/wallhaven.py
index 06f1aab..a0fba3c 100644
--- a/gallery_dl/extractor/wallhaven.py
+++ b/gallery_dl/extractor/wallhaven.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-# Copyright 2018-2022 Mike Fährmann
+# Copyright 2018-2023 Mike Fährmann
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
@@ -9,15 +9,16 @@
"""Extractors for https://wallhaven.cc/"""
from .common import Extractor, Message
-from .. import text
+from .. import text, exception
class WallhavenExtractor(Extractor):
"""Base class for wallhaven extractors"""
category = "wallhaven"
+ root = "https://wallhaven.cc"
filename_fmt = "{category}_{id}_{resolution}.{extension}"
archive_fmt = "{id}"
- root = "https://wallhaven.cc"
+ request_interval = 1.4
def __init__(self, match):
Extractor.__init__(self, match)
@@ -246,8 +247,21 @@ class WallhavenAPI():
def _call(self, endpoint, params=None):
url = "https://wallhaven.cc/api" + endpoint
- return self.extractor.request(
- url, headers=self.headers, params=params).json()
+
+ while True:
+ response = self.extractor.request(
+ url, params=params, headers=self.headers, fatal=None)
+
+ if response.status_code < 400:
+ return response.json()
+ if response.status_code == 429:
+ self.extractor.wait(seconds=60)
+ continue
+
+ self.extractor.log.debug("Server response: %s", response.text)
+ raise exception.StopExtraction(
+ "API request failed (%s: %s)",
+ response.status_code, response.reason)
def _pagination(self, endpoint, params=None, metadata=None):
if params is None: