Merge remote-tracking branch 'upstream/master'
This commit is contained in:
		@@ -21,17 +21,14 @@ class FunnyOrDieIE(InfoExtractor):
 | 
				
			|||||||
        video_id = mobj.group('id')
 | 
					        video_id = mobj.group('id')
 | 
				
			||||||
        webpage = self._download_webpage(url, video_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)
 | 
					            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 = {
 | 
					        info = {
 | 
				
			||||||
            'id': video_id,
 | 
					            'id': video_id,
 | 
				
			||||||
            'url': video_url,
 | 
					            'url': video_url,
 | 
				
			||||||
            'ext': 'mp4',
 | 
					            'ext': 'mp4',
 | 
				
			||||||
            'title': title,
 | 
					            'title': self._og_search_title(webpage),
 | 
				
			||||||
            'description': self._og_search_description(webpage),
 | 
					            'description': self._og_search_description(webpage),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return [info]
 | 
					        return [info]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ import re
 | 
				
			|||||||
from .common import InfoExtractor
 | 
					from .common import InfoExtractor
 | 
				
			||||||
from ..utils import (
 | 
					from ..utils import (
 | 
				
			||||||
    compat_str,
 | 
					    compat_str,
 | 
				
			||||||
 | 
					    compat_urlparse,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ExtractorError,
 | 
					    ExtractorError,
 | 
				
			||||||
    unified_strdate,
 | 
					    unified_strdate,
 | 
				
			||||||
@@ -22,6 +23,7 @@ class SoundcloudIE(InfoExtractor):
 | 
				
			|||||||
    _VALID_URL = r'''^(?:https?://)?
 | 
					    _VALID_URL = r'''^(?:https?://)?
 | 
				
			||||||
                    (?:(?:(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)/?(?:[?].*)?$)
 | 
					                    (?:(?:(?:www\.)?soundcloud\.com/([\w\d-]+)/([\w\d-]+)/?(?:[?].*)?$)
 | 
				
			||||||
                       |(?:api\.soundcloud\.com/tracks/(?P<track_id>\d+))
 | 
					                       |(?:api\.soundcloud\.com/tracks/(?P<track_id>\d+))
 | 
				
			||||||
 | 
					                       |(?P<widget>w.soundcloud.com/player/?.*?url=.*)
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    '''
 | 
					                    '''
 | 
				
			||||||
    IE_NAME = u'soundcloud'
 | 
					    IE_NAME = u'soundcloud'
 | 
				
			||||||
@@ -79,6 +81,9 @@ class SoundcloudIE(InfoExtractor):
 | 
				
			|||||||
        if track_id is not None:
 | 
					        if track_id is not None:
 | 
				
			||||||
            info_json_url = 'http://api.soundcloud.com/tracks/' + track_id + '.json?client_id=' + self._CLIENT_ID
 | 
					            info_json_url = 'http://api.soundcloud.com/tracks/' + track_id + '.json?client_id=' + self._CLIENT_ID
 | 
				
			||||||
            full_title = track_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:
 | 
					        else:
 | 
				
			||||||
            # extract uploader (which is in the url)
 | 
					            # extract uploader (which is in the url)
 | 
				
			||||||
            uploader = mobj.group(1)
 | 
					            uploader = mobj.group(1)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,13 +5,13 @@ from .common import InfoExtractor
 | 
				
			|||||||
class StatigramIE(InfoExtractor):
 | 
					class StatigramIE(InfoExtractor):
 | 
				
			||||||
    _VALID_URL = r'(?:http://)?(?:www\.)?statigr\.am/p/([^/]+)'
 | 
					    _VALID_URL = r'(?:http://)?(?:www\.)?statigr\.am/p/([^/]+)'
 | 
				
			||||||
    _TEST = {
 | 
					    _TEST = {
 | 
				
			||||||
        u'url': u'http://statigr.am/p/484091715184808010_284179915',
 | 
					        u'url': u'http://statigr.am/p/522207370455279102_24101272',
 | 
				
			||||||
        u'file': u'484091715184808010_284179915.mp4',
 | 
					        u'file': u'522207370455279102_24101272.mp4',
 | 
				
			||||||
        u'md5': u'deda4ff333abe2e118740321e992605b',
 | 
					        u'md5': u'6eb93b882a3ded7c378ee1d6884b1814',
 | 
				
			||||||
        u'info_dict': {
 | 
					        u'info_dict': {
 | 
				
			||||||
            u"uploader_id": u"videoseconds", 
 | 
					            u'uploader_id': u'aguynamedpatrick',
 | 
				
			||||||
            u"title": u"Instagram photo by @videoseconds"
 | 
					            u'title': u'Instagram photo by @aguynamedpatrick (Patrick Janelle)',
 | 
				
			||||||
        }
 | 
					        },
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _real_extract(self, url):
 | 
					    def _real_extract(self, url):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,14 +11,14 @@ class VevoIE(InfoExtractor):
 | 
				
			|||||||
    Accepts urls from vevo.com or in the format 'vevo:{id}'
 | 
					    Accepts urls from vevo.com or in the format 'vevo:{id}'
 | 
				
			||||||
    (currently used by MTVIE)
 | 
					    (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 = {
 | 
					    _TEST = {
 | 
				
			||||||
        u'url': u'http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280',
 | 
					        u'url': u'http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280',
 | 
				
			||||||
        u'file': u'GB1101300280.mp4',
 | 
					        u'file': u'GB1101300280.mp4',
 | 
				
			||||||
        u'md5': u'06bea460acb744eab74a9d7dcb4bfd61',
 | 
					        u'md5': u'06bea460acb744eab74a9d7dcb4bfd61',
 | 
				
			||||||
        u'info_dict': {
 | 
					        u'info_dict': {
 | 
				
			||||||
            u"upload_date": u"20130624", 
 | 
					            u"upload_date": u"20130624",
 | 
				
			||||||
            u"uploader": u"Hurts", 
 | 
					            u"uploader": u"Hurts",
 | 
				
			||||||
            u"title": u"Somebody to Die For"
 | 
					            u"title": u"Somebody to Die For"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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]+)(?:[?].*)?$'
 | 
					    _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'
 | 
					    _NETRC_MACHINE = 'vimeo'
 | 
				
			||||||
    IE_NAME = u'vimeo'
 | 
					    IE_NAME = u'vimeo'
 | 
				
			||||||
    _TEST = {
 | 
					    _TESTS = [
 | 
				
			||||||
        u'url': u'http://vimeo.com/56015672',
 | 
					        {
 | 
				
			||||||
        u'file': u'56015672.mp4',
 | 
					            u'url': u'http://vimeo.com/56015672',
 | 
				
			||||||
        u'md5': u'8879b6cc097e987f02484baf890129e5',
 | 
					            u'file': u'56015672.mp4',
 | 
				
			||||||
        u'info_dict': {
 | 
					            u'md5': u'8879b6cc097e987f02484baf890129e5',
 | 
				
			||||||
            u"upload_date": u"20121220", 
 | 
					            u'info_dict': {
 | 
				
			||||||
            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"upload_date": u"20121220", 
 | 
				
			||||||
            u"uploader_id": u"user7108434", 
 | 
					                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": u"Filippo Valsorda", 
 | 
					                u"uploader_id": u"user7108434", 
 | 
				
			||||||
            u"title": u"youtube-dl test video - \u2605 \" ' \u5e78 / \\ \u00e4 \u21ad \U0001d550"
 | 
					                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):
 | 
					    def _login(self):
 | 
				
			||||||
        (username, password) = self._get_login_info()
 | 
					        (username, password) = self._get_login_info()
 | 
				
			||||||
@@ -83,7 +96,9 @@ class VimeoIE(InfoExtractor):
 | 
				
			|||||||
        video_id = mobj.group('id')
 | 
					        video_id = mobj.group('id')
 | 
				
			||||||
        if not mobj.group('proto'):
 | 
					        if not mobj.group('proto'):
 | 
				
			||||||
            url = 'https://' + url
 | 
					            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
 | 
					            url = 'https://vimeo.com/' + video_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Retrieve video webpage to extract further information
 | 
					        # Retrieve video webpage to extract further information
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -333,7 +333,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
				
			|||||||
                u"upload_date": u"20120506",
 | 
					                u"upload_date": u"20120506",
 | 
				
			||||||
                u"title": u"Icona Pop - I Love It (feat. Charli XCX) [OFFICIAL VIDEO]",
 | 
					                u"title": u"Icona Pop - I Love It (feat. Charli XCX) [OFFICIAL VIDEO]",
 | 
				
			||||||
                u"description": u"md5:b085c9804f5ab69f4adea963a2dceb3c",
 | 
					                u"description": u"md5:b085c9804f5ab69f4adea963a2dceb3c",
 | 
				
			||||||
                u"uploader": u"IconaPop",
 | 
					                u"uploader": u"Icona Pop",
 | 
				
			||||||
                u"uploader_id": u"IconaPop"
 | 
					                u"uploader_id": u"IconaPop"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user