diff options
| -rw-r--r-- | youtube_dl/extractor/funnyordie.py | 7 | ||||
| -rw-r--r-- | youtube_dl/extractor/soundcloud.py | 5 | ||||
| -rw-r--r-- | youtube_dl/extractor/statigram.py | 12 | ||||
| -rw-r--r-- | youtube_dl/extractor/vevo.py | 6 | ||||
| -rw-r--r-- | youtube_dl/extractor/vimeo.py | 41 | ||||
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 2 | 
6 files changed, 45 insertions, 28 deletions
| diff --git a/youtube_dl/extractor/funnyordie.py b/youtube_dl/extractor/funnyordie.py index 67a7e5f76..4508f0dfa 100644 --- a/youtube_dl/extractor/funnyordie.py +++ b/youtube_dl/extractor/funnyordie.py @@ -21,17 +21,14 @@ class FunnyOrDieIE(InfoExtractor):          video_id = mobj.group('id')          webpage = self._download_webpage(url, video_id) -        video_url = self._html_search_regex(r'<video[^>]*>\s*<source[^>]*>\s*<source src="(?P<url>[^"]+)"', +        video_url = self._search_regex(r'type: "video/mp4", src: "(.*?)"',              webpage, u'video URL', flags=re.DOTALL) -        title = self._html_search_regex((r"<h1 class='player_page_h1'.*?>(?P<title>.*?)</h1>", -            r'<title>(?P<title>[^<]+?)</title>'), webpage, 'title', flags=re.DOTALL) -          info = {              'id': video_id,              'url': video_url,              'ext': 'mp4', -            'title': title, +            'title': self._og_search_title(webpage),              'description': self._og_search_description(webpage),          }          return [info] diff --git a/youtube_dl/extractor/soundcloud.py b/youtube_dl/extractor/soundcloud.py index 7c9f1c6b6..5f3a5540d 100644 --- a/youtube_dl/extractor/soundcloud.py +++ b/youtube_dl/extractor/soundcloud.py @@ -4,6 +4,7 @@ import re  from .common import InfoExtractor  from ..utils import (      compat_str, +    compat_urlparse,      ExtractorError,      unified_strdate, @@ -22,6 +23,7 @@ class SoundcloudIE(InfoExtractor):      _VALID_URL = r'''^(?:https?://)?                      (?:(?:(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)/?(?:[?].*)?$)                         |(?:api\.soundcloud\.com/tracks/(?P<track_id>\d+)) +                       |(?P<widget>w.soundcloud.com/player/?.*?url=.*)                      )                      '''      IE_NAME = u'soundcloud' @@ -79,6 +81,9 @@ class SoundcloudIE(InfoExtractor):          if track_id is not None:              info_json_url = 'http://api.soundcloud.com/tracks/' + track_id + '.json?client_id=' + self._CLIENT_ID              full_title = track_id +        elif mobj.group('widget'): +            query = compat_urlparse.parse_qs(compat_urlparse.urlparse(url).query) +            return self.url_result(query['url'][0], ie='Soundcloud')          else:              # extract uploader (which is in the url)              uploader = mobj.group(1) diff --git a/youtube_dl/extractor/statigram.py b/youtube_dl/extractor/statigram.py index b8e6b3bf9..1ea4a9f2f 100644 --- a/youtube_dl/extractor/statigram.py +++ b/youtube_dl/extractor/statigram.py @@ -5,13 +5,13 @@ from .common import InfoExtractor  class StatigramIE(InfoExtractor):      _VALID_URL = r'(?:http://)?(?:www\.)?statigr\.am/p/([^/]+)'      _TEST = { -        u'url': u'http://statigr.am/p/484091715184808010_284179915', -        u'file': u'484091715184808010_284179915.mp4', -        u'md5': u'deda4ff333abe2e118740321e992605b', +        u'url': u'http://statigr.am/p/522207370455279102_24101272', +        u'file': u'522207370455279102_24101272.mp4', +        u'md5': u'6eb93b882a3ded7c378ee1d6884b1814',          u'info_dict': { -            u"uploader_id": u"videoseconds",  -            u"title": u"Instagram photo by @videoseconds" -        } +            u'uploader_id': u'aguynamedpatrick', +            u'title': u'Instagram photo by @aguynamedpatrick (Patrick Janelle)', +        },      }      def _real_extract(self, url): diff --git a/youtube_dl/extractor/vevo.py b/youtube_dl/extractor/vevo.py index 14abd58e8..70408c4f0 100644 --- a/youtube_dl/extractor/vevo.py +++ b/youtube_dl/extractor/vevo.py @@ -11,14 +11,14 @@ class VevoIE(InfoExtractor):      Accepts urls from vevo.com or in the format 'vevo:{id}'      (currently used by MTVIE)      """ -    _VALID_URL = r'((http://www.vevo.com/watch/.*?/.*?/)|(vevo:))(?P<id>.*)$' +    _VALID_URL = r'((http://www.vevo.com/watch/.*?/.*?/)|(vevo:))(?P<id>.*?)(\?|$)'      _TEST = {          u'url': u'http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280',          u'file': u'GB1101300280.mp4',          u'md5': u'06bea460acb744eab74a9d7dcb4bfd61',          u'info_dict': { -            u"upload_date": u"20130624",  -            u"uploader": u"Hurts",  +            u"upload_date": u"20130624", +            u"uploader": u"Hurts",              u"title": u"Somebody to Die For"          }      } diff --git a/youtube_dl/extractor/vimeo.py b/youtube_dl/extractor/vimeo.py index cc9c8d018..512e06e2a 100644 --- a/youtube_dl/extractor/vimeo.py +++ b/youtube_dl/extractor/vimeo.py @@ -20,18 +20,31 @@ class VimeoIE(InfoExtractor):      _VALID_URL = r'(?P<proto>https?://)?(?:(?:www|player)\.)?vimeo(?P<pro>pro)?\.com/(?:(?:(?:groups|album)/[^/]+)|(?:.*?)/)?(?P<direct_link>play_redirect_hls\?clip_id=)?(?:videos?/)?(?P<id>[0-9]+)(?:[?].*)?$'      _NETRC_MACHINE = 'vimeo'      IE_NAME = u'vimeo' -    _TEST = { -        u'url': u'http://vimeo.com/56015672', -        u'file': u'56015672.mp4', -        u'md5': u'8879b6cc097e987f02484baf890129e5', -        u'info_dict': { -            u"upload_date": u"20121220",  -            u"description": u"This is a test case for youtube-dl.\nFor more information, see github.com/rg3/youtube-dl\nTest chars: \u2605 \" ' \u5e78 / \\ \u00e4 \u21ad \U0001d550",  -            u"uploader_id": u"user7108434",  -            u"uploader": u"Filippo Valsorda",  -            u"title": u"youtube-dl test video - \u2605 \" ' \u5e78 / \\ \u00e4 \u21ad \U0001d550" -        } -    } +    _TESTS = [ +        { +            u'url': u'http://vimeo.com/56015672', +            u'file': u'56015672.mp4', +            u'md5': u'8879b6cc097e987f02484baf890129e5', +            u'info_dict': { +                u"upload_date": u"20121220",  +                u"description": u"This is a test case for youtube-dl.\nFor more information, see github.com/rg3/youtube-dl\nTest chars: \u2605 \" ' \u5e78 / \\ \u00e4 \u21ad \U0001d550",  +                u"uploader_id": u"user7108434",  +                u"uploader": u"Filippo Valsorda",  +                u"title": u"youtube-dl test video - \u2605 \" ' \u5e78 / \\ \u00e4 \u21ad \U0001d550", +            }, +        }, +        { +            u'url': u'http://vimeopro.com/openstreetmapus/state-of-the-map-us-2013/video/68093876', +            u'file': u'68093876.mp4', +            u'md5': u'3b5ca6aa22b60dfeeadf50b72e44ed82', +            u'note': u'Vimeo Pro video (#1197)', +            u'info_dict': { +                u'uploader_id': u'openstreetmapus',  +                u'uploader': u'OpenStreetMap US',  +                u'title': u'Andy Allan - Putting the Carto into OpenStreetMap Cartography', +            }, +        }, +    ]      def _login(self):          (username, password) = self._get_login_info() @@ -83,7 +96,9 @@ class VimeoIE(InfoExtractor):          video_id = mobj.group('id')          if not mobj.group('proto'):              url = 'https://' + url -        if mobj.group('direct_link') or mobj.group('pro'): +        elif mobj.group('pro'): +            url = 'http://player.vimeo.com/video/' + video_id +        elif mobj.group('direct_link'):              url = 'https://vimeo.com/' + video_id          # Retrieve video webpage to extract further information diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 1599dd484..7d6d07b17 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -333,7 +333,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):                  u"upload_date": u"20120506",                  u"title": u"Icona Pop - I Love It (feat. Charli XCX) [OFFICIAL VIDEO]",                  u"description": u"md5:b085c9804f5ab69f4adea963a2dceb3c", -                u"uploader": u"IconaPop", +                u"uploader": u"Icona Pop",                  u"uploader_id": u"IconaPop"              }          }, | 
