[pinterest] add support for getting all boards of a user

(#1205)
This commit is contained in:
Mike Fährmann
2020-12-29 16:57:03 +01:00
parent 25074aec47
commit 6cdbab07b5
2 changed files with 36 additions and 1 deletions

View File

@@ -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,27 @@ class PinterestBoardExtractor(PinterestExtractor):
return self.api.board_pins(board["id"])
class PinterestBoardsExtractor(PinterestExtractor):
"""Extractor for a user's boards """
subcategory = "boards"
pattern = BASE_PATTERN + r"/(?!pin/)([^/?#&]+)/_saved/?$"
test = ("https://www.pinterest.de/g1952849/_saved/", {
"pattern": PinterestBoardExtractor.pattern,
"count": ">= 2",
})
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 +323,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}

View File

@@ -132,6 +132,7 @@ SUBCATEGORY_MAP = {
"media": "Media Files",
},
"pinterest": {
"board": "",
"pinit": "pin.it Links",
},
"pixiv": {