~facundo/encuentro/trunk

« back to all changes in this revision

Viewing changes to external/youtube-dl/youtube_dl/extractor/tele13.py

  • Committer: Facundo Batista
  • Date: 2015-12-27 11:27:15 UTC
  • mto: This revision was merged to the branch mainline in revision 274.
  • Revision ID: facundo@taniquetil.com.ar-20151227112715-ztuasdhqm26hycug
Able to download TEDx.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# coding: utf-8
 
2
from __future__ import unicode_literals
 
3
 
 
4
from .common import InfoExtractor
 
5
from .youtube import YoutubeIE
 
6
from ..utils import (
 
7
    js_to_json,
 
8
    qualities,
 
9
    determine_ext,
 
10
)
 
11
 
 
12
 
 
13
class Tele13IE(InfoExtractor):
 
14
    _VALID_URL = r'^http://(?:www\.)?t13\.cl/videos(?:/[^/]+)+/(?P<id>[\w-]+)'
 
15
    _TESTS = [
 
16
        {
 
17
            'url': 'http://www.t13.cl/videos/actualidad/el-circulo-de-hierro-de-michelle-bachelet-en-su-regreso-a-la-moneda',
 
18
            'md5': '4cb1fa38adcad8fea88487a078831755',
 
19
            'info_dict': {
 
20
                'id': 'el-circulo-de-hierro-de-michelle-bachelet-en-su-regreso-a-la-moneda',
 
21
                'ext': 'mp4',
 
22
                'title': 'El círculo de hierro de Michelle Bachelet en su regreso a La Moneda',
 
23
            },
 
24
            'params': {
 
25
                # HTTP Error 404: Not Found
 
26
                'skip_download': True,
 
27
            },
 
28
        },
 
29
        {
 
30
            'url': 'http://www.t13.cl/videos/mundo/tendencias/video-captan-misteriosa-bola-fuego-cielos-bangkok',
 
31
            'md5': '867adf6a3b3fef932c68a71d70b70946',
 
32
            'info_dict': {
 
33
                'id': 'rOoKv2OMpOw',
 
34
                'ext': 'mp4',
 
35
                'title': 'Shooting star seen on 7-Sep-2015',
 
36
                'description': 'md5:7292ff2a34b2f673da77da222ae77e1e',
 
37
                'uploader': 'Porjai Jaturongkhakun',
 
38
                'upload_date': '20150906',
 
39
                'uploader_id': 'UCnLY_3ezwNcDSC_Wc6suZxw',
 
40
            },
 
41
            'add_ie': ['Youtube'],
 
42
        }
 
43
    ]
 
44
 
 
45
    def _real_extract(self, url):
 
46
        display_id = self._match_id(url)
 
47
        webpage = self._download_webpage(url, display_id)
 
48
 
 
49
        setup_js = self._search_regex(r"(?s)jwplayer\('player-vivo'\).setup\((\{.*?\})\)", webpage, 'setup code')
 
50
        sources = self._parse_json(self._search_regex(r'sources\s*:\s*(\[[^\]]+\])', setup_js, 'sources'), display_id, js_to_json)
 
51
 
 
52
        preference = qualities(['Móvil', 'SD', 'HD'])
 
53
        formats = []
 
54
        urls = []
 
55
        for f in sources:
 
56
            format_url = f['file']
 
57
            if format_url and format_url not in urls:
 
58
                ext = determine_ext(format_url)
 
59
                if ext == 'm3u8':
 
60
                    m3u8_formats = self._extract_m3u8_formats(format_url, display_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
 
61
                    if m3u8_formats:
 
62
                        formats.extend(m3u8_formats)
 
63
                elif YoutubeIE.suitable(format_url):
 
64
                    return self.url_result(format_url, 'Youtube')
 
65
                else:
 
66
                    formats.append({
 
67
                        'url': format_url,
 
68
                        'format_id': f.get('label'),
 
69
                        'preference': preference(f.get('label')),
 
70
                        'ext': ext,
 
71
                    })
 
72
                urls.append(format_url)
 
73
        self._sort_formats(formats)
 
74
 
 
75
        return {
 
76
            'id': display_id,
 
77
            'title': self._search_regex(r'title\s*:\s*"([^"]+)"', setup_js, 'title'),
 
78
            'description': self._html_search_meta('description', webpage, 'description'),
 
79
            'thumbnail': self._search_regex(r'image\s*:\s*"([^"]+)"', setup_js, 'thumbnail', default=None),
 
80
            'formats': formats,
 
81
        }