diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 1bf5c51b4e..48683ebcc6 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -46,6 +46,7 @@ from .clipfish import ClipfishIE from .cliphunter import CliphunterIE from .clipsyndicate import ClipsyndicateIE +from .cloudy import CloudyIE from .clubic import ClubicIE from .cmt import CMTIE from .cnet import CNETIE diff --git a/youtube_dl/extractor/cloudy.py b/youtube_dl/extractor/cloudy.py new file mode 100644 index 0000000000..73c6e3d499 --- /dev/null +++ b/youtube_dl/extractor/cloudy.py @@ -0,0 +1,67 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..utils import ( + ExtractorError, + compat_parse_qs, + compat_urllib_parse, +) + + +class CloudyIE(InfoExtractor): + _VALID_URL = r'''(?x) + https?://(?:www\.)?cloudy\.ec/ + (?:v/|embed\.php\?id=) + (?P[A-Za-z0-9]+) + ''' + _API_URL = 'http://www.cloudy.ec/api/player.api.php?%s' + _TEST = { + 'url': 'https://www.cloudy.ec/v/af511e2527aac', + 'md5': '5cb253ace826a42f35b4740539bedf07', + 'info_dict': { + 'id': 'af511e2527aac', + 'ext': 'flv', + 'title': 'Funny Cats and Animals Compilation june 2013', + } + } + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + + url = 'http://www.cloudy.ec/embed.php?id=%s' % video_id + webpage = self._download_webpage(url, video_id) + + file_key = self._search_regex( + r'filekey\s*=\s*"([^"]+)"', webpage, 'file_key') + data_url = self._API_URL % compat_urllib_parse.urlencode({ + 'file': video_id, + 'key': file_key, + }) + player_data = self._download_webpage( + data_url, video_id, 'Downloading player data') + data = compat_parse_qs(player_data) + + if 'error' in data: + raise ExtractorError( + '%s error: %s' % (self.IE_NAME, ' '.join(data['error_msg'])), + expected=True) + + title = data.get('title', [None])[0] + if title: + title = title.replace('&asdasdas', '').strip() + + formats = [] + formats.append({ + 'format_id': 'sd', + 'url': data.get('url', [None])[0], + }) + + return { + 'id': video_id, + 'title': title, + 'formats': formats, + }