summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/vsco.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/vsco.py')
-rw-r--r--gallery_dl/extractor/vsco.py37
1 files changed, 31 insertions, 6 deletions
diff --git a/gallery_dl/extractor/vsco.py b/gallery_dl/extractor/vsco.py
index 1c0c172..a53409c 100644
--- a/gallery_dl/extractor/vsco.py
+++ b/gallery_dl/extractor/vsco.py
@@ -38,7 +38,7 @@ class VscoExtractor(Extractor):
if img["is_video"]:
if not videos:
continue
- url = "https://" + img["video_url"]
+ url = text.ensure_http_scheme(img["video_url"])
else:
base = img["responsive_url"].partition("/")[2]
cdn, _, path = base.partition("/")
@@ -63,6 +63,10 @@ class VscoExtractor(Extractor):
"height": img["height"],
"description": img.get("description") or "",
})
+ if data["extension"] == "m3u8":
+ url = "ytdl:" + url
+ data["_ytdl_manifest"] = "hls"
+ data["extension"] = "mp4"
yield Message.Url, url, data
def images(self):
@@ -294,12 +298,33 @@ class VscoImageExtractor(VscoExtractor):
pattern = USER_PATTERN + r"/media/([0-9a-fA-F]+)"
example = "https://vsco.co/USER/media/0123456789abcdef"
- def __init__(self, match):
- VscoExtractor.__init__(self, match)
- self.media_id = match.group(2)
-
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)
media = data["medias"]["byId"].popitem()[1]["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"],
+ },)