def getSeries(self, url, thumb):
        url_content = client.request("%s%s" % (base_url, url))
        info = client.parseDOM(url_content, 'div', attrs={'class': 'info'})[0]
        title = py2_encode(
            client.replaceHTMLCodes(client.parseDOM(info, 'h1')[0])).strip()
        plot = py2_encode(client.parseDOM(info, 'p')[0]).strip()
        tab = client.parseDOM(info, 'div', attrs={'class': 'tab'})[0]
        matches = re.search(
            r'^(.*)<div class="tags">(.*)hossz:</div><p>([0-9]*) Perc(.*)$',
            tab, re.S)
        if matches:
            duration = int(matches.group(3).strip()) * 60

        season = client.parseDOM(url_content, 'div', attrs={'class':
                                                            'season'})[0]
        seasons = season.replace('</a>', '</a>\n')
        for season in seasons.splitlines():
            matches = re.search(
                r'^<a(.*)class="evad"(.*)href="(.*)">(.*)</a>$',
                season.strip())
            if matches:
                self.addDirectoryItem(
                    u'%s. évad' % matches.group(4),
                    'episodes&url=%s&thumb=%s' %
                    (quote_plus(matches.group(3)), quote_plus(thumb)),
                    "%s/%s" % (base_url, thumb),
                    'DefaultMovies.png',
                    meta={
                        'title': title,
                        'plot': plot,
                        'duration': duration
                    })
        self.endDirectory('tvshows')
示例#2
0
    def programs(self, id):
        query = base_url + prog_link
        programs = net.request(query % id)
        prgs = {}
        for i in json.loads(programs):
            prg = {}
            title = py2_encode(i['title'])
            try:
                thumb = img_link % [
                    x['external_key']
                    for x in i['images'] if x['role'] == 'logo'
                ][0]
            except:
                thumb = ''
            try:
                fanart = img_link % [
                    x['external_key']
                    for x in i['images'] if x['role'] == 'mea'
                ][0]
            except:
                fanart = None
            id = str(i['id'])
            plot = py2_encode(i['description'])
            extraInfo = ""
            if xbmcaddon.Addon().getSetting('show_content_summary') == 'true':
                try:
                    if (i['count']['vi'] > 0):
                        extraInfo = " (%d %s)" % (
                            i['count']['vi'],
                            py2_encode(i['program_type_wording']['plural'])
                            if i['program_type_wording'] != None else
                            'Teljes adás')
                    else:
                        extraInfo = " (%d előzetes és részletek)" % (
                            i['count']['vc'])
                except:
                    pass
            prg = {
                'extraInfo': extraInfo,
                'id': id,
                'fanart': fanart,
                'thumb': thumb,
                'plot': plot
            }
            prgs[title] = prg
        prgTitles = list(prgs.keys())
        if (xbmcaddon.Addon().getSetting('sort_programs') == 'true'):
            prgTitles.sort(key=locale.strxfrm)
        for prg in prgTitles:
            #self.addDirectoryItem("%s[I][COLOR silver]%s[/COLOR][/I]" % (title, extraInfo), 'episodes&url=%s&fanart=%s' % (id, fanart), thumb, 'DefaultTVShows.png', Fanart=fanart, meta={'plot': plot})
            self.addDirectoryItem("%s[I][COLOR silver]%s[/COLOR][/I]" %
                                  (prg, prgs[prg]['extraInfo']),
                                  'episodes&url=%s&fanart=%s' %
                                  (prgs[prg]['id'], prgs[prg]['fanart']),
                                  prgs[prg]['thumb'],
                                  'DefaultTVShows.png',
                                  Fanart=prgs[prg]['fanart'],
                                  meta={'plot': prgs[prg]['plot']})

        self.endDirectory(type='tvshows')
示例#3
0
 def getInfo(self, sm8, searchStr):
     result = "0"
     rows = client.parseDOM(sm8, 'div', attrs={'class': 'row'})
     for row in rows:
         divs = client.parseDOM(row, 'div')
         if searchStr in py2_encode(divs[0]):
             result = py2_encode(divs[1]).strip()
     return result
