summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/reddit.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/reddit.py')
-rw-r--r--gallery_dl/extractor/reddit.py33
1 files changed, 27 insertions, 6 deletions
diff --git a/gallery_dl/extractor/reddit.py b/gallery_dl/extractor/reddit.py
index cb70fe5..9c6892a 100644
--- a/gallery_dl/extractor/reddit.py
+++ b/gallery_dl/extractor/reddit.py
@@ -57,12 +57,8 @@ class RedditExtractor(Extractor):
yield Message.Url, url, submission
elif "gallery_data" in submission:
- meta = submission["media_metadata"]
- items = submission["gallery_data"]["items"]
- for submission["num"], item in enumerate(items, 1):
- url = meta[item["media_id"]]["s"]["u"]
- url = url.partition("?")[0]
- url = url.replace("/preview.", "/i.", 1)
+ for submission["num"], url in enumerate(
+ self._extract_gallery(submission), 1):
text.nameext_from_url(url, submission)
yield Message.Url, url, submission
@@ -118,6 +114,22 @@ class RedditExtractor(Extractor):
def submissions(self):
"""Return an iterable containing all (submission, comments) tuples"""
+ def _extract_gallery(self, submission):
+ if submission["gallery_data"] is None:
+ self.log.warning("gallery '%s' was deleted", submission["id"])
+ return
+
+ meta = submission["media_metadata"]
+ for item in submission["gallery_data"]["items"]:
+ src = meta[item["media_id"]]["s"]
+ url = src.get("u") or src.get("gif") or src.get("mp4")
+ if url:
+ yield url.partition("?")[0].replace("/preview.", "/i.", 1)
+ else:
+ self.log.error("Unable to get download URL for item '%s'",
+ item["media_id"])
+ self.log.debug(src)
+
class RedditSubredditExtractor(RedditExtractor):
"""Extractor for URLs from subreddits on reddit.com"""
@@ -188,6 +200,15 @@ class RedditSubmissionExtractor(RedditExtractor):
"content": "1e7dde4ee7d5f4c4b45749abfd15b2dbfa27df3f",
"count": 3,
}),
+ # deleted gallery (#953)
+ ("https://www.reddit.com/gallery/icfgzv", {
+ "count": 0,
+ }),
+ # animated gallery items (#955)
+ ("https://www.reddit.com/r/araragi/comments/ib32hm", {
+ "pattern": r"https://i\.redd\.it/\w+\.gif",
+ "count": 2,
+ }),
("https://old.reddit.com/r/lavaporn/comments/2a00np/"),
("https://np.reddit.com/r/lavaporn/comments/2a00np/"),
("https://m.reddit.com/r/lavaporn/comments/2a00np/"),