Add extractor for Engadget and 5min (closes #2465)
engadget.com uses the generic 5min.com service.
This commit is contained in:
parent
aa488e1385
commit
933a5b3792
3 changed files with 101 additions and 0 deletions
|
@ -64,6 +64,7 @@ from .ehow import EHowIE
|
||||||
from .eighttracks import EightTracksIE
|
from .eighttracks import EightTracksIE
|
||||||
from .eitb import EitbIE
|
from .eitb import EitbIE
|
||||||
from .elpais import ElPaisIE
|
from .elpais import ElPaisIE
|
||||||
|
from .engadget import EngadgetIE
|
||||||
from .escapist import EscapistIE
|
from .escapist import EscapistIE
|
||||||
from .everyonesmixtape import EveryonesMixtapeIE
|
from .everyonesmixtape import EveryonesMixtapeIE
|
||||||
from .exfm import ExfmIE
|
from .exfm import ExfmIE
|
||||||
|
@ -72,6 +73,7 @@ from .facebook import FacebookIE
|
||||||
from .faz import FazIE
|
from .faz import FazIE
|
||||||
from .firstpost import FirstpostIE
|
from .firstpost import FirstpostIE
|
||||||
from .firsttv import FirstTVIE
|
from .firsttv import FirstTVIE
|
||||||
|
from .fivemin import FiveMinIE
|
||||||
from .fktv import (
|
from .fktv import (
|
||||||
FKTVIE,
|
FKTVIE,
|
||||||
FKTVPosteckeIE,
|
FKTVPosteckeIE,
|
||||||
|
|
43
youtube_dl/extractor/engadget.py
Normal file
43
youtube_dl/extractor/engadget.py
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
from .common import InfoExtractor
|
||||||
|
from .fivemin import FiveMinIE
|
||||||
|
from ..utils import (
|
||||||
|
url_basename,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class EngadgetIE(InfoExtractor):
|
||||||
|
_VALID_URL = r'''(?x)https?://www.engadget.com/
|
||||||
|
(?:video/5min/(?P<id>\d+)|
|
||||||
|
[\d/]+/.*?)
|
||||||
|
'''
|
||||||
|
|
||||||
|
_TEST = {
|
||||||
|
'url': 'http://www.engadget.com/video/5min/518153925/',
|
||||||
|
'md5': 'c6820d4828a5064447a4d9fc73f312c9',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '518153925',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Samsung Galaxy Tab Pro 8.4 Review',
|
||||||
|
},
|
||||||
|
'add_ie': ['FiveMin'],
|
||||||
|
}
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
mobj = re.match(self._VALID_URL, url)
|
||||||
|
video_id = mobj.group('id')
|
||||||
|
|
||||||
|
if video_id is not None:
|
||||||
|
return FiveMinIE._build_result(video_id)
|
||||||
|
else:
|
||||||
|
title = url_basename(url)
|
||||||
|
webpage = self._download_webpage(url, title)
|
||||||
|
ids = re.findall(r'<iframe[^>]+?playList=(\d+)', webpage)
|
||||||
|
return {
|
||||||
|
'_type': 'playlist',
|
||||||
|
'title': title,
|
||||||
|
'entries': [FiveMinIE._build_result(id) for id in ids]
|
||||||
|
}
|
56
youtube_dl/extractor/fivemin.py
Normal file
56
youtube_dl/extractor/fivemin.py
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
from .common import InfoExtractor
|
||||||
|
from ..utils import (
|
||||||
|
compat_str,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class FiveMinIE(InfoExtractor):
|
||||||
|
IE_NAME = '5min'
|
||||||
|
_VALID_URL = r'''(?x)
|
||||||
|
(?:https?://[^/]*?5min\.com/Scripts/PlayerSeed\.js\?(.*?&)?playList=|
|
||||||
|
5min:)
|
||||||
|
(?P<id>\d+)
|
||||||
|
'''
|
||||||
|
|
||||||
|
_TEST = {
|
||||||
|
# From http://www.engadget.com/2013/11/15/ipad-mini-retina-display-review/
|
||||||
|
'url': 'http://pshared.5min.com/Scripts/PlayerSeed.js?sid=281&width=560&height=345&playList=518013791',
|
||||||
|
'md5': '4f7b0b79bf1a470e5004f7112385941d',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '518013791',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'iPad Mini with Retina Display Review',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _build_result(cls, video_id):
|
||||||
|
return cls.url_result('5min:%s' % video_id, cls.ie_key())
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
mobj = re.match(self._VALID_URL, url)
|
||||||
|
video_id = mobj.group('id')
|
||||||
|
info = self._download_json(
|
||||||
|
'https://syn.5min.com/handlers/SenseHandler.ashx?func=GetResults&'
|
||||||
|
'playlist=%s&url=https' % video_id,
|
||||||
|
video_id)['binding'][0]
|
||||||
|
|
||||||
|
second_id = compat_str(int(video_id[:-2]) + 1)
|
||||||
|
formats = []
|
||||||
|
for quality, height in [(1, 320), (2, 480), (4, 720), (8, 1080)]:
|
||||||
|
if any(r['ID'] == quality for r in info['Renditions']):
|
||||||
|
formats.append({
|
||||||
|
'format_id': compat_str(quality),
|
||||||
|
'url': 'http://avideos.5min.com/%s/%s/%s_%s.mp4' % (second_id[-3:], second_id, video_id, quality),
|
||||||
|
'height': height,
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'title': info['Title'],
|
||||||
|
'formats': formats,
|
||||||
|
}
|
Loading…
Reference in a new issue