@@ -226,10 +226,12 @@ def _parse_config(self, config, video_id):
226
226
'is_live' : is_live ,
227
227
}
228
228
229
- def _extract_original_format (self , url , video_id ):
229
+ def _extract_original_format (self , url , video_id , unlisted_hash = None ):
230
+ query = {'action' : 'load_download_config' }
231
+ if unlisted_hash :
232
+ query ['unlisted_hash' ] = unlisted_hash
230
233
download_data = self ._download_json (
231
- url , video_id , fatal = False ,
232
- query = {'action' : 'load_download_config' },
234
+ url , video_id , fatal = False , query = query ,
233
235
headers = {'X-Requested-With' : 'XMLHttpRequest' })
234
236
if download_data :
235
237
source_file = download_data .get ('source_file' )
@@ -509,6 +511,11 @@ class VimeoIE(VimeoBaseInfoExtractor):
509
511
{
510
512
'url' : 'https://vimeo.com/160743502/abd0e13fb4' ,
511
513
'only_matching' : True ,
514
+ },
515
+ {
516
+ # requires passing unlisted_hash(a52724358e) to load_download_config request
517
+ 'url' : 'https://vimeo.com/392479337/a52724358e' ,
518
+ 'only_matching' : True ,
512
519
}
513
520
# https://gettingthingsdone.com/workflowmap/
514
521
# vimeo embed with check-password page protected by Referer header
@@ -673,7 +680,8 @@ def _real_extract(self, url):
673
680
if config .get ('view' ) == 4 :
674
681
config = self ._verify_player_video_password (redirect_url , video_id , headers )
675
682
676
- vod = config .get ('video' , {}).get ('vod' , {})
683
+ video = config .get ('video' ) or {}
684
+ vod = video .get ('vod' ) or {}
677
685
678
686
def is_rented ():
679
687
if '>You rented this title.<' in webpage :
@@ -733,7 +741,7 @@ def is_rented():
733
741
formats = []
734
742
735
743
source_format = self ._extract_original_format (
736
- 'https://vimeo.com/' + video_id , video_id )
744
+ 'https://vimeo.com/' + video_id , video_id , video . get ( 'unlisted_hash' ) )
737
745
if source_format :
738
746
formats .append (source_format )
739
747
0 commit comments