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
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
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 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 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