diff options
| author | Philipp Hagemeister <phihag@phihag.de> | 2014-08-24 01:34:28 +0200 | 
|---|---|---|
| committer | Philipp Hagemeister <phihag@phihag.de> | 2014-08-24 01:34:28 +0200 | 
| commit | 30b871b0ca09ae6088d8a8a0f77bf4d25aa0cb5b (patch) | |
| tree | 5f7ebe4a1029794fe8f3217bb52ebb958b54427c | |
| parent | eb9da9b732c63309e8592729d3e048953086a308 (diff) | |
| parent | a54bda3ae2d659c9020668a638dccc3545a1ecb1 (diff) | |
Merge remote-tracking branch 'origin/master'
| -rw-r--r-- | youtube_dl/extractor/wat.py | 67 | 
1 files changed, 55 insertions, 12 deletions
| diff --git a/youtube_dl/extractor/wat.py b/youtube_dl/extractor/wat.py index a584e0896..1f330378a 100644 --- a/youtube_dl/extractor/wat.py +++ b/youtube_dl/extractor/wat.py @@ -2,27 +2,30 @@  from __future__ import unicode_literals  import re +import time +import hashlib  from .common import InfoExtractor  from ..utils import ( +    ExtractorError,      unified_strdate,  )  class WatIE(InfoExtractor): -    _VALID_URL = r'http://www\.wat\.tv/.*-(?P<shortID>.*?)_.*?\.html' +    _VALID_URL = r'http://www\.wat\.tv/video/(?P<display_id>.*)-(?P<short_id>.*?)_.*?\.html'      IE_NAME = 'wat.tv'      _TEST = { -        'url': 'http://www.wat.tv/video/world-war-philadelphia-vost-6bv55_2fjr7_.html', +        'url': 'http://www.wat.tv/video/soupe-figues-l-orange-aux-epices-6z1uz_2hvf7_.html', +        'md5': 'ce70e9223945ed26a8056d413ca55dc9',          'info_dict': { -            'id': '10631273', +            'id': '11713067', +            'display_id': 'soupe-figues-l-orange-aux-epices',              'ext': 'mp4', -            'title': 'World War Z - Philadelphia VOST', -            'description': 'La menace est partout. Que se passe-t-il à Philadelphia ?\r\nWORLD WAR Z, avec Brad Pitt, au cinéma le 3 juillet.\r\nhttp://www.worldwarz.fr', -        }, -        'params': { -            # Sometimes wat serves the whole file with the --test option -            'skip_download': True, +            'title': 'Soupe de figues à l\'orange et aux épices', +            'description': 'Retrouvez l\'émission "Petits plats en équilibre", diffusée le 18 août 2014.', +            'upload_date': '20140819', +            'duration': 120,          },      } @@ -36,13 +39,20 @@ class WatIE(InfoExtractor):          def real_id_for_chapter(chapter):              return chapter['tc_start'].split('-')[0]          mobj = re.match(self._VALID_URL, url) -        short_id = mobj.group('shortID') -        webpage = self._download_webpage(url, short_id) +        short_id = mobj.group('short_id') +        display_id = mobj.group('display_id') +        webpage = self._download_webpage(url, display_id or short_id)          real_id = self._search_regex(r'xtpage = ".*-(.*?)";', webpage, 'real id')          video_info = self.download_video_info(real_id) + +        if video_info.get('geolock'): +            raise ExtractorError('This content is not available in your area', expected=True) +          chapters = video_info['chapters']          first_chapter = chapters[0] +        files = video_info['files'] +        first_file = files[0]          if real_id_for_chapter(first_chapter) != real_id:              self.to_screen('Multipart video detected') @@ -61,12 +71,45 @@ class WatIE(InfoExtractor):              upload_date = unified_strdate(first_chapter['date_diffusion'])          # Otherwise we can continue and extract just one part, we have to use          # the short id for getting the video url + +        formats = [{ +            'url': 'http://wat.tv/get/android5/%s.mp4' % real_id, +            'format_id': 'Mobile', +        }] + +        fmts = [('SD', 'web')] +        if first_file.get('hasHD'): +            fmts.append(('HD', 'webhd')) + +        def compute_token(param): +            timestamp = '%08x' % int(time.time()) +            magic = '9b673b13fa4682ed14c3cfa5af5310274b514c4133e9b3a81e6e3aba009l2564' +            return '%s/%s' % (hashlib.md5((magic + param + timestamp).encode('ascii')).hexdigest(), timestamp) + +        for fmt in fmts: +            webid = '/%s/%s' % (fmt[1], real_id) +            video_url = self._download_webpage( +                'http://www.wat.tv/get%s?token=%s&getURL=1' % (webid, compute_token(webid)), +                real_id, +                'Downloding %s video URL' % fmt[0], +                'Failed to download %s video URL' % fmt[0], +                False) +            if not video_url: +                continue +            formats.append({ +                'url': video_url, +                'ext': 'mp4', +                'format_id': fmt[0], +            }) +          return {              'id': real_id, -            'url': 'http://wat.tv/get/android5/%s.mp4' % real_id, +            'display_id': display_id,              'title': first_chapter['title'],              'thumbnail': first_chapter['preview'],              'description': first_chapter['description'],              'view_count': video_info['views'],              'upload_date': upload_date, +            'duration': first_file['duration'], +            'formats': formats,          } | 
