youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

mgoon.py (2696B)


      1 # coding: utf-8
      2 from __future__ import unicode_literals
      3 
      4 import re
      5 
      6 from .common import InfoExtractor
      7 from ..utils import (
      8     ExtractorError,
      9     qualities,
     10     unified_strdate,
     11 )
     12 
     13 
     14 class MgoonIE(InfoExtractor):
     15     _VALID_URL = r'''(?x)https?://(?:www\.)?
     16     (?:(:?m\.)?mgoon\.com/(?:ch/(?:.+)/v|play/view)|
     17         video\.mgoon\.com)/(?P<id>[0-9]+)'''
     18     _API_URL = 'http://mpos.mgoon.com/player/video?id={0:}'
     19     _TESTS = [
     20         {
     21             'url': 'http://m.mgoon.com/ch/hi6618/v/5582148',
     22             'md5': 'dd46bb66ab35cf6d51cc812fd82da79d',
     23             'info_dict': {
     24                 'id': '5582148',
     25                 'uploader_id': 'hi6618',
     26                 'duration': 240.419,
     27                 'upload_date': '20131220',
     28                 'ext': 'mp4',
     29                 'title': 'md5:543aa4c27a4931d371c3f433e8cebebc',
     30                 'thumbnail': r're:^https?://.*\.jpg$',
     31             }
     32         },
     33         {
     34             'url': 'http://www.mgoon.com/play/view/5582148',
     35             'only_matching': True,
     36         },
     37         {
     38             'url': 'http://video.mgoon.com/5582148',
     39             'only_matching': True,
     40         },
     41     ]
     42 
     43     def _real_extract(self, url):
     44         mobj = re.match(self._VALID_URL, url)
     45         video_id = mobj.group('id')
     46 
     47         data = self._download_json(self._API_URL.format(video_id), video_id)
     48 
     49         if data.get('errorInfo', {}).get('code') != 'NONE':
     50             raise ExtractorError('%s encountered an error: %s' % (
     51                 self.IE_NAME, data['errorInfo']['message']), expected=True)
     52 
     53         v_info = data['videoInfo']
     54         title = v_info.get('v_title')
     55         thumbnail = v_info.get('v_thumbnail')
     56         duration = v_info.get('v_duration')
     57         upload_date = unified_strdate(v_info.get('v_reg_date'))
     58         uploader_id = data.get('userInfo', {}).get('u_alias')
     59         if duration:
     60             duration /= 1000.0
     61 
     62         age_limit = None
     63         if data.get('accessInfo', {}).get('code') == 'VIDEO_STATUS_ADULT':
     64             age_limit = 18
     65 
     66         formats = []
     67         get_quality = qualities(['360p', '480p', '720p', '1080p'])
     68         for fmt in data['videoFiles']:
     69             formats.append({
     70                 'format_id': fmt['label'],
     71                 'quality': get_quality(fmt['label']),
     72                 'url': fmt['url'],
     73                 'ext': fmt['format'],
     74 
     75             })
     76         self._sort_formats(formats)
     77 
     78         return {
     79             'id': video_id,
     80             'title': title,
     81             'formats': formats,
     82             'thumbnail': thumbnail,
     83             'duration': duration,
     84             'upload_date': upload_date,
     85             'uploader_id': uploader_id,
     86             'age_limit': age_limit,
     87         }