示例#4
0
def get(function, timeout, *args, **table):
    try:
        response = None

        f = repr(function)
        f = re.sub('.+\smethod\s|.+function\s|\sat\s.+|\sof\s.+', '', f)

        a = hashlib.md5()
        for i in args: a.update(str(i))
        a = str(a.hexdigest())
    except:
        pass

    try:
        table = table['table']
    except:
        table = 'rel_list'

    try:
        control.makeFile(dataPath)
        dbcon = database.connect(cacheFile)
        dbcur = dbcon.cursor()
        dbcur.execute("SELECT * FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a))
        match = dbcur.fetchone()

        response = eval(py2_encode(match[2]))

        t1 = int(match[3])
        t2 = int(time.time())
        update = (abs(t2 - t1) / 3600) >= int(timeout)
        if update == False:
            return response
    except:
        pass

    try:
        r = function(*args)
        if (r == None or r == []) and not response == None:
            return response
        elif (r == None or r == []):
            return r
    except:
        return

    try:
        r = repr(r)
        t = int(time.time())
        dbcur.execute("CREATE TABLE IF NOT EXISTS %s (""func TEXT, ""args TEXT, ""response TEXT, ""added TEXT, ""UNIQUE(func, args)"");" % table)
        dbcur.execute("DELETE FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a))
        dbcur.execute("INSERT INTO %s Values (?, ?, ?, ?)" % table, (f, a, r, t))
        dbcon.commit()
    except:
        pass

    try:
        return eval(py2_encode(r))
    except:
        pass
def isInCategory(group, classes):
    if group == "mind":
        return True
    else:
        if py2_encode(group) in allCategories:
            for value in allCategories[group]:
                if value in py2_encode(classes):
                    return True
        else:
            if group in py2_encode(classes):
                return True
    return False
 def playmovie(self, url):
     url_content = client.request(url)
     filmbeagyazas = client.parseDOM(url_content,
                                     'div',
                                     attrs={'class': 'filmbeagyazas'})
     if len(filmbeagyazas) > 0:
         filmbeagyazas = filmbeagyazas[0]
     else:
         filmbeagyazas = client.parseDOM(url_content,
                                         'div',
                                         attrs={'class': 'beagyazas'})[0]
     source = client.parseDOM(filmbeagyazas, 'iframe', ret='src')[0]
     xbmc.log('Dmdamedia: resolving url: %s' % source, xbmc.LOGINFO)
     try:
         direct_url = urlresolver.resolve(source)
         if direct_url:
             direct_url = py2_encode(direct_url)
     except Exception as e:
         xbmcgui.Dialog().notification(
             urlparse.urlparse(url).hostname, str(e))
         return
     if direct_url:
         xbmc.log('Dmdamedia: playing URL: %s' % direct_url, xbmc.LOGINFO)
         play_item = xbmcgui.ListItem(path=direct_url)
         xbmcplugin.setResolvedUrl(syshandle, True, listitem=play_item)
 def getResults(self, search_text):
     url_content = client.request(base_url, error=True)
     searchDiv = client.parseDOM(url_content, 'div', attrs={'id': 'search'})
     innerFrameDiv = client.parseDOM(searchDiv,
                                     'div',
                                     attrs={'class': 'inner_frame'})
     searchURL = client.parseDOM(innerFrameDiv, 'form', ret='action')[0]
     uid = client.parseDOM(innerFrameDiv,
                           'input',
                           attrs={'id': 'uid'},
                           ret='value')[0]
     url_content = client.request(searchURL,
                                  post="uid=%s&key=%s" %
                                  (uid, quote_plus(search_text)),
                                  error=True)
     searchResult = client.parseDOM(url_content,
                                    'div',
                                    attrs={'class': 'search-results'})
     resultsUser = client.parseDOM(searchResult,
                                   'div',
                                   attrs={'class': 'results-user'})
     ul = client.parseDOM(resultsUser, 'ul')
     if len(ul) > 0:
         lis = client.parseDOM(ul, 'li')
         for li in lis:
             href = client.parseDOM(li, 'a', ret='href')[0].replace(
                 'http://', 'https://').replace(base_url, '')
             if "filmkeres-es-hibas-link-jelentese.html" not in href:
                 title = py2_encode(client.parseDOM(li, 'a')[0])
                 self.addDirectoryItem(title,
                                       'movie&url=%s' % quote_plus(href),
                                       '', 'DefaultMovies.png')
         self.endDirectory('movies')
     else:
         xbmcgui.Dialog().ok("OnlineFilmvilág2", "Nincs találat!")
示例#8
0
 def playmovie(self, url):
     self.Login()
     xbmc.log('NetMozi: Try to play from URL: %s' % url, xbmc.LOGINFO)
     final_url = client.request(url,
                                cookie=self.logincookie,
                                output="geturl")
     xbmc.log('NetMozi: final URL: %s' % final_url, xbmc.LOGINFO)
     try:
         direct_url = urlresolver.resolve(final_url)
         if direct_url:
             xbmc.log('NetMozi: URLResolver resolved URL: %s' % direct_url,
                      xbmc.LOGINFO)
             direct_url = py2_encode(direct_url)
         else:
             xbmc.log(
                 'NetMozi: URLResolver could not resolve url: %s' %
                 final_url, xbmc.LOGINFO)
             xbmcgui.Dialog().notification(
                 "URL feloldás hiba",
                 "URL feloldása sikertelen a %s host-on" %
                 urlparse.urlparse(final_url).hostname)
     except Exception as e:
         xbmc.log('NetMozi: URLResolver resolved URL: %s' % final_url,
                  xbmc.LOGINFO)
         xbmcgui.Dialog().notification(
             urlparse.urlparse(url).hostname, str(e))
         return
     if direct_url:
         xbmc.log('NetMozi: playing URL: %s' % direct_url, xbmc.LOGINFO)
         play_item = xbmcgui.ListItem(path=direct_url)
         xbmcplugin.setResolvedUrl(syshandle, True, listitem=play_item)
示例#9
0
 def addDirectoryItem(self,
                      name,
                      query,
                      thumb,
                      icon,
                      context=None,
                      queue=False,
                      isAction=True,
                      isFolder=True,
                      Fanart=None,
                      meta=None):
     url = '%s?action=%s' % (sysaddon, query) if isAction == True else query
     if thumb == '': thumb = icon
     cm = []
     if queue == True:
         cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon))
     if not context == None:
         cm.append((py2_encode(context[0]),
                    'RunPlugin(%s?action=%s)' % (sysaddon, context[1])))
     item = xbmcgui.ListItem(label=name)
     item.addContextMenuItems(cm)
     item.setArt({'icon': thumb, 'thumb': thumb, 'poster': thumb})
     if Fanart == None: Fanart = addonFanart
     item.setProperty('Fanart_Image', Fanart)
     if isFolder == False: item.setProperty('IsPlayable', 'true')
     if not meta == None: item.setInfo(type='Video', infoLabels=meta)
     xbmcplugin.addDirectoryItem(handle=syshandle,
                                 url=url,
                                 listitem=item,
                                 isFolder=isFolder)
示例#10
0
 def getEpisodes(self, url, serie):
     url_content = client.request(url)
     self.Login()
     url_content = client.request('%s%s' % (base_url, url),
                                  cookie=self.logincookie)
     container = client.parseDOM(url_content,
                                 'div',
                                 attrs={'class': 'container'})[0]
     temp = client.parseDOM(container, 'h3')[0]
     title = py2_encode(
         client.replaceHTMLCodes(client.parseDOM(temp, 'a')[0])).strip()
     temp = client.parseDOM(container, 'div', attrs={'class':
                                                     'col-sm-8'})[0]
     plot = self.getInfo(temp, 'Leírás')
     duration = int(self.getInfo(temp, 'Játékidő:').replace(' perc',
                                                            '')) * 60
     temp = client.parseDOM(container, 'div', attrs={'class':
                                                     'col-sm-4'})[0]
     thumb = 'https:' + client.parseDOM(temp, 'img', ret='src')[0]
     episodes = client.parseDOM(url_content,
                                'ul',
                                attrs={'id': 'seasonUl%s' % serie})
     episodes = client.parseDOM(episodes, 'a')
     for episode in episodes:
         self.addDirectoryItem('%s. rész' % py2_encode(episode),
                               'movie&url=%s/s%s/e%s' %
                               (url, serie, episode),
                               thumb,
                               'DefaultTVShows.png',
                               meta={
                                   'title':
                                   '%s - %s. évad %s. rész' %
                                   (title, serie, py2_encode(episode)),
                                   'plot':
                                   plot,
                                   'duration':
                                   duration,
                                   'fanart':
                                   thumb
                               })
     self.endDirectory(type="movies")
