aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl/extractor/nhk.py
blob: 691bdfa4efd750940b0d5896a1c8ccc23b221c28 (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
from __future__ import unicode_literals

from .common import InfoExtractor


class NhkVodIE(InfoExtractor):
    _VALID_URL = r'https?://www3\.nhk\.or\.jp/nhkworld/en/vod/(?P<id>.+?)\.html'
    _TEST = {
        # Videos available only for a limited period of time. Visit
        # http://www3.nhk.or.jp/nhkworld/en/vod/ for working samples.
        'url': 'http://www3.nhk.or.jp/nhkworld/en/vod/tokyofashion/20160815.html',
        'info_dict': {
            'id': 'A1bnNiNTE6nY3jLllS-BIISfcC_PpvF5',
            'ext': 'flv',
            'title': 'TOKYO FASHION EXPRESS - The Kimono as Global Fashion',
            'description': 'md5:db338ee6ce8204f415b754782f819824',
            'series': 'TOKYO FASHION EXPRESS',
            'episode': 'The Kimono as Global Fashion',
        },
        'skip': 'Videos available only for a limited period of time',
    }

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

        webpage = self._download_webpage(url, video_id)

        embed_code = self._search_regex(
            r'nw_vod_ooplayer\([^,]+,\s*(["\'])(?P<id>(?:(?!\1).)+)\1',
            webpage, 'ooyala embed code', group='id')

        title = self._search_regex(
            r'<div[^>]+class=["\']episode-detail["\']>\s*<h\d+>([^<]+)',
            webpage, 'title', default=None)
        description = self._html_search_regex(
            r'(?s)<p[^>]+class=["\']description["\'][^>]*>(.+?)</p>',
            webpage, 'description', default=None)
        series = self._search_regex(
            r'<h2[^>]+class=["\']detail-top-player-title[^>]+><a[^>]+>([^<]+)',
            webpage, 'series', default=None)

        return {
            '_type': 'url_transparent',
            'ie_key': 'Ooyala',
            'url': 'ooyala:%s' % embed_code,
            'title': '%s - %s' % (series, title) if series and title else title,
            'description': description,
            'series': series,
            'episode': title,
        }