def resolve(self, item, captcha_cb=None, select_cb=None):
        result = []
        resolved = []
        item = item.copy()
        url = self._url(item['url'])
        data = util.substr(util.request(url), 'async type', '</script>')
        print 'data start ----'
        print data
        print 'data end ----'
        playlist = re.search(
            '''new mfJWPlayer.+?(?P<jsondata>playlist:.+?)events:''', data,
            re.MULTILINE | re.DOTALL)
        print 'playlist start ----'
        print playlist
        print 'playlist end ----'
        jsondata = re.sub(
            ' +', ' ', '{%s' %
            playlist.group('jsondata').replace('file:', '"file":').replace(
                'label:', '"label":').replace('kind:', '"kind":').replace(
                    'default:', '"default":').replace(
                        'true', '"true"').replace('],', ']')) + '}'
        print 'jsondata start ----'
        print jsondata
        print 'jsondata end ----'
        jsondata = demjson.decode(jsondata)

        for playlist_item in jsondata['playlist']:
            video_url = resolver.findstreams([playlist_item['file']])
            subs = playlist_item['tracks']
            if video_url and subs:
                for i in video_url:
                    i['subs'] = self.base_url[:-1] + subs[0]['file']
            resolved += video_url[:]

            if not resolved:
                raise ResolveException('Video nenalezeno')

            for i in resolved:
                item = self.video_item()
                try:
                    item['title'] = i['title']
                except KeyError:
                    pass
                item['url'] = i['url']
                item['quality'] = i['quality']
                item['surl'] = i['surl']
                item['subs'] = i['subs']
                item['headers'] = i['headers']
                try:
                    item['fmt'] = i['fmt']
                except KeyError:
                    pass
                result.append(item)

        if len(result) > 0 and select_cb:
            return select_cb(result)

        return result
def resolve(url):
    data = re.search(r'<script[^\.]+?\.setup\(([^\)]+?)\);', util.request(url), re.I | re.S)
    if data:
        data = demjson.decode(data.group(1).decode('string_escape'))
        if 'sources' in data:
            result = []
            for source in data['sources']:
                result.append({'url': source['file'], 'quality': source['label']})
            return result
    return None
    def resolve(self, item, captcha_cb=None, select_cb=None):
        result = []
        resolved = []
        item = item.copy()
        url = self._url(item['url'])
        data = util.substr(util.request(url), 'async type', '</script>')
        print 'data start ----'
        print data
        print 'data end ----'
        playlist = re.search('''new mfJWPlayer.+?(?P<jsondata>playlist:.+?)events:''',
                             data, re.MULTILINE | re.DOTALL)
        print 'playlist start ----'
        print playlist
        print 'playlist end ----'
        jsondata = re.sub(' +',
                          ' ',
                          '{%s' % playlist.group('jsondata').replace('file:','"file":').replace('label:','"label":').replace('kind:','"kind":').replace('default:','"default":').replace('true','"true"').replace('],',']'))+'}'
        print 'jsondata start ----'
        print jsondata
        print 'jsondata end ----'
        jsondata = demjson.decode(jsondata)

        for playlist_item in jsondata['playlist']:
            playlist_item['file'] = playlist_item['file'].replace('time_continue=1&', '')
            video_url = resolver.findstreams([playlist_item['file']])
            subs = playlist_item['tracks']
            if video_url and subs:
                for i in video_url:
                    i['subs'] = self.base_url[:-1]+subs[0]['file']
            resolved += video_url[:]

            if not resolved:
                raise ResolveException('Video nenalezeno')

            for i in resolved:
                item = self.video_item()
                try:
                    item['title'] = i['title']
                except KeyError:
                    pass
                item['url'] = i['url']
                item['quality'] = i['quality']
                item['surl'] = i['surl']
                item['subs'] = i['subs']
                item['headers'] = i['headers']
                try:
                    item['fmt'] = i['fmt']
                except KeyError:
                    pass
                result.append(item)

        if len(result) > 0 and select_cb:
            return select_cb(result)
            
        return result
Exemple #4
0
def resolve(url):
    data = re.search(r'<script[^\.]+?\.setup\(([^\)]+?)\);', util.request(url),
                     re.I | re.S)
    if data:
        data = demjson.decode(data.group(1).decode('string_escape'))
        if 'sources' in data:
            result = []
            for source in data['sources']:
                result.append({
                    'url': source['file'],
                    'quality': source['label']
                })
            return result
    return None