示例#11
0
    def root(self):
        query = base_url + cat_link
        categories = net.request(query)

        self.addDirectoryItem('Élő adás', 'liveChannels', '',
                              'DefaultTVShows.png')
        for i in json.loads(categories):
            self.addDirectoryItem(py2_encode(i['name']),
                                  'programs&url=%s' % str(i['id']), '',
                                  'DefaultTVShows.png')

        self.endDirectory()
示例#12
0
 def liveChannels(self):
     liveChannels = {
         'rtlhu_rtl_klub': 'RTL Klub',
         'rtlhu_rtl_ii': 'RTL II',
         'rtlhu_cool': 'Cool TV',
         'rtlhu_rtl_gold': 'RTL Gold',
         'rtlhu_rtl_plus': 'RTL+',
         'rtlhu_film_plus': 'Film+',
         'rtlhu_sorozat_plus': 'Sorozat+',
         'rtlhu_muzsika_tv': 'Muzsika TV'
     }
     query = base_url + livechannels_link
     lives = net.request(query)
     for (i, j) in json.loads(lives, object_pairs_hook=OrderedDict).items():
         self.addDirectoryItem(
             "[B]" + liveChannels[i] + "[/B] - " +
             py2_encode(j[0]['title']) + "  [COLOR gold][" +
             py2_encode(j[0]['diffusion_start_date'])[11:-3] + " - " +
             py2_encode(j[0]['diffusion_end_date'])[11:-3] + "][/COLOR]",
             'liveChannel&url=%s' % i, '', 'DefaultTVShows.png')
     self.endDirectory()
    def getEpisodes(self, url, thumb):
        url_content = client.request("%s%s" % (base_url, url))
        info = client.parseDOM(url_content, 'div', attrs={'class': 'info'})[0]
        title = py2_encode(
            client.replaceHTMLCodes(client.parseDOM(info, 'h1')[0])).strip()
        plot = py2_encode(client.parseDOM(info, 'p')[0]).strip()
        tab = client.parseDOM(info, 'div', attrs={'class': 'tab'})[0]
        matches = re.search(
            r'^(.*)<div class="tags">(.*)hossz:</div><p>([0-9]*) Perc(.*)$',
            tab, re.S)
        if matches:
            duration = int(matches.group(3).strip()) * 60

        controls = client.parseDOM(url_content,
                                   'div',
                                   attrs={'class': 'controls'})[0]
        episodes = client.parseDOM(controls, 'div',
                                   attrs={'class': 'reszek'
                                          })[0].replace('</a>', '</a>\n')
        for episode in episodes.splitlines():
            matches = re.search(
                r'(.*)<a(.*)class="(.*)episode"(.*)href="(.*)">(.*)</a>$',
                episode.strip())
            if matches:
                self.addDirectoryItem(
                    u'%s. rész %s' %
                    (matches.group(6), "| [COLOR limegreen]Feliratos[/COLOR]"
                     if "sub " in matches.group(3) else ""),
                    'movie&url=%s&thumb=%s&plot=%s' %
                    (quote_plus(matches.group(5)), quote_plus(thumb),
                     quote_plus(plot)),
                    "%s/%s" % (base_url, thumb),
                    'DefaultMovies.png',
                    isFolder=True,
                    meta={
                        'title': title,
                        'plot': plot,
                        'duration': duration
                    })
        self.endDirectory('episodes')
 def getItems(self, url, group, search):
     url = "" if url == None else url
     if search != None:
         search = py2_encode(search.lower())
     else:
         if group == "mind":
             self.addDirectoryItem('Keresés',
                                   'basesearch&url=%s&group=mind' % url, '',
                                   'DefaultFolder.png')
         else:
             self.addDirectoryItem('Keresés',
                                   'search&url=%s&group=%s' % (url, group),
                                   '', 'DefaultFolder.png')
     url_content = client.request('%s/%s' % (base_url, url))
     items = re.findall(r'<div class="wrap"><div class="[^"]*".*?</div>',
                        url_content)
     for item in items:
         matches = re.search(
             r'^<div class="wrap"><div class="([^"]*)"(.*)data-cim="([^"]*)"(.*)data-cim_en="([^"]*)"(.*)<h1>(.*)</h1>(.*)<a href="([^"]*)"(.*)<img(.*)data-src="([^"]*)(.*)',
             item)
         if matches:
             if isInCategory(group, matches.group(1).replace(',', '')):
                 itemUrl = matches.group(9)
                 thumb = matches.group(12)
                 title = py2_encode(matches.group(7))
                 data_cim = py2_encode(matches.group(3)).lower()
                 data_cim_en = py2_encode(matches.group(5)).lower()
                 isOK = True
                 if search != None:
                     lowerTitle = title.lower()
                     if search not in lowerTitle and search not in data_cim and search not in data_cim_en:
                         isOK = False
                 if isOK:
                     self.addDirectoryItem(
                         title, '%s&url=%s&thumb=%s' %
                         ("movie" if url != "" else "series", itemUrl,
                          thumb), "%s/%s" % (base_url, thumb),
                         'DefaultMovies.png'
                         if url != "" else 'DefaultTVShows.png')
     self.endDirectory('movies' if url != "" else 'tvshows')
 def getSources(self, url):
     url_content = client.request(url)
     title = client.parseDOM(url_content, 'h1')[0]
     thumb = client.parseDOM(url_content,
                             'img',
                             attrs={'class': 'kep_meret'},
                             ret='src')[0]
     plot = py2_encode(
         client.replaceHTMLCodes(
             client.parseDOM(url_content, 'div',
                             attrs={'class': 'leiras'
                                    })[1])).replace("<h3>Leirás</h3>", "")
     sourceCnt = 0
     linkektables = client.parseDOM(url_content,
                                    'table',
                                    attrs={'id': 'linkek'})
     for linkektable in linkektables:
         tbody = client.parseDOM(linkektable, 'tbody')[0]
         sorok = client.parseDOM(tbody, 'tr')
         for sor in sorok:
             oszlopok = client.parseDOM(sor, 'td')
             srcHost = oszlopok[1].replace('<b>', '').replace('</b>', '')
             matches = re.search(r'<div class="([^"]*)"></div>(.*)$',
                                 oszlopok[0])
             url = client.parseDOM(sor, 'a', ret='href')[0]
             minoseg = ""
             szinkron = ""
             if matches:
                 minoseg = " | [I]%s[/I]" % matches.group(2)
                 if "feirat" in matches.group(1):
                     szinkron = " | [I]feliratos[/I]"
                 else:
                     if "eredeti" in matches.group(1):
                         szinkron = " | [I]eredeti nyelv[/I]"
             egyeb = ""
             if oszlopok[2] != "":
                 egyeb = "[I] (%s)[/I]" % oszlopok[2]
             sourceCnt += 1
             self.addDirectoryItem('%s | [B]%s[/B]%s%s%s' % (format(
                 sourceCnt, '02'), srcHost, minoseg, szinkron, egyeb),
                                   'playmovie&url=%s&host=%s' %
                                   (url, srcHost),
                                   thumb,
                                   'DefaultMovies.png',
                                   isFolder=False,
                                   meta={
                                       'title': title,
                                       'plot': plot,
                                       'banner': thumb
                                   })
     self.endDirectory('movies')
 def getCategories(self):
     url_content = client.request(base_url, error=True)
     mainMenu = client.parseDOM(url_content, 'menu')[0].strip()
     menuItems = client.parseDOM(mainMenu, 'li')
     self.addDirectoryItem('Keresés', 'search', '', 'DefaultFolder.png')
     for menuItem in menuItems:
         text = py2_encode(
             client.replaceHTMLCodes(client.parseDOM(menuItem, 'a')[0]))
         url = client.parseDOM(menuItem, 'a', ret='href')[0]
         if not text.startswith(('Kezdőlap', 'Kérjél', 'Támogatás', 'CHAT',
                                 'Jogi nyilatkozat')):
             self.addDirectoryItem(text, 'articles&url=%s' % url, '',
                                   'DefaultFolder.png')
     self.endDirectory()
 def getMovie(self, url, thumb):
     url_content = client.request(url)
     info = client.parseDOM(url_content, 'div', attrs={'class': 'info'})[0]
     title = py2_encode(
         client.replaceHTMLCodes(client.parseDOM(info, 'h1')[0])).strip()
     plot = py2_encode(client.parseDOM(info, 'p')[0]).strip()
     tab = client.parseDOM(info, 'div', attrs={'class': 'tab'})[0]
     matches = re.search(
         r'^(.*)<div class="tags">(.*)hossz:</div><p>([0-9]*) Perc(.*)$',
         tab, re.S)
     if matches:
         duration = int(matches.group(3).strip()) * 60
     servers = client.parseDOM(url_content,
                               'div',
                               attrs={'class': 'servers'})[0]
     lista = client.parseDOM(servers, 'div', attrs={'class': 'lista'})[0]
     sources = lista.replace("<a>", "\n<a>").replace("</a>", "</a>\n")
     sourceCnt = 0
     for source in sources.splitlines():
         matches = re.search(r'^<a(.*)href="(.*)">(.*)</a>$',
                             source.strip())
         if matches:
             sourceCnt += 1
             self.addDirectoryItem(
                 '%s | [B]%s[/B]' %
                 (format(sourceCnt, '02'), matches.group(3)),
                 'playmovie&url=%s%s' % (url, quote_plus(matches.group(2))),
                 "%s/%s" % (base_url, thumb),
                 'DefaultMovies.png',
                 isFolder=False,
                 meta={
                     'title': title,
                     'plot': plot,
                     'duration': duration
                 },
                 banner="")
     self.endDirectory('movies')
 def getCategories(self, url):
     url = "" if url == None else url
     self.addDirectoryItem('Keresés', 'basesearch&url=%s&group=mind' % url,
                           '', 'DefaultFolder.png')
     self.addDirectoryItem('Mind', 'items&url=%s&group=mind' % url, '',
                           'DefaultFolder.png')
     url_content = client.request('%s/%s' % (base_url, url))
     categories = []
     allItems = re.findall(r'<div class="wrap"><div class="[^"]*',
                           url_content)
     for item in allItems:
         for cat in item.replace('<div class="wrap"><div class="',
                                 '').replace(',', '').split(' '):
             if cat != 'topseries' and cat != 'vege' and len(
                     cat.replace(' ', '')) > 0:
                 if py2_encode(
                         getCategoryKeyByValue(cat)) not in categories:
                     categories.append(
                         py2_encode(getCategoryKeyByValue(cat)))
     categories.sort(key=locale.strxfrm)
     for cat in categories:
         self.addDirectoryItem(cat, 'items&url=%s&group=%s' % (url, cat),
                               '', 'DefaultFolder.png')
     self.endDirectory()
 def playmovie(self, url):
     if "http" not in url:
         url = ("https:%s" % url)
     xbmc.log('filmvilag: resolving url: %s' % url, xbmc.LOGINFO)
     try:
         direct_url = urlresolver.resolve(url)
         if direct_url:
             direct_url = py2_encode(direct_url)
         else:
             direct_url = url
     except Exception as e:
         xbmcgui.Dialog().notification(
             urlparse.urlparse(url).hostname, str(e))
         return
     if direct_url:
         xbmc.log('filmvilag: playing URL: %s' % direct_url, xbmc.LOGINFO)
         play_item = xbmcgui.ListItem(path=direct_url)
         xbmcplugin.setResolvedUrl(syshandle, True, listitem=play_item)
    def getMovies(self, url):
        url_content = client.request(url)
        movies = client.parseDOM(url_content,
                                 'div',
                                 attrs={'class': 'thumbnail-container'})
        for movie in movies:
            url = client.parseDOM(movie, 'a', ret='href')[0]
            thumb = client.parseDOM(movie,
                                    'img',
                                    attrs={'loading': 'lazy'},
                                    ret='src')[0]
            title = client.parseDOM(movie,
                                    'span',
                                    attrs={'class': 'title-text'})[0]
            self.addDirectoryItem(title, ('movie&url=%s' %
                                          url) if "sorozat" not in url else
                                  ('sorozat&url=%s' % url),
                                  thumb,
                                  'DefaultMovies.png',
                                  meta={
                                      'title': title,
                                      'fanart': thumb
                                  })
        buttons = client.parseDOM(url_content,
                                  'div',
                                  attrs={'class': 'buttons'})
        if len(buttons) > 1:
            pages = buttons[1].replace('</a>', '</a>\n').splitlines()
            if "következő oldal" in py2_encode(pages[len(pages) - 1]):
                matches = re.search(r'<a href="([^"]*)"(.*)$',
                                    pages[len(pages) - 1])
                if matches:
                    self.addDirectoryItem("[I]Következő oldal >>[/I]",
                                          'movies&url=%s' % (matches.group(1)),
                                          '', 'DefaultFolder.png')

        self.endDirectory()
 def playmovie(self, url, host):
     xbmc.log('onlinefilmek.me: resolving onlinefilmek.me url: %s' % url,
              xbmc.LOGINFO)
     url_content = client.request(url)
     mainContainer = client.parseDOM(url_content,
                                     'div',
                                     attrs={'id': 'main_container'})[0]
     script = (u'%s' % client.parseDOM(mainContainer, 'script')[0])
     matches = re.search(r"var(.*)=\['([^']*)(.*)$", script)
     if matches:
         encoded = matches.group(2)
         replaces = re.findall(
             "_0x418837=_0x418837\['replace'\]\(([^\)]*)\)", script, re.S)
         for replace in replaces:
             encoded = encoded.replace(replace[1], replace[6])
         iFrame = base64.b64decode(encoded.encode('ascii')).decode('ascii')
         url = client.parseDOM(iFrame, 'iframe', ret='src')[0]
         xbmc.log(
             'onlinefilmek.me: founded url: %s, trying to resolve' % url,
             xbmc.LOGINFO)
         try:
             direct_url = urlresolver.resolve(url)
             if direct_url:
                 direct_url = py2_encode(direct_url)
             else:
                 direct_url = url
         except Exception as e:
             xbmcgui.Dialog().notification(host, str(e))
             return
         if direct_url:
             xbmc.log('onlinefilmek.me: playing URL: %s' % direct_url,
                      xbmc.LOGINFO)
             play_item = xbmcgui.ListItem(path=direct_url)
             xbmcplugin.setResolvedUrl(syshandle, True, listitem=play_item)
     else:
         xbmcgui.Dialog().notification(host, "Script not founded")
