diff options
| -rwxr-xr-x | devscripts/gh-pages/update-sites.py | 33 | ||||
| -rwxr-xr-x | devscripts/release.sh | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/metacafe.py | 2 | ||||
| -rw-r--r-- | youtube_dl/extractor/veehd.py | 56 | 
5 files changed, 92 insertions, 1 deletions
| diff --git a/devscripts/gh-pages/update-sites.py b/devscripts/gh-pages/update-sites.py new file mode 100755 index 000000000..fa4bb2beb --- /dev/null +++ b/devscripts/gh-pages/update-sites.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +import sys +import os +import textwrap + +# We must be able to import youtube_dl +sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) + +import youtube_dl + +def main(): +    with open('supportedsites.html.in', 'r', encoding='utf-8') as tmplf: +        template = tmplf.read() + +    ie_htmls = [] +    for ie in sorted(youtube_dl.gen_extractors(), key=lambda i: i.IE_NAME): +        ie_html = '<b>{}</b>'.format(ie.IE_NAME) +        try: +            ie_html += ': {}'.format(ie.IE_DESC) +        except AttributeError: +            pass +        if ie.working() == False: +            ie_html += ' (Currently broken)' +        ie_htmls.append('<li>{}</li>'.format(ie_html)) + +    template = template.replace('@SITES@', textwrap.indent('\n'.join(ie_htmls), '\t')) + +    with open('supportedsites.html', 'w', encoding='utf-8') as sitesf: +        sitesf.write(template) + +if __name__ == '__main__': +    main() diff --git a/devscripts/release.sh b/devscripts/release.sh index 24c9ad8d8..62c68a6cf 100755 --- a/devscripts/release.sh +++ b/devscripts/release.sh @@ -85,6 +85,7 @@ ROOT=$(pwd)      "$ROOT/devscripts/gh-pages/sign-versions.py" < "$ROOT/updates_key.pem"      "$ROOT/devscripts/gh-pages/generate-download.py"      "$ROOT/devscripts/gh-pages/update-copyright.py" +    "$ROOT/devscripts/gh-pages/update-sites.py"      git add *.html *.html.in update      git commit -m "release $version"      git show HEAD diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 90f1a4418..9f56e427c 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -89,6 +89,7 @@ from .tutv import TutvIE  from .unistra import UnistraIE  from .ustream import UstreamIE  from .vbox7 import Vbox7IE +from .veehd import VeeHDIE  from .veoh import VeohIE  from .vevo import VevoIE  from .videofyme import VideofyMeIE diff --git a/youtube_dl/extractor/metacafe.py b/youtube_dl/extractor/metacafe.py index e38dc98b4..e537648ff 100644 --- a/youtube_dl/extractor/metacafe.py +++ b/youtube_dl/extractor/metacafe.py @@ -122,7 +122,7 @@ class MetacafeIE(InfoExtractor):          video_title = self._html_search_regex(r'(?im)<title>(.*) - Video</title>', webpage, u'title')          description = self._og_search_description(webpage)          video_uploader = self._html_search_regex( -                r'submitter=(.*?);|googletag\.pubads\(\)\.setTargeting\("channel","([^"]+)"\);', +                r'submitter=(.*?);|googletag\.pubads\(\)\.setTargeting\("(?:channel|submiter)","([^"]+)"\);',                  webpage, u'uploader nickname', fatal=False)          return { diff --git a/youtube_dl/extractor/veehd.py b/youtube_dl/extractor/veehd.py new file mode 100644 index 000000000..3a99a29c6 --- /dev/null +++ b/youtube_dl/extractor/veehd.py @@ -0,0 +1,56 @@ +import re +import json + +from .common import InfoExtractor +from ..utils import ( +    compat_urlparse, +    get_element_by_id, +    clean_html, +) + +class VeeHDIE(InfoExtractor): +    _VALID_URL = r'https?://veehd.com/video/(?P<id>\d+)' + +    _TEST = { +        u'url': u'http://veehd.com/video/4686958', +        u'file': u'4686958.mp4', +        u'info_dict': { +            u'title': u'Time Lapse View from Space ( ISS)', +            u'uploader_id': u'spotted', +            u'description': u'md5:f0094c4cf3a72e22bc4e4239ef767ad7', +        }, +    } + +    def _real_extract(self, url): +        mobj = re.match(self._VALID_URL, url) +        video_id = mobj.group('id') + +        webpage = self._download_webpage(url, video_id) +        player_path = self._search_regex(r'\$\("#playeriframe"\).attr\({src : "(.+?)"', +            webpage, u'player path') +        player_url = compat_urlparse.urljoin(url, player_path) +        player_page = self._download_webpage(player_url, video_id, +            u'Downloading player page') +        config_json = self._search_regex(r'value=\'config=({.+?})\'', +            player_page, u'config json') +        config = json.loads(config_json) + +        video_url = compat_urlparse.unquote(config['clip']['url']) +        title = clean_html(get_element_by_id('videoName', webpage).rpartition('|')[0]) +        uploader_id = self._html_search_regex(r'<a href="/profile/\d+">(.+?)</a>', +            webpage, u'uploader') +        thumbnail = self._search_regex(r'<img id="veehdpreview" src="(.+?)"', +            webpage, u'thumbnail') +        description = self._html_search_regex(r'<td class="infodropdown".*?<div>(.*?)<ul', +            webpage, u'description', flags=re.DOTALL) + +        return { +            '_type': 'video', +            'id': video_id, +            'title': title, +            'url': video_url, +            'ext': 'mp4', +            'uploader_id': uploader_id, +            'thumbnail': thumbnail, +            'description': description, +        } | 
