From 0629fe8fa497fc71b6555ac7a2ac48a04dd0fca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Wed, 11 Dec 2019 23:57:56 +0100 Subject: [PATCH] =?UTF-8?q?[vsco]=20fix=20user=20profile=20extraction=20?= =?UTF-8?q?=E2=80=A6=20again?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Given the pattern from last time, collections will also change in due time and use cursor-based pagination. --- gallery_dl/extractor/vsco.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/gallery_dl/extractor/vsco.py b/gallery_dl/extractor/vsco.py index 992216fe..ed8d7f15 100644 --- a/gallery_dl/extractor/vsco.py +++ b/gallery_dl/extractor/vsco.py @@ -66,10 +66,20 @@ class VscoExtractor(Extractor): while True: data = self.request(url, params=params, headers=headers).json() - if not data.get(key): + medias = data.get(key) + if not medias: return - yield from data[key] - params["page"] += 1 + + if "cursor" in params: + for media in medias: + yield media[media["type"]] + cursor = data.get("next_cursor") + if not cursor: + return + params["cursor"] = cursor + else: + yield from medias + params["page"] += 1 @staticmethod def _transform_media(media): @@ -102,13 +112,19 @@ class VscoUserExtractor(VscoExtractor): tkn = data["users"]["currentUser"]["tkn"] sid = str(data["sites"]["siteByUsername"][self.user]["site"]["id"]) + site = data["medias"]["bySiteId"][sid] + + url = "{}/api/3.0/medias/profile".format(self.root) + params = { + "site_id" : sid, + "limit" : "14", + "show_only": "0", + "cursor" : site["nextCursor"], + } - url = "{}/api/2.0/medias".format(self.root) - params = {"page": 2, "size": "30", "site_id": sid} return self._pagination(url, params, tkn, "media", ( - data["medias"]["byId"][mid]["media"] - for mid in data - ["medias"]["bySiteId"][sid]["byPage"]["1"]["mediaIds"] + data["medias"]["byId"][media[media["type"]]]["media"] + for media in site["medias"] ))