示例#22
0
 def getMovie(self, url):
     self.Login()
     url_content = client.request('%s%s' % (base_url, url),
                                  cookie=self.logincookie)
     if "regeljbe.png" in url_content:
         xbmcgui.Dialog().ok(
             'NetMozi',
             'Lista lekérés sikertelen. A hozzáféréshez regisztráció szükséges.'
         )
         xbmcplugin.setResolvedUrl(int(sys.argv[1]), False,
                                   xbmcgui.ListItem())
     else:
         movieURL = 'https:%s' % client.parseDOM(
             url_content,
             'a',
             attrs={'class': 'details_links_btn'},
             ret='href')[0]
         container = client.parseDOM(url_content,
                                     'div',
                                     attrs={'class': 'container'})[0]
         temp = client.parseDOM(container, 'h3')[0]
         title = py2_encode(
             client.replaceHTMLCodes(client.parseDOM(temp,
                                                     'a')[0])).strip()
         temp = client.parseDOM(container,
                                'div',
                                attrs={'class': 'col-sm-4'})[0]
         thumb = 'https:' + client.parseDOM(temp, 'img', ret='src')[0]
         temp = client.parseDOM(container,
                                'div',
                                attrs={'class': 'col-sm-8'})[0]
         plot = self.getInfo(temp, 'Leírás')
         duration = int(
             self.getInfo(temp, 'Játékidő:').replace(' perc', '')) * 60
         serieInfo = client.parseDOM(url_content, 'h4')
         if serieInfo:
             serieInfo = ' - %s' % py2_encode(serieInfo[0])
         else:
             serieInfo = ''
         url_content = client.request(movieURL)
         table = client.parseDOM(url_content,
                                 'table',
                                 attrs={'class': 'table table-responsive'})
         if table:
             rows = client.parseDOM(table, 'tr')
             sourceCnt = 0
             for row in rows:
                 sourceCnt += 1
                 cols = client.parseDOM(row, 'td')
                 if 'hungary.gif' in cols[0]:
                     nyelv = 'Szinkron'
                 elif 'usa.gif' in cols[0]:
                     nyelv = 'Külfüldi'
                 elif 'uk-hu.png' in cols[0]:
                     nyelv = 'Felirat'
                 else:
                     nyelv = 'Ismeretlen'
                 valid = ''
                 if 'red_mark.png' in cols[1]:
                     valid = '| [COLOR red]Érvénytelen[/COLOR]'
                 mURL = urlparse.urlsplit(movieURL)
                 url = urlparse.urljoin(
                     '%s://%s' % (mURL.scheme, mURL.netloc),
                     py2_encode(
                         client.parseDOM(
                             cols[3],
                             'a',
                             attrs={
                                 'class': 'btn btn-outline-primary btn-sm'
                             },
                             ret='href')[0]))
                 quality = py2_encode(cols[4])
                 site = py2_encode(cols[5])
                 self.addDirectoryItem(
                     '%s | [B]%s[/B] | [COLOR limegreen]%s[/COLOR] | [COLOR blue]%s[/COLOR] %s'
                     %
                     (format(sourceCnt, '02'), site, nyelv, quality, valid),
                     'playmovie&url=%s' % url,
                     thumb,
                     'DefaultMovies.png',
                     isFolder=False,
                     meta={
                         'title': title + serieInfo,
                         'plot': plot,
                         'duration': duration,
                         'fanart': thumb
                     })
     self.endDirectory(type="movies")
 def getArticles(self, url):
     url = "" if url == None else url
     url_content = client.request('%s/%s' % (base_url, url), error=True)
     articlesDiv = client.parseDOM(url_content,
                                   'div',
                                   attrs={'id': 'articles'})[0]
     articles = client.parseDOM(articlesDiv,
                                'div',
                                attrs={'class': 'article'})
     for article in articles:
         preview = client.parseDOM(article,
                                   'div',
                                   attrs={'class': 'preview'})[0]
         href = client.parseDOM(article, 'a', ret='href')[0]
         thumb = '%s%s' % (base_url,
                           client.parseDOM(article, 'img', ret='src')[0])
         heading3 = client.parseDOM(article, 'h3')[0]
         title = py2_encode(client.parseDOM(heading3, 'a')[0])
         editorArea = py2_encode(
             client.replaceHTMLCodes(
                 client.parseDOM(article,
                                 'div',
                                 attrs={'class':
                                        'editor-area'})[0])).strip()
         matches = re.search(
             r'^(.*)>(.*), ([0-9]*) perc,(.*)([1-2][0-9]{3})(.*)$',
             editorArea, re.S)
         xtraInfo = re.search(
             r'^(.*)color: rgb\(255, 0, 0\)(.*)>(.*)</span>(.*)$',
             editorArea, re.S)
         extraInfo = ""
         if xtraInfo != None:
             extraInfo = " | [COLOR red]%s[/COLOR]" % xtraInfo.group(3)
         if matches != None:
             self.addDirectoryItem(
                 '%s (%s) | [COLOR limegreen]%s[/COLOR]%s' %
                 (title, matches.group(5), matches.group(2), extraInfo),
                 'movie&url=%s&thumb=%s&duration=%s' %
                 (href, quote_plus(thumb), quote_plus(matches.group(3))),
                 thumb,
                 'DefaultMovies.png',
                 meta={
                     'title': title,
                     'duration': int(matches.group(3)) * 60,
                     'fanart': thumb
                 })
         else:
             matches = re.search(r'^(.*)>(.*),(.*)([1-2][0-9]{3})(.*)$',
                                 editorArea, re.S)
             if matches != None:
                 self.addDirectoryItem(
                     '%s (%s) | [COLOR limegreen]%s[/COLOR]%s' %
                     (title, matches.group(4), matches.group(2), extraInfo),
                     'movie&url=%s&thumb=%s&duration=%s' %
                     (href, quote_plus(thumb), "0"),
                     thumb,
                     'DefaultMovies.png',
                     meta={
                         'title': title,
                         'duration': 0,
                         'fanart': thumb
                     })
             else:
                 self.addDirectoryItem('%s | %s' % (title, extraInfo),
                                       'movie&url=%s&thumb=%s&duration=%s' %
                                       (href, quote_plus(thumb), "0"),
                                       thumb,
                                       'DefaultMovies.png',
                                       meta={
                                           'title': title,
                                           'duration': 0,
                                           'fanart': thumb
                                       })
     listOfPages = client.parseDOM(articlesDiv,
                                   'div',
                                   attrs={'class': 'list-of-pages'})
     if len(listOfPages) > 0:
         next = client.parseDOM(listOfPages, 'p', attrs={'class': 'next'})
         if len(next) > 0:
             nextPage = client.parseDOM(next, 'a', ret='href')
             if len(nextPage) > 0:
                 self.addDirectoryItem(
                     u'[I]K\u00F6vetkez\u0151 oldal >>[/I]',
                     'articles&url=%s' % quote_plus(nextPage[0]), '',
                     'DefaultFolder.png')
     self.endDirectory('movies')
