From ec8c09c7e7656a4e438a74bb1d1856906a50e6d5 Mon Sep 17 00:00:00 2001 From: lihe Date: Thu, 15 Jul 2021 10:37:02 +0800 Subject: [PATCH] Update bilibili.py Fix the problem of downloading anime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When downloading anime playlist, "baseUrl" sometimes becomes invalid. This modified version will automatically use "backupUrl" for video and audio downloads. 在下载动漫playlist时,"baseUrl"有时候会失效。此修改版本会自动使用"backupUrl"进行视频及音频下载 --- src/you_get/extractors/bilibili.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/you_get/extractors/bilibili.py b/src/you_get/extractors/bilibili.py index edb656c7..01f0b113 100644 --- a/src/you_get/extractors/bilibili.py +++ b/src/you_get/extractors/bilibili.py @@ -5,6 +5,7 @@ from ..extractor import VideoExtractor import hashlib import math +from urllib import error class Bilibili(VideoExtractor): @@ -360,15 +361,33 @@ class Bilibili(VideoExtractor): desc = s['desc'] audio_quality = s['audio_quality'] baseurl = video['baseUrl'] - size = url_size(baseurl, headers=self.bilibili_headers(referer=self.url)) + video_backurl = video['backupUrl'] + # 如果baseurl使用不了 + for backurl in video_backurl: + try: + size = url_size(baseurl, headers=self.bilibili_headers(referer=self.url)) + except error.URLError: + # 使用备用URL + baseurl = backurl + logging.debug(f'Using video backup url {backurl}') # find matching audio track audio_baseurl = playinfo['result']['dash']['audio'][0]['baseUrl'] for audio in playinfo['result']['dash']['audio']: if int(audio['id']) == audio_quality: audio_baseurl = audio['baseUrl'] + audio_backurl = audio['backupUrl'] break - size += url_size(audio_baseurl, headers=self.bilibili_headers(referer=self.url)) + + # 如果baseurl使用不了 + for backurl in audio_backurl: + try: + size += url_size(audio_baseurl, headers=self.bilibili_headers(referer=self.url)) + except error.URLError: + # 使用备用URL + audio_baseurl = backurl + logging.debug(f'Using audio backup url {backurl}') + self.dash_streams[format_id] = {'container': container, 'quality': desc, 'src': [[baseurl], [audio_baseurl]], 'size': size}