[vgtv] extract videos from FTV, Aftenposten, Aftonbladet using VGTVIE

master
remitamine 9 years ago
parent 721f5a277c
commit 00d24327ef
  1. 1
      youtube_dl/extractor/__init__.py
  2. 23
      youtube_dl/extractor/aftenposten.py
  3. 60
      youtube_dl/extractor/vgtv.py

@ -9,7 +9,6 @@ from .adobetv import (
AdobeTVVideoIE, AdobeTVVideoIE,
) )
from .adultswim import AdultSwimIE from .adultswim import AdultSwimIE
from .aftenposten import AftenpostenIE
from .aftonbladet import AftonbladetIE from .aftonbladet import AftonbladetIE
from .airmozilla import AirMozillaIE from .airmozilla import AirMozillaIE
from .aljazeera import AlJazeeraIE from .aljazeera import AlJazeeraIE

@ -1,23 +0,0 @@
# coding: utf-8
from __future__ import unicode_literals
from .common import InfoExtractor
class AftenpostenIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?aftenposten\.no/webtv/(?:#!/)?video/(?P<id>\d+)'
_TEST = {
'url': 'http://www.aftenposten.no/webtv/#!/video/21039/trailer-sweatshop-i-can-t-take-any-more',
'md5': 'fd828cd29774a729bf4d4425fe192972',
'info_dict': {
'id': '21039',
'ext': 'mov',
'title': 'TRAILER: "Sweatshop" - I can´t take any more',
'description': 'md5:21891f2b0dd7ec2f78d84a50e54f8238',
'timestamp': 1416927969,
'upload_date': '20141125',
}
}
def _real_extract(self, url):
return self.url_result('xstream:ap:%s' % self._match_id(url), 'Xstream')

@ -11,16 +11,17 @@ from ..utils import (
class VGTVIE(InfoExtractor): class VGTVIE(InfoExtractor):
IE_DESC = 'VGTV and BTTV' IE_DESC = 'VGTV, BTTV, FTV, Aftenposten, Aftonbladet'
_VALID_URL = r'''(?x) _VALID_URL = r'''(?x)
(?: (?:
vgtv:| vgtv:|
http://(?:www\.)? http://(?:www\.)?
) )
(?P<host>vgtv|bt) (?P<host>vgtv.no|(?:bt.no|aftenbladet.no)/tv|fvn.no/fvntv|aftenposten.no/webtv)
(?: (?:
:| :|
\.no/(?:tv/)?\#!/(?:video|live)/ /\#!/(?:video|live)/|
/embed?id=
) )
(?P<id>[0-9]+) (?P<id>[0-9]+)
''' '''
@ -59,17 +60,18 @@ class VGTVIE(InfoExtractor):
# m3u8 download # m3u8 download
'skip_download': True, 'skip_download': True,
}, },
'skip': 'Video is no longer available',
}, },
{ {
# streamType: live # streamType: wasLive
'url': 'http://www.vgtv.no/#!/live/113063/direkte-v75-fra-solvalla', 'url': 'http://www.vgtv.no/#!/live/113063/direkte-v75-fra-solvalla',
'info_dict': { 'info_dict': {
'id': '113063', 'id': '113063',
'ext': 'flv', 'ext': 'mp4',
'title': 're:^DIREKTE: V75 fra Solvalla [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$', 'title': 'V75 fra Solvalla 30.05.15',
'description': 'md5:b3743425765355855f88e096acc93231', 'description': 'md5:b3743425765355855f88e096acc93231',
'thumbnail': 're:^https?://.*\.jpg', 'thumbnail': 're:^https?://.*\.jpg',
'duration': 0, 'duration': 25966,
'timestamp': 1432975582, 'timestamp': 1432975582,
'upload_date': '20150530', 'upload_date': '20150530',
'view_count': int, 'view_count': int,
@ -78,26 +80,56 @@ class VGTVIE(InfoExtractor):
# m3u8 download # m3u8 download
'skip_download': True, 'skip_download': True,
}, },
},{
'url': 'http://www.aftenposten.no/webtv/#!/video/21039/trailer-sweatshop-i-can-t-take-any-more',
'md5': '7fbc265a3ca4933a423c7a66aa879a67',
'info_dict': {
'id': '21039',
'ext': 'mp4',
'title': 'TRAILER: «SWEATSHOP» - I can´t take any more',
'description': 'md5:21891f2b0dd7ec2f78d84a50e54f8238',
'duration': 66,
'timestamp': 1417002452,
'upload_date': '20141126',
'view_count': int,
}
}, },
{ {
'url': 'http://www.bt.no/tv/#!/video/100250/norling-dette-er-forskjellen-paa-1-divisjon-og-eliteserien', 'url': 'http://www.bt.no/tv/#!/video/100250/norling-dette-er-forskjellen-paa-1-divisjon-og-eliteserien',
'only_matching': True, 'only_matching': True,
}, },
] ]
_HOST_WEBSITES = {
'vgtv.no': {
'vendor': 'vgtv',
'appname': 'vgtv',
},
'bt.no/tv': {
'vendor': 'bt',
'appname': 'bttv',
},
'aftenbladet.no/tv': {
'vendor': 'sa',
'appname': 'satv',
},
'fvn.no/fvntv': {
'vendor': 'fvn',
'appname': 'fvntv',
},
'aftenposten.no/webtv': {
'vendor': 'ap',
'appname': 'aptv',
},
}
def _real_extract(self, url): def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url) mobj = re.match(self._VALID_URL, url)
video_id = mobj.group('id') video_id = mobj.group('id')
host = mobj.group('host') host = mobj.group('host')
HOST_WEBSITES = {
'vgtv': 'vgtv',
'bt': 'bttv',
}
data = self._download_json( data = self._download_json(
'http://svp.vg.no/svp/api/v1/%s/assets/%s?appName=%s-website' 'http://svp.vg.no/svp/api/v1/%s/assets/%s?appName=%s-website'
% (host, video_id, HOST_WEBSITES[host]), % (self._HOST_WEBSITES[host]['vendor'], video_id, self._HOST_WEBSITES[host]['appname']),
video_id, 'Downloading media JSON') video_id, 'Downloading media JSON')
if data.get('status') == 'inactive': if data.get('status') == 'inactive':
@ -144,7 +176,7 @@ class VGTVIE(InfoExtractor):
return { return {
'id': video_id, 'id': video_id,
'title': self._live_title(data['title']), 'title': self._live_title(data['title']) if stream_type == 'live' else data['title'],
'description': data['description'], 'description': data['description'],
'thumbnail': data['images']['main'] + '?t[]=900x506q80', 'thumbnail': data['images']['main'] + '?t[]=900x506q80',
'timestamp': data['published'], 'timestamp': data['published'],

Loading…
Cancel
Save