[liveleak] Support another liveleak embedding pattern (closes #13336)

pull/8/head
Yen Chi Hsuan 7 years ago
parent f8f18f332f
commit 09747ba766
No known key found for this signature in database
GPG Key ID: 3FDDD575826C5C30

@ -4,6 +4,9 @@ Core
* [cda] Fix extraction (closes #13935) * [cda] Fix extraction (closes #13935)
* [utils] Fix unescapeHTML for misformed string like "&a"" (#13935) * [utils] Fix unescapeHTML for misformed string like "&a"" (#13935)
Extractors
+ [liveleak] Support another liveleak embedding pattern (#13336)
version 2017.08.18 version 2017.08.18

@ -537,7 +537,10 @@ from .limelight import (
LimelightChannelListIE, LimelightChannelListIE,
) )
from .litv import LiTVIE from .litv import LiTVIE
from .liveleak import LiveLeakIE from .liveleak import (
LiveLeakIE,
LiveLeakEmbedIE,
)
from .livestream import ( from .livestream import (
LivestreamIE, LivestreamIE,
LivestreamOriginalIE, LivestreamOriginalIE,

@ -1519,14 +1519,27 @@ class GenericIE(InfoExtractor):
# LiveLeak embed # LiveLeak embed
{ {
'url': 'http://www.wykop.pl/link/3088787/', 'url': 'http://www.wykop.pl/link/3088787/',
'md5': 'ace83b9ed19b21f68e1b50e844fdf95d', 'md5': '7619da8c820e835bef21a1efa2a0fc71',
'info_dict': { 'info_dict': {
'id': '874_1459135191', 'id': '874_1459135191',
'ext': 'mp4', 'ext': 'mp4',
'title': 'Man shows poor quality of new apartment building', 'title': 'Man shows poor quality of new apartment building',
'description': 'The wall is like a sand pile.', 'description': 'The wall is like a sand pile.',
'uploader': 'Lake8737', 'uploader': 'Lake8737',
} },
'add_ie': [LiveLeakIE.ie_key()],
},
# Another LiveLeak embed pattern (#13336)
{
'url': 'https://milo.yiannopoulos.net/2017/06/concealed-carry-robbery/',
'info_dict': {
'id': '2eb_1496309988',
'ext': 'mp4',
'title': 'Thief robs place where everyone was armed',
'description': 'md5:694d73ee79e535953cf2488562288eee',
'uploader': 'brazilwtf',
},
'add_ie': [LiveLeakIE.ie_key()],
}, },
# Duplicated embedded video URLs # Duplicated embedded video URLs
{ {
@ -2757,9 +2770,9 @@ class GenericIE(InfoExtractor):
self._proto_relative_url(instagram_embed_url), InstagramIE.ie_key()) self._proto_relative_url(instagram_embed_url), InstagramIE.ie_key())
# Look for LiveLeak embeds # Look for LiveLeak embeds
liveleak_url = LiveLeakIE._extract_url(webpage) liveleak_urls = LiveLeakIE._extract_urls(webpage)
if liveleak_url: if liveleak_urls:
return self.url_result(liveleak_url, 'LiveLeak') return self.playlist_from_matches(liveleak_urls, video_id, video_title)
# Look for 3Q SDN embeds # Look for 3Q SDN embeds
threeqsdn_url = ThreeQSDNIE._extract_url(webpage) threeqsdn_url = ThreeQSDNIE._extract_url(webpage)

@ -75,12 +75,10 @@ class LiveLeakIE(InfoExtractor):
}] }]
@staticmethod @staticmethod
def _extract_url(webpage): def _extract_urls(webpage):
mobj = re.search( return re.findall(
r'<iframe[^>]+src="https?://(?:\w+\.)?liveleak\.com/ll_embed\?(?:.*?)i=(?P<id>[\w_]+)(?:.*)', r'<iframe[^>]+src="(https?://(?:\w+\.)?liveleak\.com/ll_embed\?[^"]*[if]=[\w_]+[^"]+)"',
webpage) webpage)
if mobj:
return 'http://www.liveleak.com/view?i=%s' % mobj.group('id')
def _real_extract(self, url): def _real_extract(self, url):
video_id = self._match_id(url) video_id = self._match_id(url)
@ -131,3 +129,30 @@ class LiveLeakIE(InfoExtractor):
}) })
return info_dict return info_dict
class LiveLeakEmbedIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?liveleak\.com/ll_embed\?.*?\b(?P<kind>[if])=(?P<id>[\w_]+)'
# See generic.py for actual test cases
_TESTS = [{
'url': 'https://www.liveleak.com/ll_embed?i=874_1459135191',
'only_matching': True,
}, {
'url': 'https://www.liveleak.com/ll_embed?f=ab065df993c1',
'only_matching': True,
}]
def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url)
kind, video_id = mobj.group('kind', 'id')
if kind == 'f':
webpage = self._download_webpage(url, video_id)
liveleak_url = self._search_regex(
r'logourl\s*:\s*(?P<q1>[\'"])(?P<url>%s)(?P=q1)' % LiveLeakIE._VALID_URL,
webpage, 'LiveLeak URL', group='url')
elif kind == 'i':
liveleak_url = 'http://www.liveleak.com/view?i=%s' % video_id
return self.url_result(liveleak_url, ie=LiveLeakIE.ie_key())

Loading…
Cancel
Save