diff options
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/imdb.py | 59 | 
2 files changed, 60 insertions, 0 deletions
| diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 0b4d086b7..30e4a9105 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -71,6 +71,7 @@ from .hotnewhiphop import HotNewHipHopIE  from .howcast import HowcastIE  from .hypem import HypemIE  from .ign import IGNIE, OneUPIE +from .imdb import ImdbIE  from .ina import InaIE  from .infoq import InfoQIE  from .instagram import InstagramIE diff --git a/youtube_dl/extractor/imdb.py b/youtube_dl/extractor/imdb.py new file mode 100644 index 000000000..07e4f7d29 --- /dev/null +++ b/youtube_dl/extractor/imdb.py @@ -0,0 +1,59 @@ +import re +import json + +from .common import InfoExtractor +from ..utils import ( +    compat_urlparse, +    get_element_by_attribute, +) + + +class ImdbIE(InfoExtractor): +    IE_NAME = u'imdb' +    IE_DESC = u'Internet Movie Database trailers' +    _VALID_URL = r'http://www\.imdb\.com/video/imdb/vi(?P<id>\d+)' + +    _TEST = { +        u'url': u'http://www.imdb.com/video/imdb/vi2524815897', +        u'md5': u'9f34fa777ade3a6e57a054fdbcb3a068', +        u'info_dict': { +            u'id': u'2524815897', +            u'ext': u'mp4', +            u'title': u'Ice Age: Continental Drift Trailer (No. 2) - IMDb', +            u'description': u'md5:9061c2219254e5d14e03c25c98e96a81', +            u'duration': 151, +        } +    } + +    def _real_extract(self, url): +        mobj = re.match(self._VALID_URL, url) +        video_id = mobj.group('id') +        webpage = self._download_webpage(url,video_id) +        descr = get_element_by_attribute('itemprop', 'description', webpage) +        available_formats = re.findall( +            r'case \'(?P<f_id>.*?)\' :$\s+url = \'(?P<path>.*?)\'', webpage, +            flags=re.MULTILINE) +        formats = [] +        for f_id, f_path in available_formats: +            format_page = self._download_webpage( +                compat_urlparse.urljoin(url, f_path), +                u'Downloading info for %s format' % f_id) +            json_data = get_element_by_attribute('class', 'imdb-player-data', +                format_page) +            info = json.loads(json_data) +            format_info = info['videoPlayerObject']['video'] +            formats.append({ +                'format_id': f_id, +                'url': format_info['url'], +                'height': format_info['height'], +                'width': format_info['width'], +            }) + +        return { +            'id': video_id, +            'title': self._og_search_title(webpage), +            'formats': formats, +            'description': descr, +            'thumbnail': format_info['slate'], +            'duration': int(info['titleObject']['title']['duration_seconds']), +        } | 
