[SdarotTV] Add new extractor
This commit is contained in:
parent
4bf22f7a10
commit
cb2ea8795e
@ -899,6 +899,7 @@ from .sbs import SBSIE
|
|||||||
from .screencast import ScreencastIE
|
from .screencast import ScreencastIE
|
||||||
from .screencastomatic import ScreencastOMaticIE
|
from .screencastomatic import ScreencastOMaticIE
|
||||||
from .scrippsnetworks import ScrippsNetworksWatchIE
|
from .scrippsnetworks import ScrippsNetworksWatchIE
|
||||||
|
from .sdarot import SdarotEpisodeIE, SdarotSeasonIE, SdarotSerieIE
|
||||||
from .seeker import SeekerIE
|
from .seeker import SeekerIE
|
||||||
from .senateisvp import SenateISVPIE
|
from .senateisvp import SenateISVPIE
|
||||||
from .sendtonews import SendtoNewsIE
|
from .sendtonews import SendtoNewsIE
|
||||||
|
202
youtube_dl/extractor/sdarot.py
Normal file
202
youtube_dl/extractor/sdarot.py
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
# coding: utf-8
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
from .common import InfoExtractor
|
||||||
|
from ..utils import (
|
||||||
|
sanitized_Request,
|
||||||
|
urlencode_postdata,
|
||||||
|
)
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
class SdarotBaseIE(InfoExtractor):
|
||||||
|
def get_request(self, form, url):
|
||||||
|
request = sanitized_Request('https://www.sdarot.pm/ajax/watch', urlencode_postdata(form))
|
||||||
|
request.add_header('Pragma', 'no-cache')
|
||||||
|
request.add_header('Origin', 'Origin: https://www.sdarot.pm')
|
||||||
|
request.add_header('Accept-Encoding', 'gzip, deflate')
|
||||||
|
request.add_header('Accept-Language', 'en-US,en;q=0.8,he;q=0.6')
|
||||||
|
request.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36')
|
||||||
|
request.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')
|
||||||
|
request.add_header('Accept', '*/*')
|
||||||
|
request.add_header('Cache-Control', 'no-cache')
|
||||||
|
request.add_header('X-Requested-With', 'XMLHttpRequest')
|
||||||
|
request.add_header('Connection', 'keep-alive')
|
||||||
|
request.add_header('Referer', url)
|
||||||
|
|
||||||
|
return request
|
||||||
|
|
||||||
|
def get_token(self, url, serie, season, episode):
|
||||||
|
video_id = '%s-%s-%s' % (serie, season, episode)
|
||||||
|
|
||||||
|
form = {
|
||||||
|
'preWatch': 'true',
|
||||||
|
'SID': serie,
|
||||||
|
'season': season,
|
||||||
|
'ep': episode
|
||||||
|
}
|
||||||
|
|
||||||
|
request = self.get_request(form, url)
|
||||||
|
|
||||||
|
token = self._download_webpage(request, video_id, None)
|
||||||
|
|
||||||
|
return token
|
||||||
|
|
||||||
|
def get_info(self, url, serie, season, episode, token, title):
|
||||||
|
video_id = '%s-%s-%s' % (serie, season, episode)
|
||||||
|
|
||||||
|
form = {
|
||||||
|
'watch': 'false',
|
||||||
|
'token': token,
|
||||||
|
'serie': serie,
|
||||||
|
'season': season,
|
||||||
|
'episode': episode
|
||||||
|
}
|
||||||
|
|
||||||
|
request = self.get_request(form, url)
|
||||||
|
# request.add_header('Accept', 'application/json, text/javascript, */*; q=0.01')
|
||||||
|
|
||||||
|
response = self._download_json(request, video_id, None)
|
||||||
|
|
||||||
|
url = 'https://%s/watch/480/%s.mp4?token=%s&time=%s' % (response['url'], response['VID'], response['watch']['480'], response['time'])
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'url': url,
|
||||||
|
'title': title
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_key(self, serie, season, episode):
|
||||||
|
return '%s-%s-%s' % (serie, season, episode)
|
||||||
|
|
||||||
|
|
||||||
|
class SdarotEpisodeIE(SdarotBaseIE):
|
||||||
|
_VALID_URL = r'https://(?:www\.)?sdarot\.pm/watch/(?P<serie>\d+)-(?P<title>.*)?/season/(?P<season>[0-9]+)/episode/(?P<episode>[0-9]+)'
|
||||||
|
_TEST = {
|
||||||
|
'url': 'https://www.sdarot.pm/watch/27-%D7%9E%D7%93-%D7%9E%D7%9F-mad-men/season/1/episode/1',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '27-1-1',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': '%D7%9E%D7%93-%D7%9E%D7%9F-mad-men'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
m = re.search(self._VALID_URL, url)
|
||||||
|
serie = m.group(1)
|
||||||
|
title = m.group(2)
|
||||||
|
season = m.group(3)
|
||||||
|
episode = m.group(4)
|
||||||
|
|
||||||
|
video_id = '%s-%s-%s' % (serie, season, episode)
|
||||||
|
token = self.get_token(url, serie, season, episode)
|
||||||
|
|
||||||
|
# Free users need to wait 30 seconds before they can get the video link
|
||||||
|
self._sleep(30, video_id, None)
|
||||||
|
|
||||||
|
return self.get_info(url, serie, season, episode, token, title)
|
||||||
|
|
||||||
|
|
||||||
|
class SdarotSeasonIE(SdarotBaseIE):
|
||||||
|
_VALID_URL = r'https://(?:www\.)?sdarot\.pm/watch/(?P<serie>\d+)-(?P<title>.*)?/season/(?P<season>[0-9]+)$'
|
||||||
|
_TEST = {
|
||||||
|
'url': 'https://www.sdarot.pm/watch/27-%D7%9E%D7%93-%D7%9E%D7%9F-mad-men/season/1',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '27-1',
|
||||||
|
'title': '%D7%9E%D7%93-%D7%9E%D7%9F-mad-men'
|
||||||
|
},
|
||||||
|
'playlist_count': 13
|
||||||
|
}
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
m = re.search(self._VALID_URL, url)
|
||||||
|
serie = m.group(1)
|
||||||
|
title = m.group(2)
|
||||||
|
season = m.group(3)
|
||||||
|
|
||||||
|
video_id = '%s-%s' % (serie, season)
|
||||||
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
episodes_count = len(re.findall(r'(data-episode)', webpage))
|
||||||
|
entries = []
|
||||||
|
tokens = {}
|
||||||
|
for i in range(episodes_count):
|
||||||
|
episode = i + 1
|
||||||
|
key = self.get_key(serie, season, episode)
|
||||||
|
token = self.get_token(url, serie, season, episode)
|
||||||
|
tokens[key] = token
|
||||||
|
|
||||||
|
# Free users need to wait 30 seconds before they can get the video link
|
||||||
|
self._sleep(30, video_id, None)
|
||||||
|
|
||||||
|
for i in range(episodes_count):
|
||||||
|
episode = i + 1
|
||||||
|
key = self.get_key(serie, season, episode)
|
||||||
|
token = tokens[key]
|
||||||
|
info = self.get_info(url, serie, season, episode, token, title)
|
||||||
|
entries.append(info)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'_type': 'playlist',
|
||||||
|
'entries': entries,
|
||||||
|
'id': video_id,
|
||||||
|
'title': title,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class SdarotSerieIE(SdarotBaseIE):
|
||||||
|
_VALID_URL = r'https://(?:www\.)?sdarot\.pm/watch/(?P<serie>\d+)-(?P<title>[A-Za-z0-9\%\-]+)$'
|
||||||
|
_TEST = {
|
||||||
|
'url': 'https://www.sdarot.pm/watch/27-%D7%9E%D7%93-%D7%9E%D7%9F-mad-men',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '27',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': '%D7%9E%D7%93-%D7%9E%D7%9F-mad-men'
|
||||||
|
},
|
||||||
|
'playlist': [],
|
||||||
|
'skip': 'too long for tests'
|
||||||
|
}
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
m = re.search(self._VALID_URL, url)
|
||||||
|
serie = m.group(1)
|
||||||
|
title = m.group(2)
|
||||||
|
|
||||||
|
video_id = '%s' % serie
|
||||||
|
|
||||||
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
seasons_count = len(re.findall(r'(data-season)', webpage))
|
||||||
|
|
||||||
|
entries = []
|
||||||
|
tokens = {}
|
||||||
|
|
||||||
|
for i in range(seasons_count):
|
||||||
|
season = i + 1
|
||||||
|
season_url = '%s/season/%s' % (url, season)
|
||||||
|
season_webpage = self._download_webpage(season_url, video_id)
|
||||||
|
episodes_count = len(re.findall(r'(data-episode)', season_webpage))
|
||||||
|
for x in range(episodes_count):
|
||||||
|
episode = x + 1
|
||||||
|
token = self.get_token(url, serie, season, episode)
|
||||||
|
key = self.get_key(serie, season, episode)
|
||||||
|
tokens[key] = token
|
||||||
|
|
||||||
|
# Free users need to wait 30 seconds before they can get the video link
|
||||||
|
self._sleep(30, video_id, None)
|
||||||
|
|
||||||
|
for i in range(seasons_count):
|
||||||
|
season = i + 1
|
||||||
|
season_url = '%s/season/%s' % (url, season)
|
||||||
|
season_webpage = self._download_webpage(season_url, video_id)
|
||||||
|
episodes_count = len(re.findall(r'(data-episode)', season_webpage))
|
||||||
|
for x in range(episodes_count):
|
||||||
|
episode = x + 1
|
||||||
|
key = self.get_key(serie, season, episode)
|
||||||
|
token = tokens[key]
|
||||||
|
info = self.get_info(url, serie, season, episode, token, title)
|
||||||
|
entries.append(info)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'_type': 'playlist',
|
||||||
|
'entries': entries,
|
||||||
|
'id': video_id,
|
||||||
|
'title': title
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user