[ie/vimeo:album] Support URLs with non-numeric IDs

Authored by: bashonly
pull/14021/head
bashonly 4 days ago
parent 472dcdd6e1
commit 038fbf08a5
No known key found for this signature in database
GPG Key ID: 783F096F253D15B0

@ -28,7 +28,6 @@ from ..utils import (
qualities,
smuggle_url,
str_or_none,
traverse_obj,
try_call,
try_get,
unified_timestamp,
@ -39,6 +38,7 @@ from ..utils import (
urlhandle_detect_ext,
urljoin,
)
from ..utils.traversal import require, traverse_obj
class VimeoBaseInfoExtractor(InfoExtractor):
@ -1540,7 +1540,7 @@ class VimeoUserIE(VimeoChannelIE): # XXX: Do not subclass from concrete IE
class VimeoAlbumIE(VimeoBaseInfoExtractor):
IE_NAME = 'vimeo:album'
_VALID_URL = r'https://vimeo\.com/(?:album|showcase)/(?P<id>\d+)(?:$|[?#]|(?P<is_embed>/embed))'
_VALID_URL = r'https://vimeo\.com/(?:album|showcase)/(?P<id>[^/?#]+)(?:$|[?#]|(?P<is_embed>/embed))'
_TITLE_RE = r'<header id="page_header">\n\s*<h1>(.*?)</h1>'
_TESTS = [{
'url': 'https://vimeo.com/album/2632481',
@ -1599,6 +1599,15 @@ class VimeoAlbumIE(VimeoBaseInfoExtractor):
'id': '11803104',
},
'playlist_mincount': 41,
}, {
'note': 'non-numeric slug, need to fetch numeric album ID',
'url': 'https://vimeo.com/showcase/BethelTally-Homegoing-Services',
'info_dict': {
'title': 'BethelTally Homegoing Services',
'id': '11547429',
'description': 'Bethel Missionary Baptist Church\nTallahassee, FL',
},
'playlist_mincount': 8,
}]
_PAGE_SIZE = 100
@ -1642,6 +1651,15 @@ class VimeoAlbumIE(VimeoBaseInfoExtractor):
url, _, http_headers = self._unsmuggle_headers(url)
album_id, is_embed = self._match_valid_url(url).group('id', 'is_embed')
referer = http_headers.get('Referer')
if not re.fullmatch(r'[0-9]+', album_id):
auth_info = self._download_json(
f'https://vimeo.com/showcase/{album_id}/auth', album_id, 'Downloading album info',
headers={'X-Requested-With': 'XMLHttpRequest', 'Referer': referer},
expected_status=(401, 403))
album_id = traverse_obj(auth_info, (
'metadata', 'id', {int}, {str_or_none}, {require('album ID')}))
album, hashed_pass = self._get_album_data_and_hashed_pass(album_id, is_embed, referer)
entries = OnDemandPagedList(functools.partial(

Loading…
Cancel
Save