1
0
mirror of https://github.com/ytdl-org/youtube-dl.git synced 2025-06-23 11:56:20 +00:00

Compare commits

...

4 Commits

Author SHA1 Message Date
ashutosh chaudhary
0f1bd974ac
Merge 2103cec4a5b3931c9a5d31dd9aed673773bba26e into 3eb8d22ddb8982ca4fb56bb7a8d6517538bf14c6 2025-04-01 11:12:24 +02:00
Ashutosh Chaudhary
2103cec4a5 Fix: title from meta 2020-12-12 19:12:35 +05:30
Ashutosh Chaudhary
c2f08dd505 Fixed flake8
Search title from multiple sources
2020-12-12 18:47:23 +05:30
Ashutosh Chaudhary
14bedfc938 Added Mxplayer
Fixed regex
2020-12-12 18:47:23 +05:30
2 changed files with 103 additions and 0 deletions

View File

@ -737,6 +737,7 @@ from .mtv import (
) )
from .muenchentv import MuenchenTVIE from .muenchentv import MuenchenTVIE
from .mwave import MwaveIE, MwaveMeetGreetIE from .mwave import MwaveIE, MwaveMeetGreetIE
from .mxplayer import MxplayerIE
from .mychannels import MyChannelsIE from .mychannels import MyChannelsIE
from .myspace import MySpaceIE, MySpaceAlbumIE from .myspace import MySpaceIE, MySpaceAlbumIE
from .myspass import MySpassIE from .myspass import MySpassIE

View File

@ -0,0 +1,102 @@
from __future__ import unicode_literals
import re
from urllib.parse import urljoin
from .common import InfoExtractor
from ..utils import (
url_or_none, js_to_json, ExtractorError)
# VALID_STREAMS = ('dash', 'hls', )
VALID_STREAMS = ('dash', )
class MxplayerIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?mxplayer\.in/movie/(?P<slug>[a-z0-9]+(?:-[a-z0-9]+)*)'
# _VALID_URL = r'https?://(?:www\.)?mxplayer\.in/movie/(?P<title>.*)[-](?P<id>.+)$'
_TEST = {
'url': 'https://www.mxplayer.in/movie/watch-knock-knock-hindi-dubbed-movie-online-b9fa28df3bfb8758874735bbd7d2655a?watch=true',
'info_dict': {
'id': 'b9fa28df3bfb8758874735bbd7d2655a',
'ext': 'mp4',
'title': 'Knock Knock Movie | Watch 2015 Knock Knock Full Movie Online- MX Player',
},
'params': {
'skip_download': True,
'format': 'bestvideo+bestaudio'
}
}
def _get_best_stream_url(self, stream):
best_stream = list(filter(None, [v for k, v in stream.items()]))
return best_stream.pop(0) if len(best_stream) else None
def _get_stream_urls(self, video_dict):
stream_dict = video_dict.get('stream', {'provider': {}})
stream_provider = stream_dict.get('provider')
if not stream_dict[stream_provider]:
message = 'No stream provider found'
raise ExtractorError('%s said: %s' % (self.IE_NAME, message), expected=True)
streams = []
for stream_name, v in stream_dict[stream_provider].items():
if stream_name in VALID_STREAMS:
stream_url = self._get_best_stream_url(v)
if stream_url is None:
continue
streams.append((stream_name, stream_url))
return streams
def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url)
video_slug = mobj.group('slug')
video_id = video_slug.split('-')[-1]
webpage = self._download_webpage(url, video_id)
window_state_json = self._html_search_regex(
r'(?s)<script>window\.state\s*[:=]\s(\{.+\})\n(\w+).*(</script>).*',
webpage, 'WindowState')
source = self._parse_json(js_to_json(window_state_json), video_id)
if not source:
message = 'source not found'
raise ExtractorError('%s said: %s' % (self.IE_NAME, message), expected=True)
config_dict = source['config']
video_dict = source['entities'][video_id]
stream_urls = self._get_stream_urls(video_dict)
title = self._og_search_title(webpage, fatal=True, default=video_dict['title'])
formats = []
headers = {'Referer': url}
for stream_name, stream_url in stream_urls:
if stream_name == 'dash':
format_url = url_or_none(urljoin(config_dict['videoCdnBaseUrl'], stream_url))
if not format_url:
continue
formats.extend(self._extract_mpd_formats(
format_url, video_id, mpd_id='dash', headers=headers))
self._sort_formats(formats)
info = {
'id': video_id,
'ext': 'mpd',
'title': title,
'description': video_dict.get('description'),
'formats': formats
}
if video_dict.get('imageInfo'):
info['thumbnails'] = list(map(lambda i: dict(i, **{
'url': urljoin(config_dict['imageBaseUrl'], i['url'])
}), video_dict['imageInfo']))
if video_dict.get('webUrl'):
last_part = video_dict['webUrl'].split("/")[-1]
info['display_id'] = last_part.replace(video_id, "").rstrip("-")
return info