示例#24
0
    def play(self, id, streams, image, meta):
        streams = sorted(streams)
        #dash_url = [i for i in streams if 'drmnp.ism/Manifest.mpd' in i]
        dash_url = [
            i for i in streams if re.match(r'(.*)drm(.*)Manifest.mpd(.*)', i)
        ]
        hls_url = [i for i in streams if 'unpnp.ism/Manifest.m3u8' in i]
        live_url = [i for i in streams if 'stream.m3u8' in i]
        li = None

        if dash_url != []:
            # Inputstream and DRM
            #manifest_url = net.request(dash_url[0], redirect=False)
            #stream_url = os.path.dirname(manifest_url) + '/Manifest.mpd'
            stream_url = dash_url[0]
            headers = {
                'x-auth-gigya-uid':
                self.uid,
                'x-auth-gigya-signature':
                xbmcaddon.Addon().getSetting('signature'),
                'x-auth-gigya-signature-timestamp':
                xbmcaddon.Addon().getSetting('s.timestamp'),
                'Origin':
                'https://www.rtlmost.hu'
            }

            token_source = net.request(token_url % (self.uid, id),
                                       headers=headers)
            token_source = json.loads(token_source)
            x_dt_auth_token = py2_encode(token_source['token'])

            license_headers = 'x-dt-auth-token=' + x_dt_auth_token + '&Origin=https://www.rtlmost.hu&Content-Type='
            license_key = 'https://lic.drmtoday.com/license-proxy-widevine/cenc/' + '|' + license_headers + '|R{SSM}|JBlicense'
            DRM = 'com.widevine.alpha'
            PROTOCOL = 'mpd'

            from inputstreamhelper import Helper
            is_helper = Helper(PROTOCOL, drm=DRM)
            if is_helper.check_inputstream():
                li = xbmcgui.ListItem(path=stream_url)
                if sys.version_info < (
                        3, 0
                ):  # if python version < 3 is safe to assume we are running on Kodi 18
                    li.setProperty(
                        'inputstreamaddon',
                        'inputstream.adaptive')  # compatible with Kodi 18 API
                else:
                    li.setProperty(
                        'inputstream', 'inputstream.adaptive'
                    )  # compatible with recent builds Kodi 19 API
                li.setProperty('inputstreamaddon', 'inputstream.adaptive')
                li.setProperty('inputstream.adaptive.manifest_type', PROTOCOL)
                li.setProperty('inputstream.adaptive.license_type', DRM)
                li.setProperty('inputstream.adaptive.license_key', license_key)
                li.setMimeType('application/dash+xml')
                li.setContentLookup(False)

        elif hls_url != []:
            stream_url = hls_url[0]
            manifest_url = net.request(stream_url, redirect=False)

            manifest = net.request(manifest_url)
            sources = m3u8_parser.parse(manifest)
            if len(sources) == 0:
                manifest_url = stream_url
                manifest = net.request(manifest_url)
                sources = m3u8_parser.parse(manifest)

            root = os.path.dirname(manifest_url)

            sources = sorted(sources, key=lambda x: x['resolution'])[::-1]

            auto_pick = xbmcaddon.Addon().getSetting('hls_quality') == '0'

            if len(sources) == 1 or auto_pick == True:
                source = sources[0]['uri']
            else:
                result = xbmcgui.Dialog().select(u'Min\u0151s\u00E9g', [
                    str(source['resolution'])
                    if 'resolution' in source else 'Unknown'
                    for source in sources
                ])
                if result == -1:
                    return
                else:
                    source = sources[result]['uri']
            stream_url = root + '/' + source
            li = xbmcgui.ListItem(path=stream_url)

        elif live_url != []:
            live_url.sort(reverse=True)
            sources = []
            for i in live_url:
                stream_url = i
                try:
                    manifest = net.request(stream_url, timeout=30)
                    sources_temp = m3u8_parser.parse(manifest)
                    root = os.path.dirname(stream_url)
                    for j in sources_temp:
                        j['root'] = root
                    sources.extend(sources_temp)
                    if len(sources) > 0:
                        break
                except:
                    pass
            sources = sorted(sources,
                             key=lambda x: x['resolution'],
                             reverse=False)
            auto_pick = xbmcaddon.Addon().getSetting('hls_quality') == '0'

            if len(sources) > 0:
                if len(sources) == 1 or auto_pick == True:
                    source = sources[0]['uri']
                else:
                    result = xbmcgui.Dialog().select(u'Min\u0151s\u00E9g', [
                        str(source['resolution'])
                        if 'resolution' in source else 'Unknown'
                        for source in sources
                    ])
                    if result == -1:
                        return
                    else:
                        source = sources[result]['uri']
                stream_url = root + '/' + source
            else:
                stream_url = live_url[0]
            li = xbmcgui.ListItem(path=stream_url)
            meta = json.loads(meta)
            li.setInfo(type='Video', infoLabels=meta)
            xbmc.Player().play(stream_url, li)
            return

        if li is None:
            xbmcgui.Dialog().notification(
                u'Lej\u00E1tsz\u00E1s sikertelen. DRM v\u00E9dett m\u0171sor.',
                'RTL Most',
                time=8000)
            xbmcplugin.setResolvedUrl(int(sys.argv[1]), False,
                                      xbmcgui.ListItem())
            return

        stream_url_content = net.request(stream_url)
        meta = json.loads(meta)
        li.setArt({
            'icon': image,
            'thumb': image,
            'poster': image,
            'tvshow.poster': image
        })
        li.setInfo(type='Video', infoLabels=meta)
        xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, li)