def resolve(url):
    data = re.search(r'<script[^\.]+?\.setup\((.+?)\);', util.request(url), re.I | re.S)
    if data:
        data = data.group(1).decode('string_escape')
        data = re.sub(r'\w+\(([^\)]+?)\)', r'\1', data)  # Strip JS functions
        data = demjson.decode(data)
        if 'playlist' in data:
            result = []
            for stream in data['playlist']:
                if 'tracks' in stream:
                    for track in stream['tracks']:
                        result.append({'url': stream['file'], 'subs': track['file'],
                                       'lang': ' %s subtitles' % track['label']})
                else:
                    result.append({'url': stream['file']})
            return result
    return None
def extract_jwplayer_setup(data):
    """
    Extracts jwplayer setup configuration and returns it as a dictionary.

    :param data: A string to extract the setup from
    :return: A dictionary containing the setup configuration
    """
    data = re.search(r'<script.+?}\(\'(.+)\',\d+,\d+,\'([\w\|]+)\'.*</script>', data, re.I | re.S)
    if data:
        replacements = data.group(2).split('|')
        data = data.group(1)
        for i in reversed(range(len(replacements))):
            if len(replacements[i]) > 0:
                data = re.sub(r'\b%s\b' % int_to_base(i, 36), replacements[i], data)
        data = re.search(r'\.setup\(([^\)]+?)\);', data)
        if data:
            return demjson.decode(data.group(1).decode('string_escape'))
    return None
Exemple #7
0
def resolve(url):
    cookies = {}
    result = []
    util.init_urllib(cookies)
    id = re.search(r'.*player/flash/(?P<url>.+)', url).group('url')
    r = util.request('http://myvi.ru/player/api/Video/Get/%s?sig' % id)
    jsondata = demjson.decode(r)
    playlist = jsondata['sprutoData']['playlist'][0]
    uuid = pickle.loads(
        util._cookie_jar.dump())['.myvi.ru']['/']['UniversalUserID']
    for f in playlist['video']:
        streamurl = f['url']
        streamurl += '|Cookie=UniversalUserID%3D' + urllib.quote(uuid.value)
        streamurl += '&User-Agent=' + UA
        result.append({'url': streamurl})
    if result:
        return result
    else:
        return None
def resolve(url):
    cookies = {}
    result = []
    util.init_urllib(cookies)
    id = re.search(r'.*player/flash/(?P<url>.+)', url).group('url')
    r = util.request('http://myvi.ru/player/api/Video/Get/%s?sig' % id)
    jsondata = demjson.decode(r)
    playlist = jsondata['sprutoData']['playlist'][0]
    uuid = pickle.loads(util._cookie_jar.dump())[
        '.myvi.ru']['/']['UniversalUserID']
    for f in playlist['video']:
        streamurl = f['url']
        streamurl += '|Cookie=UniversalUserID%3D' + urllib.quote(uuid.value)
        streamurl += '&User-Agent=' + UA
        result.append({'url': streamurl})
    if result:
        return result
    else:
        return None
def extract_jwplayer_setup(data):
    """
    Extracts jwplayer setup configuration and returns it as a dictionary.

    :param data: A string to extract the setup from
    :return: A dictionary containing the setup configuration
    """
    data = re.search(r'<script.+?}\(\'(.+)\',\d+,\d+,\'([\w\|]+)\'.*</script>',
                     data, re.I | re.S)
    if data:
        replacements = data.group(2).split('|')
        data = data.group(1)
        for i in reversed(range(len(replacements))):
            if len(replacements[i]) > 0:
                data = re.sub(r'\b%s\b' % int_to_base(i, 36), replacements[i],
                              data)
        data = re.search(r'\.setup\(([^\)]+?)\);', data)
        if data:
            return demjson.decode(data.group(1).decode('string_escape'))
    return None
