def drawSplive(page): mode = 4 jsonChannels = Spliveappcom.getChannels(page) image = icon for item in jsonChannels: try: logger.debug("trying splive item...") #title = urllib.unquote_plus(item["title"].decode('iso-8859-1', 'ignore')) title = item["title"] link = item["link"] referer = "splive" if item.has_key("permaLink"): mode = 111 if item.has_key("referer"): referer = item["referer"] logger.info("referer is: " + referer) if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, referer, link) except: logger.error("Something goes wrong with SPLIVEAPP drawer") pass
def openYoutubeLink( url, page ): #could be replaced by decodeAndOpenLink, traces are the unique difference logger.info("decoding youtube link... " + url) link = Decoder.decodeLink(url) logger.info("decoded youtube link: " + link) open(link, page)
def getChannels(): x = [] url = StreamingSports365.HTML_CHANNELS logger.debug("html channels url is: " + url) bruteResult = StreamingSports365.getContentFromUrl( url=url, referer=StreamingSports365.MAIN_URL) logger.debug("html is: " + bruteResult) htmlResults = Decoder.extract( '<table class="uk-table uk-table-hover uk-table-striped">', "</table>", bruteResult) for item in htmlResults.split("<tr>"): if "<td>acestream://" in item: name = "" if '"><strong>' in item: name = Decoder.extract('"><strong>', '</strong>', item) else: name = Decoder.extract('html">', '<', item) link = "acestream://" + Decoder.extract( '<td>acestream://', '</td>', item) logger.info("Added: " + name + ", url: " + link) element = {} element["title"] = name element["link"] = link x.append(element) return x
def get_main_dirs(): ##CONSTANTS PARTS## MAIN_URL = XBMCUtils.getSettingFromContext(sys.argv[1], "remote_repository") BROWSE_CHANNELS = "browse_channels" ICON = XBMCUtils.getAddonFilePath('icon.png') #draw welcome menu add_dir(XBMCUtils.getString(10001), MAIN_URL, 1, ICON, '', 0) add_dir(XBMCUtils.getString(10010), BROWSE_CHANNELS, 3, '', ICON, 0) try: from window.ImageWindow import windowImage # teletext window library add_dir(name=XBMCUtils.getString(10012), url='teletext', mode=4, provider='teletext', page=0, thumbnailImage="", iconimage=ICON) except: logger.info("No PIL module installed (needs Pillow 3.4.2 or less)") pass add_dir(XBMCUtils.getString(10014), 'paidonline', 3, "", 'paidonline', 0) add_dir(XBMCUtils.getString(10015), 'programsonline', 3, "", 'programsonline', 0) try: if updater.isUpdatable(): add_dir(XBMCUtils.getString(10011), '', 0, ICON, 0) except: logger.error("Couldn't add update option: probably server is down!") pass
def openMobdro(url, page): try: link = base64.decodestring(url) except: logger.debug("not a valid base64 content...") pass logger.info("decoded streamgaroo link: " + link) open(link, page)
def drawXspf(html,icon=''): lists = common.parseDOM(html,"track") #rusian acelive format if len(lists)>0: for item in lists: name = common.parseDOM(item,"title")[0].encode("utf-8") value = common.parseDOM(item,"location")[0].encode("utf-8") logger.info("Added: "+name+", url: "+value) add_dir(name, value, 2, icon,'', 0)
def get_params(): param = [] paramstring = sys.argv[2] if len(paramstring) >= 2: params = sys.argv[2] try: #now extract expected params, it has been changed because some params could be links #with other params and the previews method (split with '?' expr. doesn't work in some cases) logger.debug("filling params array with brute params...") mode = params[params.find("mode=") + len("mode="):] logger.debug("brute mode: " + mode) if mode.find("&") > -1: mode = mode[:mode.find("&")] url = params[params.find("url=") + len("url="):] logger.debug("brute url: " + url) if url.find("&mode") > -1: url = url[:url.find("&mode")] elif url.find("&page") > -1: url = url[:url.find("&page")] elif url.find("&") > -1: url = url[:url.find("&")] page = params[params.find("page=") + len("page="):] logger.debug("brute page: " + page) if page.find("&provider") > -1: page = page[:page.find("&provider")] elif page.find("&") > -1: page = page[:page.find("&")] provider = params[params.find("provider=") + len("provider="):] logger.debug("brute provider: " + provider) if provider.find("&") > -1: provider = provider[:provider.find("&")] #finally put in param array logger.debug("done, filling params dic...") param = {} param["mode"] = mode param["url"] = url param["page"] = page param["provider"] = provider logger.debug("done params built: " + str(len(param))) except Exception as e: logger.error("ERROR: using old method to extract params..." + str(e)) #old method cleanedparams = params.replace('?', '') if (params[len(params) - 1] == '/'): params = params[0:len(params) - 2] pairsofparams = cleanedparams.split('&') param = {} for i in range(len(pairsofparams)): splitparams = {} splitparams = pairsofparams[i].split('=') if (len(splitparams)) == 2: param[splitparams[0]] = splitparams[1] logger.info("param: " + splitparams[0] + " with value: " + splitparams[1]) return param
def drawYomviEs(page): mode = 120 jsonChannels = Yomvies.getChannels(page) for item in jsonChannels: title = item["title"] link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "yomvies", link)
def drawMamahdcom(page): mode = 4 jsonChannels = Mamahdcom.getChannels(page) for item in jsonChannels: title = item["title"] link = item["link"] if item.has_key("permaLink"): mode = 112 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "mamahdcom", link)
def drawFilmon(page): jsonChannels = Filmoncom.getChannelsJSON() for itemFirst in jsonChannels: if page == "0": add_dir(itemFirst["title"], "http://www.filmon.com/tv/" + itemFirst["alias"], 4, icon, "filmoncom", itemFirst["title"]) elif (page == itemFirst["title"]) and itemFirst.has_key("channels"): for item in itemFirst["channels"]: add_dir(item["title"], "http://www.filmon.com/tv/" + item["alias"], 5, item["logo"], "filmoncom", item["title"]) else: logger.info("no channel: " + page)
def drawStreamgaroo(page): jsonChannels = Streamgaroo.getChannels(page) for item in jsonChannels: mode = 121 title = item["title"] link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon if item.has_key("navigate"): mode = 4 add_dir(title, link, mode, image, "streamgaroo", link)
def drawTvshowme(page): jsonChannels = Tvshowme.getChannels(page) for item in jsonChannels: mode = 4 title = item["title"] link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon if item.has_key("finalLink"): mode = 100 add_dir(title, link, mode, image, "tvshowme", link)
def drawRamalin(page): jsonChannels = Ramalin.getChannels(page) for item in jsonChannels: mode = 4 title = item["title"] link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon if item.has_key("finalLink"): mode = 2 add_dir(title, link, mode, image, "ramalin", link)
def drawMejorTorrent(page): jsonChannels = MejorTorrent.getChannels(page) for item in jsonChannels: mode = 4 title = item["title"] link = item["link"] if 'secciones.php' in link and '&p=' not in link: mode = 127 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "mejortorrent", link)
def update(): #download ZIP file start = time.clock() localfile = ROOT_DIR+"/update.zip" response = urllib2.urlopen(REMOTE_FILE_XML) html = response.read() remote_file = common.parseDOM(html,"file")[0].encode("utf-8") #remote version downloadtools.downloadfile(remote_file, localfile, notStop=False) end = time.clock() logger.info("org.harddevelop.kodi.tv Downloaded in %d seconds " % (end-start+1)) separatorChar = XBMCUtils.getSeparatorChar() #unzip unzipper = ziptools.ziptools() logger.info("org.harddevelop.kodi.tv destpathname=%s" % ROOT_DIR) addons_dir = XBMCUtils.getAddonsDir() current_plugin_dir = XBMCUtils.getPathFixedFrom(XBMCUtils.getAddonInfo('path')) logger.debug("using dir: "+addons_dir+" to extract content") unzipper.extractReplacingMainFolder(localfile,addons_dir,current_plugin_dir) #github issues #unzipper.extract(localfile,ROOT_DIR) #clean downloaded zip file logger.info("org.harddevelop.kodi.tv clean zip file...") os.remove(localfile) logger.info("org.harddevelop.kodi.tv clean done!")
def drawTuMejorTorrent(page): jsonChannels = TuMejorTorrent.getChannels(page) for item in jsonChannels: mode = 4 title = item["title"] link = item["link"] if item.has_key("finalLink"): mode = 126 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "tumejortorrent", link)
def drawSkylinewebcams(page): jsonChannels = Skylinewebcamscom.getChannels(page) mode = 4 for item in jsonChannels: title = item["title"] link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon if item.has_key("permaLink"): mode = 108 add_dir(title, link, mode, image, "skylinewebcams", link)
def drawAcetvru(page): mode = 2 jsonChannels = Acetvru.getChannels(page) for item in jsonChannels: title = item["title"] if title == 'Display by event': title = XBMCUtils.getString(10006) link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "acetvru", link)
def drawElitetorrentnet(page): jsonChannels = Elitetorrent.getChannels(page) for item in jsonChannels: mode = 4 title = item["title"] link = item["link"] if '/torrent/' in link: mode = 124 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "elitetorrentnet", link)
def drawArenavisionin(page): mode = 4 jsonChannels = Arenavisionin.getChannels(page) for item in jsonChannels: title = item["title"] if title == 'Display by event': title = XBMCUtils.getString(10006) link = item["link"] if link != '1': mode = 114 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "arenavisionin", link)
def drawMobdro(page): jsonChannels = Mobdro.getChannels(page) for item in jsonChannels: title = item["title"] link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon if item.has_key("finalLink"): link = base64.encodestring(link) mode = 122 #base64 link, so needs to be decoded else: mode = 4 add_dir(title, link, mode, image, "mobdro", link)
def drawShowsporttvcom(page): mode = 4 jsonChannels = ShowsportTvCom.getChannels(page) for item in jsonChannels: title = item["title"] if title == 'Display by event': title = XBMCUtils.getString(10006) link = item["link"] if link != '1': mode = 113 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "showsporttvcom", link)
def quasarUpdater(): if XBMCUtils.getDialogYesNo(XBMCUtils.getString(30052), XBMCUtils.getString(30052)): quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/archive/master.zip" if XBMCUtils.isWindowsPlatform(): logger.debug("Detected Windows system...") if "x64" in platform.machine(): quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.windows_x64.zip" else: quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.windows_x86.zip" elif XBMCUtils.isAndroidPlatform(): logger.debug("Detected Android system...") if os.uname()[4].startswith("arm"): logger.debug("android system...") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.android_arm.zip" else: logger.debug("Androidx86 system...") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.android_x86.zip" elif XBMCUtils.isRaspberryPlatform(): logger.debug("raspberry system...") if "armv7" in platform.machine(): logger.debug("raspberry pi 2!") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_armv7.zip" elif "armv6" in platform.machine(): logger.debug("raspberry pi 1!") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_arm.zip" else: logger.debug("raspberry pi 3!") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_arm64.zip" elif XBMCUtils.isLinuxPlatform(): if "x64" in platform.machine(): quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_x64.zip" else: quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_x86.zip" else: logger.info( "no detected platform, using default (could be a osx?)") try: updater.install(quasarUrl, "plugin.video.quasar", "plugin.video.quasar") logger.debug("addon installed!") except: logger.error("Addon not installed, something wrong happened!") pass XBMCUtils.getOkDialog(XBMCUtils.getString(30051), XBMCUtils.getString(30051)) logger.debug("launch done!")
def getChannels(page): x = [] if page == '0': url = CNN.LAST_NEWS_RSS logger.debug("news rss url is: "+url) bruteResult = CNN.getContentFromUrl(url=url,launchLocation=True,ajax=False) logger.debug("brute response: "+bruteResult) lists = common.parseDOM(bruteResult, "item") if len(lists) > 0: logger.info("counted: " + str(len(lists))) for item in lists: name = common.parseDOM(item, "title")[0].encode("utf-8") value = common.parseDOM(item, "guid")[0].encode("utf-8") logger.info("Added: " + name + ", url: " + value) element = {} element["title"] = name.replace('<![CDATA[','').replace("]]>","") element["link"] = value.replace("//www.cnn.com/","//edition.cnn.com/") try: img = common.parseDOM(item, "media:content", ret="url")[0].encode("utf-8") element["thumbnail"] = img except: logger.debug("Could not be extracted any img. :'(") x.append(element) else: html = CNN.getContentFromUrl(url=page,launchLocation=True,referer=CNN.MAIN_URL) startRegex = '<div class="el__leafmedia el__leafmedia--sourced-paragraph">' body = Decoder.extract(startRegex,'</div><p class="zn-body__paragraph zn-body__footer">',html) logger.debug("removing html: "+body) body = Decoder.removeHTML(body) logger.debug("html has removed from body!") if '|' in body: body = body[body.find('|')+1:] try: lowerCaseIndex = int(re.search("[a-z]", body).start()) body = body[:lowerCaseIndex-1]+"\n"+body[lowerCaseIndex-1:] except: logger.error("No break for city was done. Something goes wrong") pass element = {} element["link"] = page element["title"] = body element["thumbnail"] = '' x.append(element) return x
def install(remote_file,id,folder): #first check if plexus exists, and where logger.info("installing "+id+"... ") addons_dir = XBMCUtils.getAddonsDir() logger.debug("Addons dir set to: "+addons_dir) localfile = ROOT_DIR+"/install.zip" downloadtools.downloadfile(remote_file, localfile, notStop=False) logger.debug("Download done, now it's time to unzip") unzipper = ziptools.ziptools() if folder == '': unzipper.extract(localfile,addons_dir) #github issues else: unzipper.extractReplacingMainFolder(localfile,addons_dir,folder) logger.debug("Unzip done! cleaning...") os.remove(localfile) logger.info("Additional addon clean done!")
def openSpliveLink(url, page, provider): if url.find(".m3u8") == -1 and url.find("rtmp://") == -1: channel = Spliveappcom.decodeUrl(url, provider) link = channel[0]["link"] if link.find(", referer:") > -1: link = link[0:link.find(", referer:")] url = link else: logger.debug( "nothing decoded for splive encrypted channels, continue...") logger.debug("splive BRUTE logic for url: " + url) try: if 'ponlatv.com' in url or 'playerhd1.pw' in url: logger.debug("trying to decode cineestrenos script from url: " + url) url = Cineestrenostv.extractScriptLevel3( url, referer=Cineestrenostv.MAIN_URL) logger.debug("decoded link was: " + url) else: url = Cineestrenostv.getChannels(url)[0]["link"] html = Downloader.getContentFromUrl(url) element = Cineestrenostv.extractIframeChannel(html, url) if element is not None and element.has_key("link"): url = element["link"] logger.debug("cineestrenos url was decoded to: " + url) else: logger.debug("nothing was done to decode cineestrenostv url!") except: logger.debug("nothing to be decoded with url: " + url) pass link = url logger.info("found link: " + link + ", launching...") open(link, page)
def importEngine(engine, url, targetPath, deletePath): ROOT_DIR = XBMCUtils.getAddonInfo('path') try: shutil.rmtree(ROOT_DIR + "/" + engine) except: logger.debug("local folder %s doesn't exists... continue" % str(ROOT_DIR + "/" + engine)) pass logger.debug("downloading...") localfile = ROOT_DIR + "/master.zip" try: os.delete(localfile) except: logger.debug("local file doesn't exists... continue") pass downloadtools.downloadfile(url, localfile, notStop=True) logger.debug("done, unzipping...") logger.debug("Download done, now it's time to unzip") unzipper = ziptools.ziptools() unzipper.extract(localfile, ROOT_DIR) shutil.move(ROOT_DIR + targetPath, ROOT_DIR + "/" + engine) logger.debug("done, delete all unused files...") shutil.rmtree(ROOT_DIR + "/" + deletePath) logger.debug("Unzip done! cleaning...") try: os.unlink(localfile) except: logger.debug("couldn't remove %s" % localfile) pass logger.info("Additional addon clean done!")
def openTuMejorTorrent(url, page): logger.info("decoding tumejortorrent link... " + url) link = url if ".torrent" not in url: link = TuMejorTorrent.getChannels(url)[0]["link"] logger.debug("provisional link is: " + link) if ".torrent" not in link: link = TuMejorTorrent.getChannels(link)[0]["link"] logger.info("decoded two times tumejortorrent link: " + link) logger.info("decoded tumejortorrent link: " + link) open(link, page)
def openSports365Link(url, page): channel = Sportstream365com.getChannels(url) logger.info("found link: " + channel[0]["link"] + ", launching...") open(channel[0]["link"], page)
def openZonasportsLink(url, page): channel = Zonasportsme.getChannels(url) logger.info("found link: " + channel[0]["link"] + ", launching...") open(channel[0]["link"], page)