[pixiv] implement 'metadata-bookmark' option (#3417)

pull/3532/head
Mike Fährmann 2 years ago
parent 0895e6afee
commit 362cd6991b
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -2168,6 +2168,17 @@ Description
It is possible to use ``"all"`` instead of listing all values separately. It is possible to use ``"all"`` instead of listing all values separately.
extractor.pixiv.refresh-token
-----------------------------
Type
``string``
Description
The ``refresh-token`` value you get
from running ``gallery-dl oauth:pixiv`` (see OAuth_) or
by using a third-party tool like
`gppt <https://github.com/eggplants/get-pixivpy-token>`__.
extractor.pixiv.metadata extractor.pixiv.metadata
------------------------ ------------------------
Type Type
@ -2178,6 +2189,20 @@ Description
Fetch extended ``user`` metadata. Fetch extended ``user`` metadata.
extractor.pixiv.metadata-bookmark
---------------------------------
Type
``bool``
Default
``false``
Description
For works bookmarked by
`your own account <extractor.pixiv.refresh-token_>`__,
fetch bookmark tags as ``tags_bookmark`` metadata.
Note: This requires 1 additional API call per bookmarked post.
extractor.pixiv.work.related extractor.pixiv.work.related
---------------------------- ----------------------------
Type Type
@ -2309,7 +2334,7 @@ Description
Retrieve additional comments by resolving the ``more`` comment Retrieve additional comments by resolving the ``more`` comment
stubs in the base comment tree. stubs in the base comment tree.
This requires 1 additional API call for every 100 extra comments. Note: This requires 1 additional API call for every 100 extra comments.
extractor.reddit.date-min & .date-max extractor.reddit.date-min & .date-max

@ -237,6 +237,7 @@
"refresh-token": null, "refresh-token": null,
"include": "artworks", "include": "artworks",
"metadata": false, "metadata": false,
"metadata-bookmark": false,
"tags": "japanese", "tags": "japanese",
"ugoira": true "ugoira": true
}, },

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright 2014-2022 Mike Fährmann # Copyright 2014-2023 Mike Fährmann
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as # it under the terms of the GNU General Public License version 2 as
@ -45,7 +45,8 @@ class PixivExtractor(Extractor):
work["tags"] = [tag["name"] for tag in work["tags"]] work["tags"] = [tag["name"] for tag in work["tags"]]
ratings = {0: "General", 1: "R-18", 2: "R-18G"} ratings = {0: "General", 1: "R-18", 2: "R-18G"}
userdata = self.config("metadata") meta_user = self.config("metadata")
meta_bookmark = self.config("metadata-bookmark")
metadata = self.metadata() metadata = self.metadata()
works = self.works() works = self.works()
@ -61,8 +62,12 @@ class PixivExtractor(Extractor):
del work["image_urls"] del work["image_urls"]
del work["meta_pages"] del work["meta_pages"]
if userdata: if meta_user:
work.update(self.api.user_detail(work["user"]["id"])) work.update(self.api.user_detail(work["user"]["id"]))
if meta_bookmark and work["is_bookmarked"]:
detail = self.api.illust_bookmark_detail(work["id"])
work["tags_bookmark"] = [tag["name"] for tag in detail["tags"]
if tag["is_registered"]]
if transform_tags: if transform_tags:
transform_tags(work) transform_tags(work)
work["num"] = 0 work["num"] = 0
@ -398,6 +403,8 @@ class PixivFavoriteExtractor(PixivExtractor):
# own bookmarks # own bookmarks
("https://www.pixiv.net/bookmark.php", { ("https://www.pixiv.net/bookmark.php", {
"url": "90c1715b07b0d1aad300bce256a0bc71f42540ba", "url": "90c1715b07b0d1aad300bce256a0bc71f42540ba",
"keyword": {"tags_bookmark": ["47", "hitman"]},
"options": (("metadata-bookmark", True),),
}), }),
# own bookmarks with tag (#596) # own bookmarks with tag (#596)
("https://www.pixiv.net/bookmark.php?tag=foobar", { ("https://www.pixiv.net/bookmark.php?tag=foobar", {
@ -880,6 +887,11 @@ class PixivAppAPI():
params = {"illust_id": illust_id} params = {"illust_id": illust_id}
return self._call("/v1/illust/detail", params)["illust"] return self._call("/v1/illust/detail", params)["illust"]
def illust_bookmark_detail(self, illust_id):
params = {"illust_id": illust_id}
return self._call(
"/v2/illust/bookmark/detail", params)["bookmark_detail"]
def illust_follow(self, restrict="all"): def illust_follow(self, restrict="all"):
params = {"restrict": restrict} params = {"restrict": restrict}
return self._pagination("/v2/illust/follow", params) return self._pagination("/v2/illust/follow", params)
@ -900,9 +912,16 @@ class PixivAppAPI():
return self._pagination("/v1/search/illust", params) return self._pagination("/v1/search/illust", params)
def user_bookmarks_illust(self, user_id, tag=None, restrict="public"): def user_bookmarks_illust(self, user_id, tag=None, restrict="public"):
"""Return illusts bookmarked by a user"""
params = {"user_id": user_id, "tag": tag, "restrict": restrict} params = {"user_id": user_id, "tag": tag, "restrict": restrict}
return self._pagination("/v1/user/bookmarks/illust", params) return self._pagination("/v1/user/bookmarks/illust", params)
def user_bookmark_tags_illust(self, user_id, restrict="public"):
"""Return bookmark tags defined by a user"""
params = {"user_id": user_id, "restrict": restrict}
return self._pagination(
"/v1/user/bookmark-tags/illust", params, "bookmark_tags")
@memcache(keyarg=1) @memcache(keyarg=1)
def user_detail(self, user_id): def user_detail(self, user_id):
params = {"user_id": user_id} params = {"user_id": user_id}

Loading…
Cancel
Save