youtube-dl

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

skynewsarabia.py (5382B)


      1 # coding: utf-8
      2 from __future__ import unicode_literals
      3 
      4 from .common import InfoExtractor
      5 from ..compat import compat_str
      6 from ..utils import (
      7     parse_iso8601,
      8     parse_duration,
      9 )
     10 
     11 
     12 class SkyNewsArabiaBaseIE(InfoExtractor):
     13     _IMAGE_BASE_URL = 'http://www.skynewsarabia.com/web/images'
     14 
     15     def _call_api(self, path, value):
     16         return self._download_json('http://api.skynewsarabia.com/web/rest/v2/%s/%s.json' % (path, value), value)
     17 
     18     def _get_limelight_media_id(self, url):
     19         return self._search_regex(r'/media/[^/]+/([a-z0-9]{32})', url, 'limelight media id')
     20 
     21     def _get_image_url(self, image_path_template, width='1600', height='1200'):
     22         return self._IMAGE_BASE_URL + image_path_template.format(width=width, height=height)
     23 
     24     def _extract_video_info(self, video_data):
     25         video_id = compat_str(video_data['id'])
     26         topic = video_data.get('topicTitle')
     27         return {
     28             '_type': 'url_transparent',
     29             'url': 'limelight:media:%s' % self._get_limelight_media_id(video_data['videoUrl'][0]['url']),
     30             'id': video_id,
     31             'title': video_data['headline'],
     32             'description': video_data.get('summary'),
     33             'thumbnail': self._get_image_url(video_data['mediaAsset']['imageUrl']),
     34             'timestamp': parse_iso8601(video_data.get('date')),
     35             'duration': parse_duration(video_data.get('runTime')),
     36             'tags': video_data.get('tags', []),
     37             'categories': [topic] if topic else [],
     38             'webpage_url': 'http://www.skynewsarabia.com/web/video/%s' % video_id,
     39             'ie_key': 'LimelightMedia',
     40         }
     41 
     42 
     43 class SkyNewsArabiaIE(SkyNewsArabiaBaseIE):
     44     IE_NAME = 'skynewsarabia:video'
     45     _VALID_URL = r'https?://(?:www\.)?skynewsarabia\.com/web/video/(?P<id>[0-9]+)'
     46     _TEST = {
     47         'url': 'http://www.skynewsarabia.com/web/video/794902/%D9%86%D8%B5%D9%81-%D9%85%D9%84%D9%8A%D9%88%D9%86-%D9%85%D8%B5%D8%A8%D8%A7%D8%AD-%D8%B4%D8%AC%D8%B1%D8%A9-%D9%83%D8%B1%D9%8A%D8%B3%D9%85%D8%A7%D8%B3',
     48         'info_dict': {
     49             'id': '794902',
     50             'ext': 'flv',
     51             'title': 'نصف مليون مصباح على شجرة كريسماس',
     52             'description': 'md5:22f1b27f0850eeb10c7e59b1f16eb7c6',
     53             'upload_date': '20151128',
     54             'timestamp': 1448697198,
     55             'duration': 2119,
     56         },
     57         'params': {
     58             # rtmp download
     59             'skip_download': True,
     60         },
     61     }
     62 
     63     def _real_extract(self, url):
     64         video_id = self._match_id(url)
     65         video_data = self._call_api('video', video_id)
     66         return self._extract_video_info(video_data)
     67 
     68 
     69 class SkyNewsArabiaArticleIE(SkyNewsArabiaBaseIE):
     70     IE_NAME = 'skynewsarabia:article'
     71     _VALID_URL = r'https?://(?:www\.)?skynewsarabia\.com/web/article/(?P<id>[0-9]+)'
     72     _TESTS = [{
     73         'url': 'http://www.skynewsarabia.com/web/article/794549/%D8%A7%D9%94%D8%AD%D8%AF%D8%A7%D8%AB-%D8%A7%D9%84%D8%B4%D8%B1%D9%82-%D8%A7%D9%84%D8%A7%D9%94%D9%88%D8%B3%D8%B7-%D8%AE%D8%B1%D9%8A%D8%B7%D8%A9-%D8%A7%D9%84%D8%A7%D9%94%D9%84%D8%B9%D8%A7%D8%A8-%D8%A7%D9%84%D8%B0%D9%83%D9%8A%D8%A9',
     74         'info_dict': {
     75             'id': '794549',
     76             'ext': 'flv',
     77             'title': 'بالفيديو.. ألعاب ذكية تحاكي واقع المنطقة',
     78             'description': 'md5:0c373d29919a851e080ee4edd0c5d97f',
     79             'upload_date': '20151126',
     80             'timestamp': 1448559336,
     81             'duration': 281.6,
     82         },
     83         'params': {
     84             # rtmp download
     85             'skip_download': True,
     86         },
     87     }, {
     88         'url': 'http://www.skynewsarabia.com/web/article/794844/%D8%A7%D8%B3%D8%AA%D9%87%D8%AF%D8%A7%D9%81-%D9%82%D9%88%D8%A7%D8%B1%D8%A8-%D8%A7%D9%94%D8%B3%D9%84%D8%AD%D8%A9-%D9%84%D9%85%D9%8A%D9%84%D9%8A%D8%B4%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D9%88%D8%AB%D9%8A-%D9%88%D8%B5%D8%A7%D9%84%D8%AD',
     89         'info_dict': {
     90             'id': '794844',
     91             'title': 'إحباط تهريب أسلحة لميليشيات الحوثي وصالح بجنوب اليمن',
     92             'description': 'md5:5c927b8b2e805796e7f693538d96fc7e',
     93         },
     94         'playlist_mincount': 2,
     95     }]
     96 
     97     def _real_extract(self, url):
     98         article_id = self._match_id(url)
     99         article_data = self._call_api('article', article_id)
    100         media_asset = article_data['mediaAsset']
    101         if media_asset['type'] == 'VIDEO':
    102             topic = article_data.get('topicTitle')
    103             return {
    104                 '_type': 'url_transparent',
    105                 'url': 'limelight:media:%s' % self._get_limelight_media_id(media_asset['videoUrl'][0]['url']),
    106                 'id': article_id,
    107                 'title': article_data['headline'],
    108                 'description': article_data.get('summary'),
    109                 'thumbnail': self._get_image_url(media_asset['imageUrl']),
    110                 'timestamp': parse_iso8601(article_data.get('date')),
    111                 'tags': article_data.get('tags', []),
    112                 'categories': [topic] if topic else [],
    113                 'webpage_url': url,
    114                 'ie_key': 'LimelightMedia',
    115             }
    116         entries = [self._extract_video_info(item) for item in article_data.get('inlineItems', []) if item['type'] == 'VIDEO']
    117         return self.playlist_result(entries, article_id, article_data['headline'], article_data.get('summary'))