diff --git a/gallery_dl/extractor/tiktok.py b/gallery_dl/extractor/tiktok.py
index a87bd7b4..54320eb2 100644
--- a/gallery_dl/extractor/tiktok.py
+++ b/gallery_dl/extractor/tiktok.py
@@ -6,7 +6,6 @@
"""Extractors for https://www.tiktok.com/"""
-from json.decoder import JSONDecodeError
from .common import Extractor, Message
from .. import text, util, ytdl, exception
@@ -101,26 +100,26 @@ class TiktokExtractor(Extractor):
def _sanitize_url(self, url):
return text.ensure_http_scheme(url.replace("/photo/", "/video/", 1))
- def _extract_rehydration_data(self, url, *, retries=None):
- if retries is None:
- retries = self._retries
- try:
- html = self.request(url).text
- data = text.extr(
- html, '')
- return util.json_loads(data)["__DEFAULT_SCOPE__"]
- except JSONDecodeError:
- # We failed to retrieve rehydration data. This happens relatively
- # frequently when making many requests, so retry.
- self.log.warning("%s: Failed to retrieve rehydration data, trying "
- "%d more time%s and delaying for %d second(s)",
- url, retries, "" if retries == 1 else "s",
- self._timeout)
- self.sleep(self._timeout, "retry")
- if retries > 0:
- return self._extract_rehydration_data(url, retries=retries-1)
- raise
+ def _extract_rehydration_data(self, url):
+ tries = 0
+ while True:
+ try:
+ html = self.request(url).text
+ data = text.extr(
+ html, '')
+ return util.json_loads(data)["__DEFAULT_SCOPE__"]
+ except ValueError:
+ # We failed to retrieve rehydration data. This happens
+ # relatively frequently when making many requests, so
+ # retry.
+ tries += 1
+ self.log.warning("%s: Failed to retrieve rehydration data "
+ "(%s/%s)", url.rpartition("/")[2], tries,
+ self._retries)
+ self.sleep(self._timeout, "retry")
+ if tries >= self._retries:
+ raise
def _extract_audio(self, post):
audio = post["music"]