def OpenUrl(self, url): """ Open a URI; return urllib.request.Request object """ if download_npo.Verbose(): print('OpenUrl url: ' + url) headers = { 'User-Agent': 'Opera/9.80 (X11; FreeBSD 9.1-RELEASE-p3 amd64) Presto/2.12.388 Version/12.15', 'Cookie': 'npo_cc=tmp; npo_cc_www.npogeschiedenis.nl=tmp', } req = urllib2.Request(url, headers=headers) try: return urllib2.urlopen(req) except urllib2.HTTPError: raise download_npo.DownloadNpoError( 'De URL {} is niet gevonden (404 error)'.format(url))
def FindVideo(self, url, quality=0): """ Find video to download Returns (downloadurl, pagetitle, playerId, extension)""" if not (url.startswith('http://') or url.startswith('https://')): url = 'http://%s' % url page = self.GetPage(url) try: jsurl = re.search('data-url="(.*?)"', page).groups()[0] playerId = re.search('sourceid_string:(\d+)', jsurl).groups()[0] except AttributeError: raise download_npo.DownloadNpoError('Kan playerId niet vinden') meta = self.Meta(playerId) streams = meta['clipData']['assets'] streams.sort(key=lambda v: int(v['bandwidth']), reverse=True) url = streams[0]['src'] return (self.OpenUrl(url), meta['clipData'].get('title'), playerId, 'mp4')
def FindVideo(self, url, quality=0): """ Find video to download Returns (downloadurl, playerId, extension)""" if not (url.startswith('http://') or url.startswith('https://')): url = 'http://www.npo.nl/%s' % url page = self.GetPage(url) page = unquote(page) if download_npo.Verbose() >= 3: print('page: %s' % page) try: playerId = re.search(self._playerid_regex, page).groups()[0] except AttributeError: raise download_npo.DownloadNpoError('Kan playerId niet vinden') if download_npo.Verbose(): print('Using playerId ' + playerId) #{"token":"h4i536f2104v7aepeonjm83s51"} try: token = json.loads( self.GetPage('http://ida.omroep.nl/app.php/auth'))['token'] except AttributeError: raise download_npo.DownloadNpoError('Kan token niet vinden') if download_npo.Verbose(): print('Found token ' + token) meta = self.Meta(playerId) if meta.get('error') and len(meta['error']) > 1: raise download_npo.DownloadNpoError( 'Site geeft aan dat er iets fout is: {}'.format(meta['error'])) ext = 'mp4' if meta.get('items') and type(meta['items'][0][0]) == dict: # Radiouitendingen ext = meta['items'][0][0].get('type', 'mp4') # MMS / Windows Media Speler if meta['items'][0][0].get('formaat') == 'wmv': return self.FindVideo_MMS(playerId) # http://ida.omroep.nl/app.php/POW_03414349?adaptive=no&token=djo0nv08rdk46iq7kijrvtktr3 streams = self.GetJSON( 'http://ida.omroep.nl/app.php/{}?adaptive=no&token={}'.format( playerId, token)) url = None errors = [] for q, stream in enumerate(streams['items'][0][quality:]): if not stream['contentType'] == 'url' and not stream[ 'contentType'] == 'audio': stream = self.GetJSON(stream['url']) if stream.get('errorstring'): # Dit is vooral voor regionale afleveringen (lijkt het ...) if meta.get('items') and len(meta['items'][0]) > 0: url = meta['items'][0][0]['url'] break else: sys.stderr.write( "Warning: De kwaliteit `%s' lijkt niet beschikbaar.\n" % ['hoog', 'middel', 'laag'][q]) sys.stderr.flush() errors.append(stream.get('errorstring')) else: url = stream['url'] break else: if stream['contentType'] == 'audio': ext = stream['format'] url = stream['url'] if url is None: raise download_npo.DownloadNpoError("Foutmelding van site: `%s'" % ', '.join(errors)) return (self.OpenUrl(url), playerId, ext)
def List(self): raise download_npo.DownloadNpoError( 'Dit is niet ondersteund voor deze site')
def Subs(self, playerId): raise download_npo.DownloadNpoError( 'Deze site ondersteund geen ondertitels')
def Meta(self, playerId): raise download_npo.DownloadNpoError('Not implemented')
def FindVideo(self, url, quality=0): raise download_npo.DownloadNpoError('Not implemented')