コード例 #1
0
ファイル: sites.py プロジェクト: mwesten/download-npo
    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))
コード例 #2
0
ファイル: sites.py プロジェクト: mwesten/download-npo
    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')
コード例 #3
0
ファイル: sites.py プロジェクト: mwesten/download-npo
    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)
コード例 #4
0
ファイル: sites.py プロジェクト: mwesten/download-npo
 def List(self):
     raise download_npo.DownloadNpoError(
         'Dit is niet ondersteund voor deze site')
コード例 #5
0
ファイル: sites.py プロジェクト: mwesten/download-npo
 def Subs(self, playerId):
     raise download_npo.DownloadNpoError(
         'Deze site ondersteund geen ondertitels')
コード例 #6
0
ファイル: sites.py プロジェクト: mwesten/download-npo
 def Meta(self, playerId):
     raise download_npo.DownloadNpoError('Not implemented')
コード例 #7
0
ファイル: sites.py プロジェクト: mwesten/download-npo
 def FindVideo(self, url, quality=0):
     raise download_npo.DownloadNpoError('Not implemented')