def resolve(url):
    realurl = re.search(r'<iframe src="([^"]+)".*', util.request(url), re.I | re.S).group(1)
    data = re.search(r'<script[^\.]+?\.setup\((.+?)\);', util.request(realurl), re.I | re.S)
    if data:
        data = data.group(1).decode('string_escape')
        data = re.sub(r'\w+\(([^\)]+?)\)', r'\1', data) # Strip JS functions
        data = re.sub(r': *([^"][a-zA-Z]+)',r':"\1"', data) # Fix incorrect JSON
        data = demjson.decode(data)
        if 'sources' in data:
            result = []
            for source in data['sources']:           
                if 'tracks' in data:                                                        
                    for track in data['tracks']:                                            
                        result.append({
                                       'url': source['file'],
                                      'subs': track['file'],
                                      'lang': ' %s subtitles' % track['label']
                                       })
            return result
    return None
Exemple #11
0
def resolve(url):
    realurl = re.search(r'<iframe src="([^"]+)".*', util.request(url),
                        re.I | re.S).group(1)
    data = re.search(r'<script[^\.]+?\.setup\((.+?)\);', util.request(realurl),
                     re.I | re.S)
    if data:
        data = data.group(1).decode('string_escape')
        data = re.sub(r'\w+\(([^\)]+?)\)', r'\1', data)  # Strip JS functions
        data = re.sub(r': *([^"][a-zA-Z]+)', r':"\1"',
                      data)  # Fix incorrect JSON
        data = demjson.decode(data)
        if 'sources' in data:
            result = []
            for source in data['sources']:
                if 'tracks' in data:
                    for track in data['tracks']:
                        result.append({
                            'url': source['file'],
                            'subs': track['file'],
                            'lang': ' %s subtitles' % track['label']
                        })
            return result
    return None