def getCategoryKeyByValue(val):
    for key, value in allCategories.items():
        if py2_encode(val) in value:
            return key
    return val
示例#26
0
 def getMovies(self, tipus, page, order, search):
     if search == None:
         search = ''
     url_content = client.request(
         '%s?page=%s&type=%s&order=%s&search=%s' %
         (base_url, page, tipus, order, quote_plus(search)))
     movies = client.parseDOM(url_content,
                              'div',
                              attrs={'class': 'col-sm-4 col_main'})
     if len(movies) > 0:
         for movie in movies:
             tempTitle = client.parseDOM(movie,
                                         'div',
                                         attrs={'class': 'col_name'})[0]
             title = py2_encode(client.replaceHTMLCodes(tempTitle)).replace(
                 '<small>(sorozat)</small>', '')
             isSorozat = "(sorozat)" in tempTitle
             sorozatLabel = ''
             if isSorozat and tipus != "2":
                 sorozatLabel = ' [COLOR yellow][I]sorozat[/I][/COLOR]'
             url = client.parseDOM(movie,
                                   'a',
                                   attrs={'class': 'col_a'},
                                   ret='href')[0]
             thumbDiv = client.parseDOM(movie,
                                        'div',
                                        attrs={'class': 'col-sm-6'})[0]
             thumb = 'https:' + client.parseDOM(thumbDiv, 'img',
                                                ret='src')[0]
             infoDiv = client.parseDOM(movie,
                                       'div',
                                       attrs={'class': 'col-sm-6'})[1]
             infoRows = client.parseDOM(infoDiv,
                                        'div',
                                        attrs={'class': 'row'})
             year = re.sub('<.*>', '',
                           py2_encode(client.replaceHTMLCodes(
                               infoRows[0]))).strip()
             duration = int(
                 re.sub('<.*>', '',
                        py2_encode(client.replaceHTMLCodes(
                            infoRows[1]))).strip().replace(' perc',
                                                           '')) * 60
             linkcount = re.sub(
                 '<.*>', '', py2_encode(client.replaceHTMLCodes(
                     infoRows[2]))).strip().replace('db', '')
             action = 'series' if isSorozat else 'movie'
             self.addDirectoryItem(
                 '%s (%s)%s | [COLOR limegreen]%s link[/COLOR]' %
                 (title, year, sorozatLabel, linkcount),
                 '%s&url=%s' % (action, url),
                 thumb,
                 'DefaultMovies.png' if isSorozat else 'DefaultTVShows.png',
                 meta={
                     'title': title,
                     'duration': duration,
                     'fanart': thumb
                 })
         pager = client.parseDOM(url_content,
                                 'select',
                                 attrs={'name': 'page'})[0]
         options = client.parseDOM(pager, 'option', ret='value')
         if (int(options[-1]) > int(page)):
             self.addDirectoryItem(
                 u'[I]K\u00F6vetkez\u0151 oldal  (%d/%s)>>[/I]' %
                 (int(page) + 1, options[-1]),
                 'movies&page=%d&type=%s&order=%s&search=%s' %
                 (int(page) + 1, tipus, order, search), '',
                 'DefaultFolder.png')
         self.endDirectory(type="movies")
     else:
         xbmcgui.Dialog().ok('NetMozi', 'Nem található forrás!')
         xbmcplugin.setResolvedUrl(int(sys.argv[1]), False,
                                   xbmcgui.ListItem())
