|
|
@ -12,7 +12,7 @@ from ..utils import (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class InstagramIE(InfoExtractor):
|
|
|
|
class InstagramIE(InfoExtractor):
|
|
|
|
_VALID_URL = r'https?://(?:www\.)?instagram\.com/p/(?P<id>[^/?#&]+)'
|
|
|
|
_VALID_URL = r'(?P<url>https?://(?:www\.)?instagram\.com/p/(?P<id>[^/?#&]+))'
|
|
|
|
_TESTS = [{
|
|
|
|
_TESTS = [{
|
|
|
|
'url': 'https://instagram.com/p/aye83DjauH/?foo=bar#abc',
|
|
|
|
'url': 'https://instagram.com/p/aye83DjauH/?foo=bar#abc',
|
|
|
|
'md5': '0d2da106a9d2631273e192b372806516',
|
|
|
|
'md5': '0d2da106a9d2631273e192b372806516',
|
|
|
@ -38,6 +38,9 @@ class InstagramIE(InfoExtractor):
|
|
|
|
}, {
|
|
|
|
}, {
|
|
|
|
'url': 'https://instagram.com/p/-Cmh1cukG2/',
|
|
|
|
'url': 'https://instagram.com/p/-Cmh1cukG2/',
|
|
|
|
'only_matching': True,
|
|
|
|
'only_matching': True,
|
|
|
|
|
|
|
|
}, {
|
|
|
|
|
|
|
|
'url': 'http://instagram.com/p/9o6LshA7zy/embed/',
|
|
|
|
|
|
|
|
'only_matching': True,
|
|
|
|
}]
|
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
@staticmethod
|
|
|
@ -53,7 +56,9 @@ class InstagramIE(InfoExtractor):
|
|
|
|
return mobj.group('link')
|
|
|
|
return mobj.group('link')
|
|
|
|
|
|
|
|
|
|
|
|
def _real_extract(self, url):
|
|
|
|
def _real_extract(self, url):
|
|
|
|
video_id = self._match_id(url)
|
|
|
|
mobj = re.match(self._VALID_URL, url)
|
|
|
|
|
|
|
|
video_id = mobj.group('id')
|
|
|
|
|
|
|
|
url = mobj.group('url')
|
|
|
|
|
|
|
|
|
|
|
|
webpage = self._download_webpage(url, video_id)
|
|
|
|
webpage = self._download_webpage(url, video_id)
|
|
|
|
uploader_id = self._search_regex(r'"owner":{"username":"(.+?)"',
|
|
|
|
uploader_id = self._search_regex(r'"owner":{"username":"(.+?)"',
|
|
|
|