#!/usr/bin/env python from ..common import * from ..extractor import VideoExtractor class Bilibili(VideoExtractor): name = "Bilibili" # Bilibili media encoding options, in descending quality order. stream_types = [ {'id': 'flv_p60', 'quality': 116, 'audio_quality': 30280, 'container': 'MP4', 'video_resolution': '1080p', 'desc': '高清 1080P60'}, # 'id': 'hdflv2', 'quality': 112? {'id': 'flv', 'quality': 80, 'audio_quality': 30280, 'container': 'MP4', 'video_resolution': '1080p', 'desc': '高清 1080P'}, {'id': 'flv720_p60', 'quality': 74, 'audio_quality': 30280, 'container': 'MP4', 'video_resolution': '720p', 'desc': '高清 720P60'}, {'id': 'flv720', 'quality': 64, 'audio_quality': 30280, 'container': 'MP4', 'video_resolution': '720p', 'desc': '高清 720P'}, {'id': 'flv480', 'quality': 32, 'audio_quality': 30280, 'container': 'MP4', 'video_resolution': '480p', 'desc': '清晰 480P'}, {'id': 'flv360', 'quality': 16, 'audio_quality': 30216, 'container': 'MP4', 'video_resolution': '360p', 'desc': '流畅 360P'}, {'id': 'default', 'quality': 0} ] @staticmethod def bilibili_headers(referer=None, cookie=None): # a reasonable UA ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36' headers = {'User-Agent': ua} if referer is not None: headers.update({'Referer': referer}) if cookie is not None: headers.update({'Cookie': cookie}) return headers @staticmethod def bilibili_bangumi_api(avid, cid, ep_id, qn=0): return 'https://api.bilibili.com/pgc/player/web/playurl?avid=%s&cid=%s&qn=%s&type=&otype=json&ep_id=%s&fnver=0&fnval=16' % (avid, cid, qn, ep_id) def prepare(self, **kwargs): self.stream_qualities = {s['quality']: s for s in self.stream_types} html_content = get_content(self.url, headers=self.bilibili_headers()) #self.title = match1(html_content, # r'