[reddit] support video embeds (#8139)
This commit is contained in:
@@ -84,6 +84,12 @@ class RedditExtractor(Extractor):
|
|||||||
text.nameext_from_url(url, submission)
|
text.nameext_from_url(url, submission)
|
||||||
yield Message.Url, url, submission
|
yield Message.Url, url, submission
|
||||||
|
|
||||||
|
elif embeds and "media_metadata" in media:
|
||||||
|
for embed in self._extract_embed(submission):
|
||||||
|
submission["num"] += 1
|
||||||
|
text.nameext_from_url(embed, submission)
|
||||||
|
yield Message.Url, embed, submission
|
||||||
|
|
||||||
elif media["is_video"]:
|
elif media["is_video"]:
|
||||||
if videos:
|
if videos:
|
||||||
text.nameext_from_url(url, submission)
|
text.nameext_from_url(url, submission)
|
||||||
@@ -199,19 +205,26 @@ class RedditExtractor(Extractor):
|
|||||||
return
|
return
|
||||||
|
|
||||||
for mid, data in meta.items():
|
for mid, data in meta.items():
|
||||||
if data["status"] != "valid" or "s" not in data:
|
if data["status"] != "valid":
|
||||||
self.log.warning(
|
self.log.warning(
|
||||||
"embed %s: skipping item %s (status: %s)",
|
"embed %s: skipping item %s (status: %s)",
|
||||||
submission["id"], mid, data.get("status"))
|
submission["id"], mid, data.get("status"))
|
||||||
continue
|
continue
|
||||||
src = data["s"]
|
|
||||||
if url := src.get("u") or src.get("gif") or src.get("mp4"):
|
if src := data.get("s"):
|
||||||
yield url.partition("?")[0].replace("/preview.", "/i.", 1)
|
if url := src.get("u") or src.get("gif") or src.get("mp4"):
|
||||||
else:
|
yield url.partition("?")[0].replace("/preview.", "/i.", 1)
|
||||||
self.log.error(
|
else:
|
||||||
"embed %s: unable to fetch download URL for item %s",
|
self.log.error(
|
||||||
submission["id"], mid)
|
"embed %s: unable to fetch download URL for item %s",
|
||||||
self.log.debug(src)
|
submission["id"], mid)
|
||||||
|
self.log.debug(src)
|
||||||
|
elif url := data.get("dashUrl"):
|
||||||
|
submission["_ytdl_manifest"] = "dash"
|
||||||
|
yield f"ytdl:{url}"
|
||||||
|
elif url := data.get("hlsUrl"):
|
||||||
|
submission["_ytdl_manifest"] = "hls"
|
||||||
|
yield f"ytdl:{url}"
|
||||||
|
|
||||||
def _extract_video_ytdl(self, submission):
|
def _extract_video_ytdl(self, submission):
|
||||||
return "https://www.reddit.com" + submission["permalink"]
|
return "https://www.reddit.com" + submission["permalink"]
|
||||||
|
|||||||
@@ -267,6 +267,14 @@ __tests__ = (
|
|||||||
"#class" : reddit.RedditSubmissionExtractor,
|
"#class" : reddit.RedditSubmissionExtractor,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"#url" : "https://www.reddit.com/user/-frogchamp-/comments/1n260wh/osc_art_request_timelapsespeed_draw_so_far_flash/",
|
||||||
|
"#comment" : "video embed (#8139)",
|
||||||
|
"#class" : reddit.RedditSubmissionExtractor,
|
||||||
|
"#options" : {"api": "rest"},
|
||||||
|
"#results" : "ytdl:https://v.redd.it/link/1n260wh/asset/8q50b220tplf1/DASHPlaylist.mpd?a=1759085227%2CYTU2NGJjNTlmNjBlOGE2NWUwYWI0MjRjZDYzZjllZjk4Nzc3Y2Y4Nzc1NDMzOTBkYTNkOWFjOGMzZjUzZDAzMQ%3D%3D&v=1&f=sd",
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"#url" : "https://i.redd.it/upjtjcx2npzz.jpg",
|
"#url" : "https://i.redd.it/upjtjcx2npzz.jpg",
|
||||||
"#category": ("", "reddit", "image"),
|
"#category": ("", "reddit", "image"),
|
||||||
|
|||||||
Reference in New Issue
Block a user