示例#27
0
    def episodes(self, id, fanart, subcats=None):
        try:
            myfreemiumcodes = json.loads(
                xbmcaddon.Addon().getSetting('myfreemiumcodes'))
        except:
            myfreemiumcodes = {}

        class title_sorter:
            PATTERNS_IN_PRIORITY_ORDER = [
                re.compile(
                    r'^(?P<YEAR>\d{2,4})-(?P<MONTH>\d{2})-(?P<DAY>\d{2})$'
                ),  # Date-only
                re.compile(r'^(?P<SEASON>\d+)\. évad (?P<EPISODE>\d+)\. rész$'
                           ),  # Only Season + Episode
                re.compile(r'^(?P<EPISODE>\d+)\. rész$'),  # Only Episode
                re.compile(
                    r'.* (?P<YEAR>\d{2,4})-(?P<MONTH>\d{2})-(?P<DAY>\d{2})$'
                ),  # Title + Date
                re.compile(
                    r'.* \((?P<YEAR>\d{2,4})-(?P<MONTH>\d{2})-(?P<DAY>\d{2})\)$'
                ),  # Title + (Date)
                re.compile(
                    r'^(?P<YEAR>\d{2,4})-(?P<MONTH>\d{2})-(?P<DAY>\d{2}) .*'
                ),  # Date + Title
                re.compile(
                    r'.* (?P<SEASON>\d+)\. évad (?P<EPISODE>\d+)\. rész$'
                ),  # Title + Season + Episode
                re.compile(r'.* (?P<EPISODE>\d+)\. rész$')  # Title + Episode
            ]

            @classmethod
            def find_first_common_pattern(cls, episodes):
                for pattern in cls.PATTERNS_IN_PRIORITY_ORDER:
                    if all([
                            pattern.match(ep.get('title', '')) is not None
                            for ep in episodes
                    ]):
                        return pattern
                return None

            @classmethod
            def all_match_same_pattern(cls, episodes):
                return cls.find_first_common_pattern(episodes) is not None

            @classmethod
            def sorted(cls, episodes, reverse):
                def key(episode):
                    m = pattern.match(episode.get('title', ''))
                    return tuple(int(i) for i in m.groups())

                pattern = cls.find_first_common_pattern(episodes)
                return sorted(episodes,
                              key=lambda ep: key(ep),
                              reverse=reverse)

        def getClipID(item):
            return int(item['clips'][0]['id'])

        def getEpisode(item):
            return int(item['clips'][0]['product']['episode'])

        def allEpisodeFilled(episodes):
            allFilled = True
            for item in episodes:
                if (item['clips'][0]['product']['episode'] is None):
                    allFilled = False
            return allFilled

        def episodeIsMostPlus(episode):
            return (('freemium_products' in item)
                    and (len(item['freemium_products']) > 0))

        def userIsEligibleToPlayEpisode(episode):
            if not episodeIsMostPlus(episode):
                return True
            for product in item['freemium_products']:
                code = product["code"]
                id = product["id"]
                if code in myfreemiumcodes and id in myfreemiumcodes[code]:
                    return True
            return False

        try:
            subcats = json.loads(subcats)
        except:
            pass
        if subcats == None:
            query = base_url + episode_subcat_link
            subcats = net.request(query % id)
            subcats = [
                i for i in json.loads(subcats)['program_subcats'] if 'id' in i
            ]

        if len(subcats) > 1:
            # the show has multiple seasons or subcategories, list these, and let the user to choose one
            for item in subcats:
                str(item['id'])
                self.addDirectoryItem(
                    py2_encode(item['title']),
                    'episodes&url=%s&fanart=%s&subcats=%s' %
                    (id, fanart, quote_plus(json.dumps([item]))),
                    '',
                    'DefaultFolder.png',
                    Fanart=fanart)
            self.endDirectory(type='seasons')
            return

        query = base_url + episode_link
        episodes = net.request(query % (id, str(subcats[0]['id'])))
        episodes = json.loads(episodes)

        hidePlus = xbmcaddon.Addon().getSetting('hide_plus') == 'true'

        sortedEpisodes = episodes
        if (xbmcaddon.Addon().getSetting('sort_episodes') == 'true'):
            reverseSorting = False
            if (xbmcaddon.Addon().getSetting('sort_reverse') == 'true'):
                reverseSorting = True
            if (allEpisodeFilled(episodes)):
                sortedEpisodes = sorted(episodes,
                                        key=getEpisode,
                                        reverse=reverseSorting)
            elif title_sorter.all_match_same_pattern(episodes):
                sortedEpisodes = title_sorter.sorted(episodes,
                                                     reverse=reverseSorting)
            else:
                sortedEpisodes = sorted(episodes,
                                        key=getClipID,
                                        reverse=reverseSorting)

        hasItemsListed = False
        for item in sortedEpisodes:
            try:
                eligible = userIsEligibleToPlayEpisode(item)
                if (not hidePlus) or eligible:
                    title = py2_encode(item['title'])
                    if not eligible:
                        title = '[COLOR red]' + title + ' [B](Most+)[/B][/COLOR]'
                    plot = py2_encode(item['description'])
                    duration = str(item['duration'])
                    try:
                        thumb = img_link % [
                            i['external_key']
                            for i in item['images'] if i['role'] == 'vignette'
                        ][0]
                    except:
                        thumb = img_link % item['display_image']['external_key']
                    thumb = thumb
                    assets = item['clips'][0].get('assets')
                    clip_id = py2_encode(item['id'])
                    meta = {'title': title, 'plot': plot, 'duration': duration}
                    self.addDirectoryItem(
                        title,
                        'play&url=%s&meta=%s&image=%s' %
                        (quote_plus(clip_id), quote_plus(
                            json.dumps(meta)), thumb),
                        thumb,
                        'DefaultTVShows.png',
                        meta=meta,
                        isFolder=False,
                        Fanart=fanart)
                    hasItemsListed = True
            except:
                pass

        self.endDirectory(type='episodes')

        if hidePlus and not hasItemsListed and len(sortedEpisodes) > 0:
            xbmcgui.Dialog().ok('RTL Most',
                                freemium_subscription_needed_errormsg)
            xbmc.executebuiltin("XBMC.Action(Back)")