mirror of
https://github.com/soimort/you-get.git
synced 2025-02-03 00:33:58 +03:00
[missevan] Prevent from being banned
This commit is contained in:
parent
0ec71a8437
commit
4add329e38
@ -29,6 +29,9 @@ import re
|
|||||||
from ..common import get_content, urls_size, log, player
|
from ..common import get_content, urls_size, log, player
|
||||||
from ..extractor import VideoExtractor
|
from ..extractor import VideoExtractor
|
||||||
|
|
||||||
|
_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'
|
||||||
|
|
||||||
|
|
||||||
class _NoMatchException(Exception):
|
class _NoMatchException(Exception):
|
||||||
pass
|
pass
|
||||||
@ -119,6 +122,11 @@ class MissEvanWithStream(VideoExtractor):
|
|||||||
name = 'MissEvan'
|
name = 'MissEvan'
|
||||||
stream_types = missevan_stream_types
|
stream_types = missevan_stream_types
|
||||||
|
|
||||||
|
def __init__(self, *args):
|
||||||
|
super().__init__(*args)
|
||||||
|
self.referer = 'https://www.missevan.com/'
|
||||||
|
self.ua = _UA
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, title, streams, *, streams_sorted=None):
|
def create(cls, title, streams, *, streams_sorted=None):
|
||||||
obj = cls()
|
obj = cls()
|
||||||
@ -128,8 +136,8 @@ class MissEvanWithStream(VideoExtractor):
|
|||||||
obj.streams_sorted.extend(streams_sorted)
|
obj.streams_sorted.extend(streams_sorted)
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
def fetch_danmaku(self, url, headers=None):
|
def set_danmaku(self, danmaku):
|
||||||
self.danmaku = get_content(url, headers or {})
|
self.danmaku = danmaku
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -164,18 +172,23 @@ class MissEvan(VideoExtractor):
|
|||||||
name = 'MissEvan'
|
name = 'MissEvan'
|
||||||
stream_types = missevan_stream_types
|
stream_types = missevan_stream_types
|
||||||
|
|
||||||
|
def __init__(self, *args):
|
||||||
|
super().__init__(*args)
|
||||||
|
self.referer = 'https://www.missevan.com/'
|
||||||
|
self.ua = _UA
|
||||||
|
self.__headers = {'User-Agent': self.ua, 'Referer': self.referer}
|
||||||
|
|
||||||
__prepare_dispatcher = _Dispatcher()
|
__prepare_dispatcher = _Dispatcher()
|
||||||
|
|
||||||
@__prepare_dispatcher.endpoint(
|
@__prepare_dispatcher.endpoint(
|
||||||
re.compile(r'missevan\.com/sound/(?:player\?.*?id=)?(?P<sid>\d+)', re.I))
|
re.compile(r'missevan\.com/sound/(?:player\?.*?id=)?(?P<sid>\d+)', re.I))
|
||||||
def prepare_sound(self, sid, **kwargs):
|
def prepare_sound(self, sid, **kwargs):
|
||||||
content = get_content(self.url_sound_api(sid))
|
json_data = self._get_json(self.url_sound_api(sid))
|
||||||
json_data = json.loads(content)
|
|
||||||
sound = json_data['info']['sound']
|
sound = json_data['info']['sound']
|
||||||
|
|
||||||
self.title = sound['soundstr']
|
self.title = sound['soundstr']
|
||||||
if not is_covers_stream(kwargs.get('stream_id')):
|
if not is_covers_stream(kwargs.get('stream_id')):
|
||||||
self.danmaku = get_content(self.url_danmaku_api(sid))
|
self.danmaku = self._get_content(self.url_danmaku_api(sid))
|
||||||
|
|
||||||
self.streams = self.setup_streams(sound)
|
self.streams = self.setup_streams(sound)
|
||||||
|
|
||||||
@ -223,8 +236,7 @@ class MissEvan(VideoExtractor):
|
|||||||
@_download_playlist_dispatcher.endpoint(
|
@_download_playlist_dispatcher.endpoint(
|
||||||
re.compile(r'missevan\.com/album(?:info)?/(?P<aid>\d+)', re.I))
|
re.compile(r'missevan\.com/album(?:info)?/(?P<aid>\d+)', re.I))
|
||||||
def download_album(self, aid, **kwargs):
|
def download_album(self, aid, **kwargs):
|
||||||
content = get_content(self.url_album_api(aid))
|
json_data = self._get_json(self.url_album_api(aid))
|
||||||
json_data = json.loads(content)
|
|
||||||
album = json_data['info']['album']
|
album = json_data['info']['album']
|
||||||
self.title = album['title']
|
self.title = album['title']
|
||||||
sounds = json_data['info']['sounds']
|
sounds = json_data['info']['sounds']
|
||||||
@ -237,9 +249,10 @@ class MissEvan(VideoExtractor):
|
|||||||
streams = self.setup_streams(sound)
|
streams = self.setup_streams(sound)
|
||||||
sound_id = sound['id']
|
sound_id = sound['id']
|
||||||
sound_title = sound['soundstr']
|
sound_title = sound['soundstr']
|
||||||
|
danmaku = self._get_content(self.url_danmaku_api(sound_id))
|
||||||
MissEvanWithStream \
|
MissEvanWithStream \
|
||||||
.create(sound_title, streams) \
|
.create(sound_title, streams) \
|
||||||
.fetch_danmaku(self.url_danmaku_api(sound_id)) \
|
.set_danmaku(danmaku) \
|
||||||
.download(**kwargs)
|
.download(**kwargs)
|
||||||
|
|
||||||
self.download_covers(sound_title, streams, **kwargs)
|
self.download_covers(sound_title, streams, **kwargs)
|
||||||
@ -247,8 +260,7 @@ class MissEvan(VideoExtractor):
|
|||||||
@_download_playlist_dispatcher.endpoint(
|
@_download_playlist_dispatcher.endpoint(
|
||||||
re.compile(r'missevan\.com(?:/mdrama)?/drama/(?P<did>\d+)', re.I))
|
re.compile(r'missevan\.com(?:/mdrama)?/drama/(?P<did>\d+)', re.I))
|
||||||
def download_drama(self, did, **kwargs):
|
def download_drama(self, did, **kwargs):
|
||||||
content = get_content(self.url_drama_api(did))
|
json_data = self._get_json(self.url_drama_api(did))
|
||||||
json_data = json.loads(content)
|
|
||||||
|
|
||||||
drama = json_data['info']['drama']
|
drama = json_data['info']['drama']
|
||||||
|
|
||||||
@ -282,14 +294,17 @@ class MissEvan(VideoExtractor):
|
|||||||
self.download_covers(self.title, self.streams, **kwargs)
|
self.download_covers(self.title, self.streams, **kwargs)
|
||||||
|
|
||||||
def extract(self, **kwargs):
|
def extract(self, **kwargs):
|
||||||
|
stream_id = kwargs.get('stream_id')
|
||||||
|
|
||||||
# fetch all streams size when output info or json
|
# fetch all streams size when output info or json
|
||||||
if kwargs.get('info_only') or kwargs.get('json_output'):
|
if kwargs.get('info_only') and not stream_id \
|
||||||
|
or kwargs.get('json_output'):
|
||||||
|
|
||||||
for _, stream in self.streams.items():
|
for _, stream in self.streams.items():
|
||||||
stream['size'] = urls_size(stream['src'])
|
stream['size'] = urls_size(stream['src'])
|
||||||
return
|
return
|
||||||
|
|
||||||
# fetch size of the selected stream only
|
# fetch size of the selected stream only
|
||||||
stream_id = kwargs.get('stream_id')
|
|
||||||
if not stream_id:
|
if not stream_id:
|
||||||
stream_id = best_quality_stream_id(self.streams, self.stream_types)
|
stream_id = best_quality_stream_id(self.streams, self.stream_types)
|
||||||
|
|
||||||
@ -297,6 +312,13 @@ class MissEvan(VideoExtractor):
|
|||||||
if 'size' not in stream:
|
if 'size' not in stream:
|
||||||
stream['size'] = urls_size(stream['src'])
|
stream['size'] = urls_size(stream['src'])
|
||||||
|
|
||||||
|
def _get_content(self, url):
|
||||||
|
return get_content(url, headers=self.__headers)
|
||||||
|
|
||||||
|
def _get_json(self, url):
|
||||||
|
content = self._get_content(url)
|
||||||
|
return json.loads(content)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def url_album_api(album_id):
|
def url_album_api(album_id):
|
||||||
return f'https://www.missevan.com/sound' \
|
return f'https://www.missevan.com/sound' \
|
||||||
|
Loading…
Reference in New Issue
Block a user