def parse_data():
    # Stiahnutie udajov
    mesto = __addon__.getSetting('mesto')
    mestometeogram = __addon__.getSetting('mestometeogram')
    key = __addon__.getSetting('key')
    try:
        pages = int(__addon__.getSetting('pages'))
    except ValueError:
        pages = 6

    if not key:
        xbmcgui.Dialog().ok('Chyba', 'Zadajte v nastaveniach kľúč k OpenWeather API!')
        return True

    data = {'mesto': mesto, 'page': '1', 'id': 'meteo_predpoved_sk'}
    url = 'http://www.shmu.sk/sk/?#tab'
    page = util.post(url, data)
    soup = bs4.BeautifulSoup(page, "html5lib")
    print('mesto: %s, den: %s' % (mesto, den))
    cnt = 1
    for x in soup.select('.w600')[0].tbody.findAll('td', 'center'):
        if x.has_attr('style'):
            if 'white-space' in x['style']:
                print('Daily.%s.LongDay' % cnt, skdays[den + cnt - 1])
                set_property('Daily.%s.LongDay' % cnt, skdays[den + cnt - 1])
                set_property('Daily.%s.ShortDay' % cnt, skdays[den + cnt - 1])
                night, day = x.get_text(separator='|').split('|')
                set_property('Daily.%s.HighTemperature' % cnt, day)
                set_property('Daily.%s.LowTemperature' % cnt, night)
            elif 'background:#00660E' in x['style']:
                imgname = x.img['src'].split('/')[-1]
                set_property('Daily.%s.Outlook' % cnt, x.img['alt'])
                image_name = x.img['src'].split('/')[-1]
                set_property('Daily.%s.OutlookIcon' % cnt, WEATHER_CODES[
                             image_name.replace('.gif', '')] + '.png')
                cnt += 1

    url = 'http://api.openweathermap.org/data/2.5/find?q=%s&type=like&mode=json&APPID=%s&units=metric' \
        % (urllib2.quote(mesto), key)
    req = urllib2.urlopen(url)
    response = req.read()
    req.close()
    jsonresponse = demjson.decode(response)['list'][0]

    set_property('Current.Temperature', str(jsonresponse['main']['temp']))
    set_property('Current.Wind', str(jsonresponse['wind']['speed'] * 3.6))
    try:
        set_property('Current.WindDirection',
                     degToCompass(jsonresponse['wind']['deg']))
    except:
        pass
    set_property('Current.FeelsLike', feelslike(round(float(jsonresponse['main']['temp'])),
                                                int(round(float(jsonresponse['wind']['speed']) * 3.6) + 0.5)))
    set_property('Current.Humidity', str(jsonresponse['main']['humidity']))
    set_property('Current.DewPoint', dewpoint(round(float(jsonresponse['main']['temp'])),
                                              int(jsonresponse['main']['humidity'])))
    set_property('Current.Pressure', str(jsonresponse['main']['pressure']))
    set_property('Current.Condition', str(jsonresponse['weather'][0]['main']))
    iconfilename = en2icon[jsonresponse['weather'][0]['main'].lower()]
    if not iconfilename:
        iconfilename = 'none'
    set_property('Current.OutlookIcon', xbmc.translatePath(os.path.join(
        __cwd__, 'resources/lib/icons', '%s.png' % iconfilename)))
    meteogrampage = util.parse_html('http://www.shmu.sk/sk/?page=1&id=meteo_num_mgram')
    cityid = meteogrampage.select('select#nwp_mesto')[0].find(text=mestometeogram).parent['value']
    day, month, year, hour, text = re.split(
        '[. ]', meteogrampage.select('select[class=w150] option')[-1].text)
    meteogramdate = '%s%s%s-%s00' % (year, month, day, hour)
    query = 'http://www.shmu.sk/data/datanwp/v2/' +\
        'meteogram/al-meteogram_%s-%s-nwp-.png' \
        % (cityid, meteogramdate)
    req = urllib2.Request(query)
    response = urllib2.urlopen(req, timeout=10)
    meteogramimage = Image.open(cStringIO.StringIO(response.read()))
    response.close()

    set_property('Map.IsFetched', '')
    print('Stahujem meteogram..')
    cut_picture(pages=pages, meteogramimage=meteogramimage,
                meteogramdate=meteogramdate)
    def resolve(self, item, captcha_cb=None, select_cb=None):
        original_yt = self.original_yt
        self.info('original_yt  ' + str(original_yt) + ' ' +
                  str(type(original_yt)))
        result = []
        resolved = []
        item = item.copy()
        url = self._url(item['url'])
        data = util.substr(util.request(url), 'async type', '</script>')
        # print ('data start ----')
        # print (data)
        # print ('data end ----')
        playlist = re.search(
            '''new mfJWPlayer.+?(?P<jsondata>playlist:.+?)events:''', data,
            re.MULTILINE | re.DOTALL)
        # print ('playlist start ----')
        # print (playlist)
        # print ('playlist end ----')
        jsondata = re.sub(
            ' +', ' ', '{%s' %
            playlist.group('jsondata').replace('file:', '"file":').replace(
                'label:', '"label":').replace('kind:', '"kind":').replace(
                    'default:', '"default":').replace(
                        'true', '"true"').replace('],', ']')) + '}'
        # print ('jsondata start ----')
        # print (jsondata)
        # print ('jsondata end ----')
        jsondata = demjson.decode(jsondata)

        for playlist_item in jsondata['playlist']:
            playlist_item['file'] = playlist_item['file'].replace(
                'time_continue=1&', '')
            #self.info(playlist_item['file'])
            if original_yt:
                e = 'watch?v='
                edx = playlist_item['file'].find(e)
                video_id = playlist_item['file'][edx + len(e):]
            vid = YDStreamExtractor.getVideoInfo(
                playlist_item['file'], quality=3
            )  #quality is 0=SD, 1=720p, 2=1080p, 3=Highest Available
            video_url = [vid.streams()[0]]
            # self.info(video_url)
            subs = playlist_item['tracks']
            if video_url and subs:
                for i in video_url:
                    i['subs'] = self.base_url[:-1] + subs[0]['file']
            resolved += video_url[:]

            if not resolved:
                raise ResolveException('Video nenalezeno')

            for i in resolved:
                item = self.video_item()
                try:
                    item['title'] = i['title']
                except KeyError:
                    pass
                item['url'] = i['xbmc_url']
                if original_yt:
                    item[
                        'url'] = "plugin://plugin.video.youtube/?action=play_video&videoid=" + video_id
                item['quality'] = i['ytdl_format']['height']
                item['surl'] = i['ytdl_format']['webpage_url']
                item['subs'] = i['subs']
                item['headers'] = {}
                # self.info(item)
                try:
                    item['fmt'] = i['fmt']
                except KeyError:
                    pass
                result.append(item)

        if len(result) > 0 and select_cb:
            # self.info(result)
            return select_cb(result)

        # print ('==resolve==')
        # print (result)
        return result