summary refs log tree commit diff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2020-03-24 00:11:39 +0700
committerSergey M․ <dstftw@gmail.com>2020-03-24 00:11:39 +0700
commitb4eb08bb03f69c587f8440912cf56aadc9e52879 (patch)
treea78a9766b0179794d1cb4653a0d82cef39461982
parent2e20cb36364b91c1d928ce896064fdc7c49e82f8 (diff)
downloadyoutube-dl-b4eb08bb03f69c587f8440912cf56aadc9e52879.tar.gz
youtube-dl-b4eb08bb03f69c587f8440912cf56aadc9e52879.tar.xz
youtube-dl-b4eb08bb03f69c587f8440912cf56aadc9e52879.zip
[bilibili] Add support for new URL schema with BV ids (closes #24439, closes #24442)
-rw-r--r--youtube_dl/extractor/bilibili.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/youtube_dl/extractor/bilibili.py b/youtube_dl/extractor/bilibili.py
index 80bd696e2..e9d0a8d0c 100644
--- a/youtube_dl/extractor/bilibili.py
+++ b/youtube_dl/extractor/bilibili.py
@@ -24,7 +24,18 @@ from ..utils import (
 
 
 class BiliBiliIE(InfoExtractor):
-    _VALID_URL = r'https?://(?:www\.|bangumi\.|)bilibili\.(?:tv|com)/(?:video/av|anime/(?P<anime_id>\d+)/play#)(?P<id>\d+)'
+    _VALID_URL = r'''(?x)
+                    https?://
+                        (?:(?:www|bangumi)\.)?
+                        bilibili\.(?:tv|com)/
+                        (?:
+                            (?:
+                                video/[aA][vV]|
+                                anime/(?P<anime_id>\d+)/play\#
+                            )(?P<id_bv>\d+)|
+                            video/[bB][vV](?P<id>[^/?#&]+)
+                        )
+                    '''
 
     _TESTS = [{
         'url': 'http://www.bilibili.tv/video/av1074402/',
@@ -92,6 +103,10 @@ class BiliBiliIE(InfoExtractor):
                 'skip_download': True,  # Test metadata only
             },
         }]
+    }, {
+        # new BV video id format
+        'url': 'https://www.bilibili.com/video/BV1JE411F741',
+        'only_matching': True,
     }]
 
     _APP_KEY = 'iVGUTjsxvpLeuDCf'
@@ -109,7 +124,7 @@ class BiliBiliIE(InfoExtractor):
         url, smuggled_data = unsmuggle_url(url, {})
 
         mobj = re.match(self._VALID_URL, url)
-        video_id = mobj.group('id')
+        video_id = mobj.group('id') or mobj.group('id_bv')
         anime_id = mobj.group('anime_id')
         webpage = self._download_webpage(url, video_id)