projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[streamango] Make title optional
[youtube-dl]
/
youtube_dl
/
extractor
/
hitbox.py
diff --git
a/youtube_dl/extractor/hitbox.py
b/youtube_dl/extractor/hitbox.py
index c51bc7ca4533f9bab6b78d4e6c927159f9f3510a..1d905dc81d925f89a5c8f7a4a23c1e62238d01b5 100644
(file)
--- a/
youtube_dl/extractor/hitbox.py
+++ b/
youtube_dl/extractor/hitbox.py
@@
-16,8
+16,8
@@
from ..utils import (
class HitboxIE(InfoExtractor):
IE_NAME = 'hitbox'
class HitboxIE(InfoExtractor):
IE_NAME = 'hitbox'
- _VALID_URL = r'https?://(?:www\.)?
hitbox\.tv/video
/(?P<id>[0-9]+)'
- _TEST
=
{
+ _VALID_URL = r'https?://(?:www\.)?
(?:hitbox|smashcast)\.tv/(?:[^/]+/)*videos?
/(?P<id>[0-9]+)'
+ _TEST
S = [
{
'url': 'http://www.hitbox.tv/video/203213',
'info_dict': {
'id': '203213',
'url': 'http://www.hitbox.tv/video/203213',
'info_dict': {
'id': '203213',
@@
-25,7
+25,7
@@
class HitboxIE(InfoExtractor):
'alt_title': 'hitboxlive - Aug 9th #6',
'description': '',
'ext': 'mp4',
'alt_title': 'hitboxlive - Aug 9th #6',
'description': '',
'ext': 'mp4',
- 'thumbnail': 're:^https?://.*\.jpg$',
+ 'thumbnail':
r
're:^https?://.*\.jpg$',
'duration': 215.1666,
'resolution': 'HD 720p',
'uploader': 'hitboxlive',
'duration': 215.1666,
'resolution': 'HD 720p',
'uploader': 'hitboxlive',
@@
-38,12
+38,15
@@
class HitboxIE(InfoExtractor):
# m3u8 download
'skip_download': True,
},
# m3u8 download
'skip_download': True,
},
- }
+ }, {
+ 'url': 'https://www.smashcast.tv/hitboxlive/videos/203213',
+ 'only_matching': True,
+ }]
def _extract_metadata(self, url, video_id):
thumb_base = 'https://edge.sf.hitbox.tv'
metadata = self._download_json(
def _extract_metadata(self, url, video_id):
thumb_base = 'https://edge.sf.hitbox.tv'
metadata = self._download_json(
- '%s/%s' % (url, video_id), video_id)
+ '%s/%s' % (url, video_id), video_id
, 'Downloading metadata JSON'
)
date = 'media_live_since'
media_type = 'livestream'
date = 'media_live_since'
media_type = 'livestream'
@@
-62,14
+65,15
@@
class HitboxIE(InfoExtractor):
views = int_or_none(video_meta.get('media_views'))
timestamp = parse_iso8601(video_meta.get(date), ' ')
categories = [video_meta.get('category_name')]
views = int_or_none(video_meta.get('media_views'))
timestamp = parse_iso8601(video_meta.get(date), ' ')
categories = [video_meta.get('category_name')]
- thumbs = [
- {'url': thumb_base + video_meta.get('media_thumbnail'),
- 'width': 320,
- 'height': 180},
- {'url': thumb_base + video_meta.get('media_thumbnail_large'),
- 'width': 768,
- 'height': 432},
- ]
+ thumbs = [{
+ 'url': thumb_base + video_meta.get('media_thumbnail'),
+ 'width': 320,
+ 'height': 180
+ }, {
+ 'url': thumb_base + video_meta.get('media_thumbnail_large'),
+ 'width': 768,
+ 'height': 432
+ }]
return {
'id': video_id,
return {
'id': video_id,
@@
-89,8
+93,8
@@
class HitboxIE(InfoExtractor):
video_id = self._match_id(url)
player_config = self._download_json(
video_id = self._match_id(url)
player_config = self._download_json(
- 'https://www.
hitbox
.tv/api/player/config/video/%s' % video_id,
- video_id)
+ 'https://www.
smashcast
.tv/api/player/config/video/%s' % video_id,
+ video_id
, 'Downloading video JSON'
)
formats = []
for video in player_config['clip']['bitrates']:
formats = []
for video in player_config['clip']['bitrates']:
@@
-120,8
+124,7
@@
class HitboxIE(InfoExtractor):
self._sort_formats(formats)
metadata = self._extract_metadata(
self._sort_formats(formats)
metadata = self._extract_metadata(
- 'https://www.hitbox.tv/api/media/video',
- video_id)
+ 'https://www.smashcast.tv/api/media/video', video_id)
metadata['formats'] = formats
return metadata
metadata['formats'] = formats
return metadata
@@
-129,8
+132,8
@@
class HitboxIE(InfoExtractor):
class HitboxLiveIE(HitboxIE):
IE_NAME = 'hitbox:live'
class HitboxLiveIE(HitboxIE):
IE_NAME = 'hitbox:live'
- _VALID_URL = r'https?://(?:www\.)?
hitbox\.tv/(?!video)(?P<id>.
+)'
- _TEST
=
{
+ _VALID_URL = r'https?://(?:www\.)?
(?:hitbox|smashcast)\.tv/(?P<id>[^/?#&]
+)'
+ _TEST
S = [
{
'url': 'http://www.hitbox.tv/dimak',
'info_dict': {
'id': 'dimak',
'url': 'http://www.hitbox.tv/dimak',
'info_dict': {
'id': 'dimak',
@@
-145,25
+148,31
@@
class HitboxLiveIE(HitboxIE):
# live
'skip_download': True,
},
# live
'skip_download': True,
},
- }
+ }, {
+ 'url': 'https://www.smashcast.tv/dimak',
+ 'only_matching': True,
+ }]
+
+ @classmethod
+ def suitable(cls, url):
+ return False if HitboxIE.suitable(url) else super(HitboxLiveIE, cls).suitable(url)
def _real_extract(self, url):
video_id = self._match_id(url)
def _real_extract(self, url):
video_id = self._match_id(url)
- metadata = self._extract_metadata(
- 'https://www.hitbox.tv/api/media/live',
- video_id)
-
player_config = self._download_json(
player_config = self._download_json(
- 'https://www.
hitbox
.tv/api/player/config/live/%s' % video_id,
+ 'https://www.
smashcast
.tv/api/player/config/live/%s' % video_id,
video_id)
formats = []
cdns = player_config.get('cdns')
servers = []
for cdn in cdns:
video_id)
formats = []
cdns = player_config.get('cdns')
servers = []
for cdn in cdns:
+ # Subscribe URLs are not playable
+ if cdn.get('rtmpSubscribe') is True:
+ continue
base_url = cdn.get('netConnectionUrl')
base_url = cdn.get('netConnectionUrl')
- host = re.search('.+\.([^\.]+\.[^\./]+)/.+', base_url).group(1)
+ host = re.search(
r
'.+\.([^\.]+\.[^\./]+)/.+', base_url).group(1)
if base_url not in servers:
servers.append(base_url)
for stream in cdn.get('bitrates'):
if base_url not in servers:
servers.append(base_url)
for stream in cdn.get('bitrates'):
@@
-194,9
+203,12
@@
class HitboxLiveIE(HitboxIE):
'page_url': url,
'player_url': 'http://www.hitbox.tv/static/player/flowplayer/flowplayer.commercial-3.2.16.swf',
})
'page_url': url,
'player_url': 'http://www.hitbox.tv/static/player/flowplayer/flowplayer.commercial-3.2.16.swf',
})
-
self._sort_formats(formats)
self._sort_formats(formats)
+
+ metadata = self._extract_metadata(
+ 'https://www.smashcast.tv/api/media/live', video_id)
metadata['formats'] = formats
metadata['is_live'] = True
metadata['title'] = self._live_title(metadata.get('title'))
metadata['formats'] = formats
metadata['is_live'] = True
metadata['title'] = self._live_title(metadata.get('title'))
+
return metadata
return metadata