[facebook] fix '/photo/?fbid=…&set=…' being matched as a set (#8181)

reorder 'photo' and 'set' extractors
This commit is contained in:
Mike Fährmann
2025-09-08 09:37:28 +02:00
parent d182749f45
commit 4d2482ef10
2 changed files with 49 additions and 28 deletions

View File

@@ -376,34 +376,6 @@ class FacebookExtractor(Extractor):
return user
class FacebookSetExtractor(FacebookExtractor):
"""Base class for Facebook Set extractors"""
subcategory = "set"
pattern = (
BASE_PATTERN +
r"/(?:(?:media/set|photo)/?\?(?:[^&#]+&)*set=([^&#]+)"
r"[^/?#]*(?<!&setextract)$"
r"|([^/?#]+/posts/[^/?#]+)"
r"|photo/\?(?:[^&#]+&)*fbid=([^/?&#]+)&set=([^/?&#]+)&setextract)"
)
example = "https://www.facebook.com/media/set/?set=SET_ID"
def items(self):
set_id = self.groups[0] or self.groups[3]
if path := self.groups[1]:
post_url = self.root + "/" + path
post_page = self.request(post_url).text
set_id = self.parse_post_page(post_page)["set_id"]
set_url = f"{self.root}/media/set/?set={set_id}"
set_page = self.request(set_url).text
set_data = self.parse_set_page(set_page)
if self.groups[2]:
set_data["first_photo_id"] = self.groups[2]
return self.extract_set(set_data)
class FacebookPhotoExtractor(FacebookExtractor):
"""Base class for Facebook Photo extractors"""
subcategory = "photo"
@@ -441,6 +413,34 @@ class FacebookPhotoExtractor(FacebookExtractor):
yield Message.Url, comment_photo["url"], comment_photo
class FacebookSetExtractor(FacebookExtractor):
"""Base class for Facebook Set extractors"""
subcategory = "set"
pattern = (
BASE_PATTERN +
r"/(?:(?:media/set|photo)/?\?(?:[^&#]+&)*set=([^&#]+)"
r"[^/?#]*(?<!&setextract)$"
r"|([^/?#]+/posts/[^/?#]+)"
r"|photo/\?(?:[^&#]+&)*fbid=([^/?&#]+)&set=([^/?&#]+)&setextract)"
)
example = "https://www.facebook.com/media/set/?set=SET_ID"
def items(self):
set_id = self.groups[0] or self.groups[3]
if path := self.groups[1]:
post_url = self.root + "/" + path
post_page = self.request(post_url).text
set_id = self.parse_post_page(post_page)["set_id"]
set_url = f"{self.root}/media/set/?set={set_id}"
set_page = self.request(set_url).text
set_data = self.parse_set_page(set_page)
if self.groups[2]:
set_data["first_photo_id"] = self.groups[2]
return self.extract_set(set_data)
class FacebookVideoExtractor(FacebookExtractor):
"""Base class for Facebook Video extractors"""
subcategory = "video"