aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl/extractor/hitbox.py
blob: 239da3cd4738d27c62c990a7a72c1dea1ef26f07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# coding: utf-8
from __future__ import unicode_literals

from .common import InfoExtractor
from ..utils import (
    unified_strdate,
)


class HitboxIE(InfoExtractor):
    _VALID_URL = r'https?://(?:www\.)?hitbox\.tv/video/(?P<id>[0-9]+)'
    _TESTS = [{
        'url': 'http://www.hitbox.tv/video/358062',
        'info_dict': {
            'id': '358062',
            'title': 'Megaman',
            'alt_title': 'Megaman',
            'description': '',
            'ext': 'mp4',
            'thumbnail': 're:^https?://.*\.jpg$',
            'duration': 3834,
            'resolution': 'SD 480p',
            'uploader_id': 'supergreatfriend',
            'view_count': int,
            'upload_date': '20141225',
            'categories': [None],
        },
        'params': {
            # m3u8 download
            'skip_download': True,
        },
    }, {
        'url': 'http://www.hitbox.tv/video/203213',
        'info_dict': {
            'id': '203213',
            'title': 'hitbox @ gamescom, Sub Button Hype extended, Giveaway - hitbox News Update with Oxy',
            'alt_title': 'hitboxlive - Aug 9th #6',
            'description': '',
            'ext': 'mp4',
            'thumbnail': 're:^https?://.*\.jpg$',
            'duration': 215,
            'resolution': 'HD 720p',
            'uploader_id': 'hitboxlive',
            'view_count': int,
            'upload_date': '20140809',
            'categories': ['Live Show'],
        },
        'params': {
            # m3u8 download
            'skip_download': True,
        },
    }]

    def _real_extract(self, url):
        video_id = self._match_id(url)

        thumb_base = 'https://edge.sf.hitbox.tv'
        metadata = self._download_json(
            'https://www.hitbox.tv/api/media/video/%s' % (video_id), video_id
        )

        video_meta = metadata.get('video', [])[0]
        title = video_meta.get('media_status')
        alt_title = video_meta.get('media_title')
        description = video_meta.get('media_description')
        duration = int(float(video_meta.get('media_duration')))
        uploader = video_meta.get('media_user_name')
        views = int(video_meta.get('media_views'))
        upload_date = unified_strdate(video_meta.get('media_date_added'))
        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},
        ]

        player_config = self._download_json(
            'https://www.hitbox.tv/api/player/config/video/%s' % (video_id),
            video_id
        )

        clip = player_config.get('clip')
        video_url = clip.get('url')
        res = clip.get('bitrates', [])[0].get('label')

        return {
            'id': video_id,
            'title': title,
            'alt_title': alt_title,
            'description': description,
            'url': video_url,
            'ext': 'mp4',
            'thumbnails': thumbs,
            'duration': duration,
            'resolution': res,
            'uploader_id': uploader,
            'view_count': views,
            'upload_date': upload_date,
            'categories': categories,
            'protocol': 'm3u8',
        }