summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/pinterest.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/pinterest.py')
-rw-r--r--gallery_dl/extractor/pinterest.py39
1 files changed, 38 insertions, 1 deletions
diff --git a/gallery_dl/extractor/pinterest.py b/gallery_dl/extractor/pinterest.py
index 739e67e..334412d 100644
--- a/gallery_dl/extractor/pinterest.py
+++ b/gallery_dl/extractor/pinterest.py
@@ -22,6 +22,7 @@ class PinterestExtractor(Extractor):
category = "pinterest"
filename_fmt = "{category}_{id}.{extension}"
archive_fmt = "{id}"
+ root = "https://www.pinterest.com"
def __init__(self, match):
Extractor.__init__(self, match)
@@ -123,7 +124,7 @@ class PinterestBoardExtractor(PinterestExtractor):
subcategory = "board"
directory_fmt = ("{category}", "{board[owner][username]}", "{board[name]}")
archive_fmt = "{board[id]}_{id}"
- pattern = BASE_PATTERN + r"/(?!pin/)([^/?#&]+)/([^/?#&]+)/?$"
+ pattern = BASE_PATTERN + r"/(?!pin/)([^/?#&]+)/(?!_saved)([^/?#&]+)/?$"
test = (
("https://www.pinterest.com/g1952849/test-/", {
"pattern": r"https://i\.pinimg\.com/originals/",
@@ -167,6 +168,30 @@ class PinterestBoardExtractor(PinterestExtractor):
return self.api.board_pins(board["id"])
+class PinterestUserExtractor(PinterestExtractor):
+ """Extractor for a user's boards"""
+ subcategory = "user"
+ pattern = BASE_PATTERN + r"/(?!pin/)([^/?#&]+)(?:/_saved)?/?$"
+ test = (
+ ("https://www.pinterest.de/g1952849/", {
+ "pattern": PinterestBoardExtractor.pattern,
+ "count": ">= 2",
+ }),
+ ("https://www.pinterest.de/g1952849/_saved/"),
+ )
+
+ def __init__(self, match):
+ PinterestExtractor.__init__(self, match)
+ self.user = text.unquote(match.group(1))
+
+ def items(self):
+ for board in self.api.boards(self.user):
+ url = board.get("url")
+ if url:
+ board["_extractor"] = PinterestBoardExtractor
+ yield Message.Queue, self.root + url, board
+
+
class PinterestSectionExtractor(PinterestExtractor):
"""Extractor for board sections on pinterest.com"""
subcategory = "section"
@@ -301,6 +326,18 @@ class PinterestAPI():
"field_set_key": "detailed"}
return self._call("Board", options)["resource_response"]["data"]
+ def boards(self, user):
+ """Yield all boards from 'user'"""
+ options = {
+ "sort" : "last_pinned_to",
+ "field_set_key" : "profile_grid_item",
+ "filter_stories" : False,
+ "username" : user,
+ "page_size" : 25,
+ "include_archived": True,
+ }
+ return self._pagination("Boards", options)
+
def board_pins(self, board_id):
"""Yield all pins of a specific board"""
options = {"board_id": board_id}