requires yt-dlp/youtube-dl to handle m3u8 manifests
This commit is contained in:
@@ -1018,7 +1018,7 @@ Consider all listed sites to potentially be NSFW.
|
|||||||
<tr>
|
<tr>
|
||||||
<td>VSCO</td>
|
<td>VSCO</td>
|
||||||
<td>https://vsco.co/</td>
|
<td>https://vsco.co/</td>
|
||||||
<td>Avatars, Collections, Galleries, individual Images, Spaces, User Profiles</td>
|
<td>Avatars, Collections, Galleries, individual Images, Spaces, User Profiles, Videos</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ class VscoExtractor(Extractor):
|
|||||||
if img["is_video"]:
|
if img["is_video"]:
|
||||||
if not videos:
|
if not videos:
|
||||||
continue
|
continue
|
||||||
url = "https://" + img["video_url"]
|
url = img["video_url"]
|
||||||
|
if not url.startswith("ytdl:"):
|
||||||
|
url = "https://" + url
|
||||||
else:
|
else:
|
||||||
base = img["responsive_url"].partition("/")[2]
|
base = img["responsive_url"].partition("/")[2]
|
||||||
cdn, _, path = base.partition("/")
|
cdn, _, path = base.partition("/")
|
||||||
@@ -63,6 +65,9 @@ class VscoExtractor(Extractor):
|
|||||||
"height": img["height"],
|
"height": img["height"],
|
||||||
"description": img.get("description") or "",
|
"description": img.get("description") or "",
|
||||||
})
|
})
|
||||||
|
if data["extension"] == "m3u8":
|
||||||
|
data["_ytdl_manifest"] = "hls"
|
||||||
|
data["extension"] = "mp4"
|
||||||
yield Message.Url, url, data
|
yield Message.Url, url, data
|
||||||
|
|
||||||
def images(self):
|
def images(self):
|
||||||
@@ -294,12 +299,33 @@ class VscoImageExtractor(VscoExtractor):
|
|||||||
pattern = USER_PATTERN + r"/media/([0-9a-fA-F]+)"
|
pattern = USER_PATTERN + r"/media/([0-9a-fA-F]+)"
|
||||||
example = "https://vsco.co/USER/media/0123456789abcdef"
|
example = "https://vsco.co/USER/media/0123456789abcdef"
|
||||||
|
|
||||||
def __init__(self, match):
|
|
||||||
VscoExtractor.__init__(self, match)
|
|
||||||
self.media_id = match.group(2)
|
|
||||||
|
|
||||||
def images(self):
|
def images(self):
|
||||||
url = "{}/{}/media/{}".format(self.root, self.user, self.media_id)
|
url = "{}/{}/media/{}".format(self.root, self.user, self.groups[1])
|
||||||
data = self._extract_preload_state(url)
|
data = self._extract_preload_state(url)
|
||||||
media = data["medias"]["byId"].popitem()[1]["media"]
|
media = data["medias"]["byId"].popitem()[1]["media"]
|
||||||
return (self._transform_media(media),)
|
return (self._transform_media(media),)
|
||||||
|
|
||||||
|
|
||||||
|
class VscoVideoExtractor(VscoExtractor):
|
||||||
|
"""Extractor for vsco.co videos links"""
|
||||||
|
subcategory = "video"
|
||||||
|
pattern = USER_PATTERN + r"/video/([^/?#]+)"
|
||||||
|
example = "https://vsco.co/USER/video/012345678-9abc-def0"
|
||||||
|
|
||||||
|
def images(self):
|
||||||
|
url = "{}/{}/video/{}".format(self.root, self.user, self.groups[1])
|
||||||
|
data = self._extract_preload_state(url)
|
||||||
|
media = data["medias"]["byId"].popitem()[1]["media"]
|
||||||
|
|
||||||
|
return ({
|
||||||
|
"_id" : media["id"],
|
||||||
|
"is_video" : True,
|
||||||
|
"grid_name" : "",
|
||||||
|
"upload_date" : media["createdDate"],
|
||||||
|
"responsive_url": media["posterUrl"],
|
||||||
|
"video_url" : "ytdl:" + media.get("playbackUrl"),
|
||||||
|
"image_meta" : None,
|
||||||
|
"width" : media["width"],
|
||||||
|
"height" : media["height"],
|
||||||
|
"description" : media["description"],
|
||||||
|
},)
|
||||||
|
|||||||
@@ -108,4 +108,24 @@ __tests__ = (
|
|||||||
"video": True,
|
"video": True,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"#url" : "https://vsco.co/shavonec/video/c5eb34bb-dd13-4d7a-a09c-2a7cd719c9fa",
|
||||||
|
"#category": ("", "vsco", "video"),
|
||||||
|
"#class" : vsco.VscoVideoExtractor,
|
||||||
|
"#pattern" : r"ytdl:https://stream\.mux\.com/3o01XbjqTI4rkeRwPzR17H9i7VSFdWX1h\.m3u8\?token=ey.+",
|
||||||
|
|
||||||
|
"date" : "dt:2020-02-04 15:11:52",
|
||||||
|
"description": "Big news: 🎥 YOU CAN NOW POST VIDEOS TO VSCO ⚡️⚡️💪🏾. \n\n🔗BTS from my #FashionIsActivism panel with the California African American Arts museum ✊🏾",
|
||||||
|
"extension" : "mp4",
|
||||||
|
"filename" : "3o01XbjqTI4rkeRwPzR17H9i7VSFdWX1h",
|
||||||
|
"grid" : "",
|
||||||
|
"id" : "c5eb34bb-dd13-4d7a-a09c-2a7cd719c9fa",
|
||||||
|
"meta" : {},
|
||||||
|
"tags" : [],
|
||||||
|
"user" : "shavonec",
|
||||||
|
"video" : True,
|
||||||
|
"width" : 624,
|
||||||
|
"height" : 1232,
|
||||||
|
},
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user