Merge branch 'op+': use '+' for 2-element string concatenations

This commit is contained in:
Mike Fährmann
2025-12-22 11:34:21 +01:00
177 changed files with 981 additions and 982 deletions

View File

@@ -11,9 +11,9 @@ from .. import text, util, exception
from ..cache import memcache
BASE_PATTERN = r"(?:https?://)?(?:[\w-]+\.)?facebook\.com"
USER_PATTERN = (rf"{BASE_PATTERN}/"
rf"(?!media/|photo/|photo.php|watch/|permalink.php)"
rf"(?:profile\.php\?id=|people/[^/?#]+/)?([^/?&#]+)")
USER_PATTERN = (BASE_PATTERN +
r"/(?!media/|photo/|photo.php|watch/|permalink.php)"
r"(?:profile\.php\?id=|people/[^/?#]+/)?([^/?&#]+)")
class FacebookExtractor(Extractor):
@@ -237,16 +237,14 @@ class FacebookExtractor(Extractor):
if res.url.startswith(self.root + "/login"):
raise exception.AuthRequired(
message=(f"You must be logged in to continue viewing images."
f"{LEFT_OFF_TXT}")
)
message=("You must be logged in to continue viewing images." +
LEFT_OFF_TXT))
if b'{"__dr":"CometErrorRoot.react"}' in res.content:
raise exception.AbortExtraction(
f"You've been temporarily blocked from viewing images.\n"
f"Please try using a different account, "
f"using a VPN or waiting before you retry.{LEFT_OFF_TXT}"
)
"You've been temporarily blocked from viewing images.\n"
"Please try using a different account, "
"using a VPN or waiting before you retry." + LEFT_OFF_TXT)
return res
@@ -395,9 +393,9 @@ class FacebookExtractor(Extractor):
class FacebookPhotoExtractor(FacebookExtractor):
"""Base class for Facebook Photo extractors"""
subcategory = "photo"
pattern = (rf"{BASE_PATTERN}/"
rf"(?:[^/?#]+/photos/[^/?#]+/|photo(?:.php)?/?\?"
rf"(?:[^&#]+&)*fbid=)([^/?&#]+)[^/?#]*(?<!&setextract)$")
pattern = (BASE_PATTERN +
r"/(?:[^/?#]+/photos/[^/?#]+/|photo(?:.php)?/?\?"
r"(?:[^&#]+&)*fbid=)([^/?&#]+)[^/?#]*(?<!&setextract)$")
example = "https://www.facebook.com/photo/?fbid=PHOTO_ID"
def items(self):
@@ -433,11 +431,12 @@ class FacebookSetExtractor(FacebookExtractor):
"""Base class for Facebook Set extractors"""
subcategory = "set"
pattern = (
rf"{BASE_PATTERN}/"
rf"(?:(?:media/set|photo)/?\?(?:[^&#]+&)*set=([^&#]+)"
rf"[^/?#]*(?<!&setextract)$"
rf"|([^/?#]+/posts/[^/?#]+)"
rf"|photo/\?(?:[^&#]+&)*fbid=([^/?&#]+)&set=([^/?&#]+)&setextract)")
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):
@@ -460,7 +459,7 @@ class FacebookVideoExtractor(FacebookExtractor):
"""Base class for Facebook Video extractors"""
subcategory = "video"
directory_fmt = ("{category}", "{username}", "{subcategory}")
pattern = rf"{BASE_PATTERN}/(?:[^/?#]+/videos/|watch/?\?v=)([^/?&#]+)"
pattern = BASE_PATTERN + r"/(?:[^/?#]+/videos/|watch/?\?v=)([^/?&#]+)"
example = "https://www.facebook.com/watch/?v=VIDEO_ID"
def items(self):
@@ -487,7 +486,7 @@ class FacebookInfoExtractor(FacebookExtractor):
"""Extractor for Facebook Profile data"""
subcategory = "info"
directory_fmt = ("{category}", "{username}")
pattern = rf"{USER_PATTERN}/info"
pattern = USER_PATTERN + r"/info"
example = "https://www.facebook.com/USERNAME/info"
def items(self):
@@ -498,7 +497,7 @@ class FacebookInfoExtractor(FacebookExtractor):
class FacebookAlbumsExtractor(FacebookExtractor):
"""Extractor for Facebook Profile albums"""
subcategory = "albums"
pattern = rf"{USER_PATTERN}/photos_albums(?:/([^/?#]+))?"
pattern = USER_PATTERN + r"/photos_albums(?:/([^/?#]+))?"
example = "https://www.facebook.com/USERNAME/photos_albums"
def items(self):
@@ -531,7 +530,7 @@ class FacebookAlbumsExtractor(FacebookExtractor):
class FacebookPhotosExtractor(FacebookExtractor):
"""Extractor for Facebook Profile Photos"""
subcategory = "photos"
pattern = rf"{USER_PATTERN}/photos(?:_by)?"
pattern = USER_PATTERN + r"/photos(?:_by)?"
example = "https://www.facebook.com/USERNAME/photos"
def items(self):
@@ -548,7 +547,7 @@ class FacebookPhotosExtractor(FacebookExtractor):
class FacebookAvatarExtractor(FacebookExtractor):
"""Extractor for Facebook Profile Avatars"""
subcategory = "avatar"
pattern = rf"{USER_PATTERN}/avatar"
pattern = USER_PATTERN + r"/avatar"
example = "https://www.facebook.com/USERNAME/avatar"
def items(self):
@@ -570,7 +569,7 @@ class FacebookAvatarExtractor(FacebookExtractor):
class FacebookUserExtractor(Dispatch, FacebookExtractor):
"""Extractor for Facebook Profiles"""
pattern = rf"{USER_PATTERN}/?(?:$|\?|#)"
pattern = USER_PATTERN + r"/?(?:$|\?|#)"
example = "https://www.facebook.com/USERNAME"
def items(self):