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

(#1205)
pull/1229/head
Mike Fährmann 4 years ago
parent 25074aec47
commit 6cdbab07b5
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -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}

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

Loading…
Cancel
Save