def login(force=False): utils.log("User: "******"; Logged in: " + str(config.get_setting_bool( constants.LOGGED_IN)) + "; Token: " + config.get_setting(constants.TOKEN)) if force is False and not utils.isEmpty(config.get_setting(constants.TOKEN)) and config.get_setting_bool(constants.LOGGED_IN): utils.log("Already logged in") return opener = get_url_opener() values = {'username': config.get_setting(constants.USERNAME), 'uid': config.get_unique_id(), 'password': config.get_setting(constants.PASSWORD)} response = opener.open(API_ENDPOINT + '/api/v1.4/post/user/login', urllib.urlencode(values)) response_code = response.getcode() response_text = response.read() if response_code != 200: raise ApiError( "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Did not receive json, something wrong: " + response_text) raise ApiError("Failed to log in, API error")
def get_stream_url(data_url): utils.log("Getting URL for channel: " + data_url) config.login_check() streamurl = None url = API_ENDPOINT + "/api/v1.4/get/content/live-streams/" + data_url + "?include=quality" opener = get_url_opener() opener.addheaders.append( ('Authorization', "Bearer " + config.get_setting(constants.TOKEN))) response = opener.open(url) response_text = response.read() response_code = response.getcode() if response_code != 200: config.set_setting_bool(constants.LOGGED_IN, False) raise ApiError( "Got incorrect response code while requesting stream info. Reponse code: " + response_code + ";\nText: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting(constants.LOGGED_IN, False) raise ApiError("Did not receive json, something wrong: " + response_text)
def get_itemlist(service_url, parameters, channel="", viewmode="", folder=True): plugintools.log("tvalacarta.api.get_itemlist service_url=" + service_url + ", parameters=" + repr(parameters)) # Service call service_parameters = urllib.urlencode(parameters) plugintools.log("tvalacarta.api.get_json_response parameters=" + service_parameters) try: body, response_headers = read(service_url, service_parameters) except: import traceback plugintools.log("tvalacarta.api.get_json_response " + traceback.format_exc()) json_response = plugintools.load_json(body) if json_response["error"] and json_response["error_code"] == "403": config.set_setting("account_session", "") itemlist = parse_itemlist_from_response(json_response, viewmode=viewmode, channel=channel, folder=folder) return itemlist
def get_stream_url(data_url): utils.log("Getting URL for channel: " + data_url) config.login_check() streamurl = None url = API_ENDPOINT + "/api/v1.7/get/content/live-streams/" + data_url + "?include=quality" opener = get_url_opener() opener.addheaders.append(('Authorization', "Bearer " + config.get_setting(constants.TOKEN))) response = opener.open(url) response_text = response.read() response_code = response.getcode() if response_code != 200: config.set_setting_bool(constants.LOGGED_IN, False) raise ApiError( "Got incorrect response code while requesting stream info. Reponse code: " + response_code + ";\nText: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting(constants.LOGGED_IN, False) raise ApiError("Did not receive json, something wrong: " + response_text)
def get_stream_url(data_url): utils.log("Getting URL for channel: " + data_url) config.login_check() streamurl = None url = API_ENDPOINT + "/get/content/live-streams/" + data_url + "?include=quality" opener = get_url_opener() opener.addheaders.append( ('Authorization', "Bearer " + config.get_setting(constants.TOKEN))) response = None try: response = opener.open(url) except urllib.error.HTTPError as e: config.set_setting(constants.LOGGED_IN, "False") raise ApiError("Something wrong: " + e.code) response_text = response.read() response_code = response.getcode() if response_code != 200: config.set_setting_bool(constants.LOGGED_IN, "False") raise ApiError( "Got incorrect response code while requesting stream info. Reponse code: " + response_code + ";\nText: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError: config.set_setting(constants.LOGGED_IN, "False") raise ApiError("Did not receive json, something wrong: " + response_text) stream_links = {} for stream in json_object["data"]: if stream["type"] != "live-streams": continue url = stream["attributes"][ "stream-url"] + "&auth_token=app_" + config.get_setting( constants.TOKEN) if "_lq.stream" in stream["id"]: stream_links["3-lq"] = url elif "_mq.stream" in stream["id"]: stream_links["2-mq"] = url elif "_hq.stream" in stream["id"]: stream_links["1-hq"] = url elif "_hd.stream" in stream["id"]: stream_links["0-hd"] = url for key in sorted(stream_links.keys()): streamurl = stream_links[key] break return streamurl
def login(force=False): utils.log("User: "******"; Logged in: " + str(config.get_setting_bool(constants.LOGGED_IN)) + "; Token: " + config.get_setting(constants.TOKEN)) if force is False and not utils.isEmpty(config.get_setting( constants.TOKEN)) and config.get_setting_bool(constants.LOGGED_IN): utils.log("Already logged in") return opener = get_url_opener() values = { 'id': config.get_setting(constants.USERNAME), 'uid': config.get_unique_id(), 'password': config.get_setting(constants.PASSWORD) } response = opener.open(API_ENDPOINT + '/post/user/users?%s' % urllib.parse.urlencode(values)) response_code = response.getcode() response_text = response.read() if response_code == 422: raise ApiError( "Login failed, Status: 422 Unprocessable Entity. Did you enter username/password?" ) if response_code == 401: raise ApiError( "Login failed, Status: 401 unauthorized. Check your username/password" ) if response_code != 200: raise ApiError( "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError: config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Did not receive json, something wrong: " + response_text) raise ApiError("Failed to log in, API error") utils.log(response_text) config.set_setting_bool(constants.LOGGED_IN, True) config.set_setting(constants.TOKEN, json_object["data"]["attributes"]["token"]) utils.log("Login success! Token: " + config.get_setting(constants.TOKEN)) return True
def set_opcion(item, seleccion, opciones, video_urls): logger.info() # logger.debug(item.tostring('\n')) salir = False # No ha elegido nada, lo más probable porque haya dado al ESC if seleccion == -1: # Para evitar el error "Uno o más elementos fallaron" al cancelar la selección desde fichero strm listitem = xbmcgui.ListItem(item.title, iconImage="DefaultVideo.png", thumbnailImage=item.thumbnail) xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, listitem) # "Descargar" elif opciones[seleccion] == config.get_localized_string(30153): from channels import downloads if item.contentType == "list" or item.contentType == "tvshow": item.contentType = "video" item.play_menu = True downloads.save_download(item) salir = True # "Quitar de favoritos" elif opciones[seleccion] == config.get_localized_string(30154): from channels import favorites favorites.delFavourite(item) salir = True # "Añadir a favoritos": elif opciones[seleccion] == config.get_localized_string(30155): from channels import favorites item.from_channel = "favorites" favorites.addFavourite(item) salir = True # "Añadir a videoteca": elif opciones[seleccion] == config.get_localized_string(30161): titulo = item.fulltitle if titulo == "": titulo = item.title new_item = item.clone(title=titulo, action="play_from_library", category="Cine", fulltitle=item.fulltitle, channel=item.channel) from core import videolibrarytools videolibrarytools.add_movie(new_item) salir = True # "Buscar Trailer": elif opciones[seleccion] == config.get_localized_string(30162): config.set_setting("subtitulo", False) xbmc.executebuiltin("XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(channel="trailertools", action="buscartrailer", contextual=True).tourl())) salir = True return salir
def get_itemlist_from_item(item, viewmode="", channel="", context="", title_field="title", folder=True): plugintools.log("tvalacarta.api.get_itemlist_from_item item="+repr(item)+", context="+context) body , response_headers = read( item.url ) json_response = plugintools.load_json(body) if json_response["error"] and json_response["error_code"]=="403": config.set_setting("account_session","") return parse_itemlist_from_response(json_response,folder=folder,viewmode=viewmode,channel=channel,context=context,title_field=title_field)
def set_opcion(item, seleccion, opciones, video_urls): logger.info() # logger.debug(item.tostring('\n')) salir = False # No ha elegido nada, lo más probable porque haya dado al ESC if seleccion == -1: # Para evitar el error "Uno o más elementos fallaron" al cancelar la selección desde fichero strm listitem = xbmcgui.ListItem(item.title) if config.get_platform(True)['num_version'] >= 16.0: listitem.setArt({ 'icon': "DefaultVideo.png", 'thumb': item.thumbnail }) else: listitem.setIconImage("DefaultVideo.png") listitem.setThumbnailImage(item.thumbnail) xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, listitem) # "Descargar" elif opciones[seleccion] == config.get_localized_string(30153): from channels import downloads if item.contentType == "list" or item.contentType == "tvshow": item.contentType = "video" item.play_menu = True downloads.save_download(item) salir = True # "Quitar de favoritos" elif opciones[seleccion] == config.get_localized_string(30154): from channels import favorites favorites.delFavourite(item) salir = True # "Añadir a favoritos": elif opciones[seleccion] == config.get_localized_string(30155): from channels import favorites item.from_channel = "favorites" favorites.addFavourite(item) salir = True # "Buscar Trailer": elif opciones[seleccion] == config.get_localized_string(30162): config.set_setting("subtitulo", False) xbmc.executebuiltin("XBMC.RunPlugin(%s?%s)" % (sys.argv[0], item.clone(channel="trailertools", action="buscartrailer", contextual=True).tourl())) salir = True return salir
def getDownloadListPath(): # La ruta de la lista de descargas es un parámetro downloadpath = config.get_setting("downloadlistpath") # No está fijada, intenta forzarla try: if downloadpath == "": logger.info("[downloadtools.py] downloadpath está vacio") # Busca un setting del skin (Telebision) try: import xbmc downloadpath = xbmc.getInfoLabel('Skin.String(downloadpath)') logger.info("[downloadtools.py] downloadpath en el skin es " + downloadpath) except: pass # No es Telebision, fuerza el directorio home de XBMC if downloadpath == "": downloadpath = os.path.join(config.get_data_path(), "downloads", "list") logger.info( "[downloadtools.py] getDownloadPath: downloadpath=%s" % downloadpath) if not os.path.exists(downloadpath): logger.info( "[downliadtools.py] download path doesn't exist:" + downloadpath) os.mkdir(downloadpath) config.set_setting("downloadlistpath", downloadpath) # Es Telebision, lo pone en el skin else: # guardar setting del skin en setting del plugin downloadpath = os.path.join(downloadpath, "list") downloadpath = xbmc.translatePath(downloadpath) logger.info("[downloadtools.py] downloadpath nativo es " + downloadpath) config.set_setting("downloadlistpath", downloadpath) except: pass logger.info("[downloadtools.py] downloadlistpath=" + downloadpath) try: os.mkdir(downloadpath) except: pass return downloadpath
def post(self, name): with model.session_scope() as session: user_session = self.get_user_session(session) user_session.policy.verify('conf_edit') name = to_snake_case(name) schema = self.get_schema(name) fileinfo = self.request.files['file'][0] body = fileinfo['body'] if schema['type'] == 'image' and schema['accept'] == '.svg': body = yield self.clean_svg(body) config.set_setting(session, name, body.encode('utf-8')) self.finish()
def put(self): with model.session_scope() as session: user_session = self.get_user_session(session) user_session.policy.verify('conf_edit') for name, schema in config.SCHEMA.items(): if config.is_private(name, schema): continue if name not in self.request_son: config.reset_setting(session, name) continue if config.is_primitive(schema): config.set_setting(session, name, self.request_son[name]['value']) self.get()
def getDownloadListPath(): # La ruta de la lista de descargas es un parámetro downloadpath = config.get_setting("downloadlistpath") # No está fijada, intenta forzarla try: if downloadpath == "": logger.info("[downloadtools.py] downloadpath está vacio") # Busca un setting del skin (Telebision) try: import xbmc downloadpath = xbmc.getInfoLabel('Skin.String(downloadpath)') logger.info("[downloadtools.py] downloadpath en el skin es "+downloadpath) except: pass # No es Telebision, fuerza el directorio home de XBMC if downloadpath == "": downloadpath = os.path.join (config.get_data_path(),"downloads","list") logger.info("[downloadtools.py] getDownloadPath: downloadpath=%s" % downloadpath) if not os.path.exists(downloadpath): logger.info("[downliadtools.py] download path doesn't exist:"+downloadpath) os.mkdir(downloadpath) config.set_setting("downloadlistpath",downloadpath) # Es Telebision, lo pone en el skin else: # guardar setting del skin en setting del plugin downloadpath = os.path.join( downloadpath , "list" ) downloadpath = xbmc.translatePath( downloadpath ) logger.info("[downloadtools.py] downloadpath nativo es "+downloadpath) config.set_setting("downloadlistpath", downloadpath) except: pass logger.info("[downloadtools.py] downloadlistpath="+downloadpath) try: os.mkdir(downloadpath) except: pass return downloadpath
def get_response(service_url,parameters): plugintools.log("tvalacarta.api.get_response service_url="+service_url+", parameters="+repr(parameters)) # Service call service_parameters = urllib.urlencode(parameters) plugintools.log("tvalacarta.api.get_response parameters="+service_parameters) try: body, response_headers = read( service_url , service_parameters ) except: import traceback plugintools.log("tvalacarta.api.get_response "+traceback.format_exc()) json_response = plugintools.load_json(body) if json_response["error"] and json_response["error_code"]=="403": config.set_setting("account_session","") return json_response
def get_itemlist_from_item(item, viewmode="", channel="", context="", title_field="title", folder=True): plugintools.log("tvalacarta.api.get_itemlist_from_item item=" + repr(item) + ", context=" + context) body, response_headers = read(item.url) json_response = plugintools.load_json(body) if json_response["error"] and json_response["error_code"] == "403": config.set_setting("account_session", "") return parse_itemlist_from_response(json_response, folder=folder, viewmode=viewmode, channel=channel, context=context, title_field=title_field)
def get_itemlist(service_url,parameters,channel="",viewmode="",folder=True): plugintools.log("tvalacarta.api.get_itemlist service_url="+service_url+", parameters="+repr(parameters)) # Service call service_parameters = urllib.urlencode(parameters) plugintools.log("tvalacarta.api.get_json_response parameters="+service_parameters) try: body, response_headers = read( service_url , service_parameters ) except: import traceback plugintools.log("tvalacarta.api.get_json_response "+traceback.format_exc()) json_response = plugintools.load_json(body) if json_response["error"] and json_response["error_code"]=="403": config.set_setting("account_session","") itemlist = parse_itemlist_from_response(json_response,viewmode=viewmode,channel=channel,folder=folder) return itemlist
def get_response(service_url, parameters): plugintools.log("tvalacarta.api.get_response service_url=" + service_url + ", parameters=" + repr(parameters)) # Service call service_parameters = urllib.urlencode(parameters) plugintools.log("tvalacarta.api.get_response parameters=" + service_parameters) try: body, response_headers = read(service_url, service_parameters) except: import traceback plugintools.log("tvalacarta.api.get_response " + traceback.format_exc()) json_response = plugintools.load_json(body) if json_response["error"] and json_response["error_code"] == "403": config.set_setting("account_session", "") return json_response
def login(force=False): utils.log("User: "******"; Logged in: " + str(config.get_setting_bool(constants.LOGGED_IN)) + "; Token: " + config.get_setting(constants.TOKEN)) if force is False and not utils.isEmpty(config.get_setting( constants.TOKEN)) and config.get_setting_bool(constants.LOGGED_IN): utils.log("Already logged in") return opener = get_url_opener() values = { 'username': config.get_setting(constants.USERNAME), 'uid': config.get_unique_id(), 'password': config.get_setting(constants.PASSWORD) } response = opener.open(API_ENDPOINT + '/api/v1.4/post/user/login', urllib.urlencode(values)) response_code = response.getcode() response_text = response.read() if response_code != 200: raise ApiError( "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Did not receive json, something wrong: " + response_text) raise ApiError("Failed to log in, API error")
def get_epg(date): utils.log("Getting EPG for date: " + date) config.login_check() url = API_ENDPOINT + "/api/v1.4/get/tv/epg/?daynight=" + date opener = get_url_opener() opener.addheaders.append(('Authorization', "Bearer " + config.get_setting(constants.TOKEN))) response = opener.open(url) response_text = response.read() response_code = response.getcode() if response_code != 200: config.set_setting_bool(constants.LOGGED_IN, False) raise ApiError( "Got bad response from EPG service. Response code: " + response_code) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting(constants.LOGGED_IN, False) raise ApiError("Did not receive json, something wrong: " + response_text)
def set_current_servers_version(new_version): return int(config.set_setting("servers_version_number", str(new_version)))
raise ApiError( "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Did not receive json, something wrong: " + response_text) raise ApiError("Failed to log in, API error") if json_object["status"] == "ko": config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Failed to log in. Message: " + response_text) raise ApiError("Failed to log in, check credentials") utils.log(response_text) config.set_setting_bool(constants.LOGGED_IN, True) config.set_setting(constants.TOKEN, json_object["token"]) utils.log("Login success! Token: " + config.get_setting(constants.TOKEN)) return True def get_channels(): config.login_check()
if response_code != 200: raise ApiError( "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Did not receive json, something wrong: " + response_text) raise ApiError("Failed to log in, API error") if json_object["status"] == "ko": config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Failed to log in. Message: " + response_text) raise ApiError("Failed to log in, check credentials") utils.log(response_text) config.set_setting_bool(constants.LOGGED_IN, True) config.set_setting(constants.TOKEN, json_object["token"]) utils.log("Login success! Token: " + config.get_setting(constants.TOKEN)) return True def get_channels(): config.login_check()
def set_current_servers_version(new_version): return int(config.set_setting("servers_version_number", str(new_version)))
def mark_updated(): utils.log("EPG data updated") config.set_setting(constants.LAST_EPG, utils.stringFromDateNow())
raise ApiError( "Got incorrect response code during login. Reponse code: " + response_code + "; Text: " + response_text) json_object = None try: json_object = json.loads(response_text) except ValueError, e: config.set_setting_bool(constants.LOGGED_IN, False) config.set_setting(constants.TOKEN, "") utils.log("Did not receive json, something wrong: " + response_text) raise ApiError("Failed to log in, API error") utils.log(response_text) config.set_setting_bool(constants.LOGGED_IN, True) config.set_setting(constants.TOKEN, json_object["data"]["attributes"]["token"]) utils.log("Login success! Token: " + config.get_setting(constants.TOKEN)) return True def get_channels(): config.login_check() url = API_ENDPOINT + '/get/content/packages?include=channels' opener = get_url_opener() response = opener.open(url) response_text = response.read() response_code = response.getcode() if response_code != 200: