[ninjastream] Adding new extractor

This commit is contained in:
J█████ 2021-01-27 12:12:39 -05:00
parent c669554ef5
commit 5adc36f2ae
No known key found for this signature in database
GPG key ID: F11ED3F9D2C5411E
2 changed files with 70 additions and 0 deletions

View file

@ -777,6 +777,7 @@ from .niconico import NiconicoIE, NiconicoPlaylistIE
from .ninecninemedia import NineCNineMediaIE
from .ninegag import NineGagIE
from .ninenow import NineNowIE
from .ninjastream import NinjaStreamIE
from .nintendo import NintendoIE
from .njpwworld import NJPWWorldIE
from .nobelprize import NobelPrizeIE

View file

@ -0,0 +1,69 @@
# coding: utf-8
from __future__ import unicode_literals
import os
from .common import InfoExtractor
from ..utils import ExtractorError
class NinjaStreamIE(InfoExtractor):
"""
Handles downloading video from ninjastream.to
"""
_VALID_URL = r'https?://(?:\w+\.)?ninjastream\.to/watch/[0-9a-zA-Z]+'
_TESTS = [
{
'url': 'https://ninjastream.to/watch/74GA02Nw6ZYBk',
'info_dict': {
'id': '74GA02Nw6ZYBk',
'ext': 'mp4',
'title': 'Damon_Andros_and_Stephen_Harte'
},
}
]
def _real_extract(self, url):
"""
Parses the URL into the video's URL.
"""
# Parse the video id
video_id = self._search_regex(r'https?://(?:\w+\.)?ninjastream\.to/watch/([0-9a-zA-Z]+)',
url, 'video_id', fatal=False) or ''
# Get the hosted webpage
webpage = self._download_webpage(url, video_id)
# The links to the m3u8 file will be buried and html encoded in the <file-watch-jwplayer> tag
jwplayer_link = self._html_search_regex(r'<file-watch-jwplayer (.*)', webpage,
'file-watch-jwplayer', fatal=False)
if jwplayer_link is None:
raise ExtractorError('NinjaStream: Failed to find the file information on the website')
# The v-bind:file will give us the correct title for the video
file_meta = self._parse_json(self._search_regex(r'v-bind:file=\"(\{.*?\})\"', jwplayer_link, video_id),
video_id, fatal=False)
filename = video_id
if file_meta is not None and 'name' in file_meta:
filename = os.path.splitext(file_meta['name'])[0]
# The v-bind:stream will give us the location of the m3u8 file
stream_meta = self._parse_json(self._search_regex(r'v-bind:stream=\"(\{.*?\})\"', jwplayer_link, video_id),
video_id, fatal=False)
if stream_meta is None:
raise ExtractorError('NinjaStream: Failed to find the m3u8 information on website')
url = '{0}/{1}/index.m3u8'.format(stream_meta['host'], stream_meta['hash'])
# Get and parse the m3u8 information
formats = self._extract_m3u8_formats(url, video_id, 'mp4', entry_protocol='m3u8_native',
m3u8_id='hls', fatal=False)
return {
'formats': formats,
'id': video_id,
'title': filename,
}