Version 0.9.14
This commit is contained in:
1 parent
af0a1fb6a6
commit
3ff31353c0
3 files changed
+59
-122
No files matched your search
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<addon id="plugin.video.movistarplus"
|
<addon id="plugin.video.movistarplus"
|
||||||
name="Movistar+"
|
name="Movistar+"
|
||||||
version="0.9.13"
|
version="0.9.14"
|
||||||
provider-name="Paco8">
|
provider-name="Paco8">
|
||||||
<requires>
|
<requires>
|
||||||
<!--- <import addon="xbmc.python" version="2.25.0"/> -->
|
<!--- <import addon="xbmc.python" version="2.25.0"/> -->
|
||||||
|
|||||||
@@ -5,97 +5,32 @@
|
|||||||
from __future__ import unicode_literals, absolute_import, division
|
from __future__ import unicode_literals, absolute_import, division
|
||||||
|
|
||||||
endpoints = {
|
endpoints = {
|
||||||
"activacion_dispositivo_cuenta_tk": "https://auth.dof6.com/movistarplus/webplayer/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}?qspVersion=ssp",
|
"activacion_dispositivo_cuenta_tk": "https://auth.dof6.com/movistarplus/{deviceType}/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}?qspVersion=ssp",
|
||||||
"activarpartner": "https://clientservices.dof6.com/oauth2/webplayer/users/{ACCOUNTNUMBER}/partners/{PARTNER}/promo?profile={PROFILE}",
|
"autenticacion_tk": "https://auth.dof6.com/movistarplus/api/devices/{deviceType}/users/authenticate",
|
||||||
"alquilertvodlite": "https://lite.dof6.com/mpluslite/webplayer/accounts/{ACCOUNTNUMBER}/tvod/rent",
|
|
||||||
"altaperfil": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/profiles",
|
|
||||||
"autenticacion_tk": "https://auth.dof6.com/movistarplus/api/devices/webplayer/users/authenticate",
|
|
||||||
"avatares": "https://ottcache.dof6.com/vod/config/perfiles/config/avatares.json",
|
"avatares": "https://ottcache.dof6.com/vod/config/perfiles/config/avatares.json",
|
||||||
"bookmarking2": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/bookmarks/{family}",
|
|
||||||
"borradofavoritos": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/favorites/{family}/{contentId}",
|
"borradofavoritos": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/favorites/{family}/{contentId}",
|
||||||
"borrargrabacionindividual": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrRecordings/{showId}",
|
"borrargrabacionindividual": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrRecordings/{showId}",
|
||||||
"borrargrabaciontemporada": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrRecordings/episodesDeletion",
|
"buscar_best": "https://perso.dof6.com/movistarplus/{deviceType}/users/contents/search?accountnumber={ACCOUNTNUMBER}&profile={profile}&term={texto}&mode=VODRU7D&showSeries=series&distilledTvRights={distilledTvRights}&version=8&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}&scope=DAZN",
|
||||||
"borrarperfil": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/profiles/{profileID}",
|
|
||||||
"boton_contrata": "https://www.movistar.es/particulares/tv?pid=yomvi-canalyficha-contratar",
|
|
||||||
"buscar_anonimo": "https://ottcache.dof6.com/movistarplus/webplayer/users/contents/search?term={texto}&mode=VODRU7D&profile=anonimo&version=8&mdrm={mdrm}&tlsstream=true&scope=DAZN",
|
|
||||||
"buscar_best": "https://perso.dof6.com/movistarplus/webplayer/users/contents/search?accountnumber={ACCOUNTNUMBER}&profile={profile}&term={texto}&mode=VODRU7D&showSeries=series&distilledTvRights={distilledTvRights}&version=8&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}&scope=DAZN",
|
|
||||||
"buscar_best_tag": "https://perso.dof6.com/movistarplus/webplayer/users/contents/search?{POPULATE}&demarcation={demarcation}&scope=DAZN",
|
|
||||||
"buscar_coldstart": "https://ottcache.dof6.com/movistarplus/webplayer/users/coldstart/contents/search?profile={profile}&mode=VODRU7D&showSeries=series&version=8&mdrm={mdrm}&tlsstream=true&maxItems=0&demarcation={demarcation}&scope=DAZN",
|
|
||||||
"cambiopassword": "https://auth.dof6.com/credmgmt/api/credmgmt/user/{DIGITALPLUSUSERIDC}/changePassword",
|
|
||||||
"cambiopin": "https://clientservices.dof6.com/movistarplus/webplayer/users/{DIGITALPLUSUSERIDC}/purchasePin",
|
|
||||||
"canales": "https://ottcache.dof6.com/movistarplus/{deviceType}/{profile}/contents/channels?mdrm={mdrm}&tlsstream=true&demarcation={demarcation}&version=8",
|
"canales": "https://ottcache.dof6.com/movistarplus/{deviceType}/{profile}/contents/channels?mdrm={mdrm}&tlsstream=true&demarcation={demarcation}&version=8",
|
||||||
"cancelargrabaciontemporada": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrScheduledSeasons/{id}",
|
|
||||||
"capitulos": "https://ottcache.dof6.com/movistarplus/webplayer/contents/series/{contentId}/episodes?start={start}&end={end}",
|
|
||||||
"cerrarsesiondispositivo": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}/sessions?qspVersion=ssp",
|
"cerrarsesiondispositivo": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}/sessions?qspVersion=ssp",
|
||||||
"cerrarsesiones": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices?qspVersion=ssp",
|
|
||||||
"compras": "https://clientservices.dof6.com/movistarplus/webplayer/users/{ACCOUNTNUMBER}/impulsivePurchases?qspVersion=ssp&version=8",
|
|
||||||
"config": "https://ottcache.dof6.com/movistarplus/{origin}/webplayer/{profile}/configuration/config?format=json&uisegment={uisegment}",
|
|
||||||
"consulta_producto": "https://clientservices.dof6.com/movistarplus/upselling/{deviceType}/{PLAYREADYID}/contents/{contents}/{contentId}/subscription?mdrm={mdrm}",
|
|
||||||
"consultaestadoalquiler": "https://lite.dof6.com/mpluslite/webplayer/accounts/{ACCOUNTNUMBER}/tvod/rental/{EXTERNALPRODUCTID}",
|
|
||||||
"consultaestadooperacion": "https://clientservices.dof6.com/movistarplus/webplayer/users/{ACCOUNTNUMBER}/paymentStatus",
|
|
||||||
"consultaformaspago": "https://clientservices.dof6.com/movistarplus/webplayer/users/{ACCOUNTNUMBER}/formsOfPayment",
|
|
||||||
"consultar": "https://ottcache.dof6.com/movistarplus/{deviceType}/contents/browse?profile={profile}&sort={sort}&version=8&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
"consultar": "https://ottcache.dof6.com/movistarplus/{deviceType}/contents/browse?profile={profile}&sort={sort}&version=8&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
||||||
"consultarperfil": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/profiles/{profileID}",
|
|
||||||
"consultarsala": "https://watchtogether.dof6.com/rooms/{ROOMID}?accountId={ACCOUNTNUMBER}",
|
|
||||||
"contrata_producto": "https://clientservices.dof6.com/movistarplus/upselling/{deviceType}/{PLAYREADYID}/user/{ACCOUNTNUMBER}/products/{ProductId}?mdrm={mdrm}",
|
|
||||||
"contratarlite_ANONIMO": "https://contratar.movistarplus.es/",
|
|
||||||
"controlpaterno": "https://auth.dof6.com/movistarplus/auth/webplayer/users/authenticate",
|
|
||||||
"crearsala": "https://watchtogether.dof6.com/rooms?accountId={ACCOUNTNUMBER}",
|
|
||||||
"dejardeseguir2": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/seriesTrackings/{id}",
|
|
||||||
"editarperfil": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/profiles/{profileID}",
|
|
||||||
"eliminardipositivo": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}?qspVersion=ssp",
|
"eliminardipositivo": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}?qspVersion=ssp",
|
||||||
"en-canales-por-genero": "https://ottcache.dof6.com/movistarplus/webplayer/{profile}/contents/highlighted?mediaType=FOTOH&filter=SVODQ3&pageNumber={pagenumber}&pageLength={pagelength}&mdrm={mdrm}&tlsstream=true&version=8",
|
|
||||||
"favoritos": "https://perso.dof6.com/movistarplus/{deviceType}/users/{DIGITALPLUSUSERIDC}/favorites?profile={PROFILE}&version=8&mediaType=FOTOV&accountNumber={ACCOUNTNUMBER}&idsOnly={idsOnly}&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
"favoritos": "https://perso.dof6.com/movistarplus/{deviceType}/users/{DIGITALPLUSUSERIDC}/favorites?profile={PROFILE}&version=8&mediaType=FOTOV&accountNumber={ACCOUNTNUMBER}&idsOnly={idsOnly}&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
||||||
"ficha": "https://ottcache.dof6.com/movistarplus/{deviceType}/contents/{id}/details?profile={profile}&mediaType={mediatype}&version=8&mode={mode}&catalog={catalog}&channels={channels}&state={state}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}&legacyBoxOffice={legacyBoxOffice}",
|
"ficha": "https://ottcache.dof6.com/movistarplus/{deviceType}/contents/{id}/details?profile={profile}&mediaType={mediatype}&version=8&mode={mode}&catalog={catalog}&channels={channels}&state={state}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}&legacyBoxOffice={legacyBoxOffice}",
|
||||||
"grabaciones": "https://perso.dof6.com/movistarplus/npvr/{deviceType}/users/{DIGITALPLUSUSERIDC}/recordings?profile={PROFILE}&mediaType=FOTOH&version=8&idsOnly={idsOnly}&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
"grabaciones": "https://perso.dof6.com/movistarplus/npvr/{deviceType}/users/{DIGITALPLUSUSERIDC}/recordings?profile={PROFILE}&mediaType=FOTOH&version=8&idsOnly={idsOnly}&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
||||||
"grabarprograma": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrRecordings",
|
"grabarprograma": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrRecordings",
|
||||||
"grabartemporada": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrScheduledSeasons",
|
"grabartemporada": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/npvrScheduledSeasons",
|
||||||
"guiaTV": "https://ottcache.dof6.com/movistarplus/{deviceType}/{profile}/contents/epg?preOffset={preOffset}&postOffset={postOffset}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}&version=8",
|
|
||||||
"haztecliente": "https://www.movistarplus.es/",
|
|
||||||
"hazteclienteregistro": "https://www.movistar.es/particulares/television/movistar-imagenio/?pid=yomvi-registro-nocliente",
|
|
||||||
"infopub": "https://ottcache.dof6.com/movistarplus/webplayer/{contents}/{contentId}/ad-info?profile={profile}&isRental={ISRENTAL}",
|
|
||||||
"initdata": "https://clientservices.dof6.com/movistarplus/{deviceType}/sdp/mediaPlayers/{DEVICEID}/initData?qspVersion=ssp&version=8&status=default",
|
"initdata": "https://clientservices.dof6.com/movistarplus/{deviceType}/sdp/mediaPlayers/{DEVICEID}/initData?qspVersion=ssp&version=8&status=default",
|
||||||
"initdata2": "https://clientservices.dof6.com/movistarplus/{deviceType}/sdp/mediaPlayers/{DEVICEID}/initData?qspVersion=ssp&version=8&status=login",
|
|
||||||
"keepAliveStream": "https://alkasvaspub.imagenio.telefonica.net/asvas/ccs/{PID}/{deviceCode}/{PLAYREADYID}/Session/{SessionID}",
|
|
||||||
"listaperfiles": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/profiles?state=0&isForKids=0",
|
"listaperfiles": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/profiles?state=0&isForKids=0",
|
||||||
"marcadofavoritos2": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/favorites/{family}",
|
"marcadofavoritos2": "https://grmovistar.imagenio.telefonica.net/asfe/rest/users/favorites/{family}",
|
||||||
"meterusuariosala": "https://watchtogether.dof6.com/rooms/{ROOMID}/participant/{PARTICIPANTID}?accountId={ACCOUNTNUMBER}",
|
|
||||||
"nombrardispositivo": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}/name?qspVersion=ssp",
|
"nombrardispositivo": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices/{DEVICEID}/name?qspVersion=ssp",
|
||||||
"obtenercuenta": "https://clientservices.dof6.com/movistarplus/api/devices/webplayer/account",
|
|
||||||
"obtenerdipositivos": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices?qspVersion=ssp",
|
"obtenerdipositivos": "https://clientservices.dof6.com/movistarplus/accounts/{ACCOUNTNUMBER}/devices?qspVersion=ssp",
|
||||||
"pagodiferido": "https://clientservices.dof6.com/movistarplus/webplayer/users/{ACCOUNTNUMBER}/vod/deferredPurchase?profile={PROFILE}",
|
|
||||||
"pixelTef": "https://audiencias-ott.imagenio.telefonica.net/events",
|
|
||||||
"primerepisodio": "https://ottcache.dof6.com/movistarplus/{deviceType}/series/{id}/first?profile={PROFILE}&version=8&mdrm={mdrm}&tlsstream=true",
|
|
||||||
"promo_home": "https://ottcache.dof6.com/movistarplus/{origin}/webplayer/{profile}/configuration/promo-home?format=json&promosegment={promosegment}",
|
|
||||||
"proximamente-por-genero": "https://ottcache.dof6.com/movistarplus/webplayer/{profile}/contents/upcoming?mediaType=FOTOV&sort=FA&maxItems=30&mdrm={mdrm}&tlsstream=true",
|
|
||||||
"recomendados": "https://perso.dof6.com/movistarplus/{deviceType}/users/{ACCOUNTNUMBER}/recommendations?profile={PROFILE}&userProfile={PROFILEID}&deviceId={PLAYREADYID}&showSeries=series&start={start}&end={end}&version=8&mdrm={mdrm}&tlsstream=true",
|
|
||||||
"recomendados2": "https://perso.dof6.com/movistarplus/{deviceType}/users/{ACCOUNTNUMBER}/contents/recommended?profile={PROFILE}&userProfile={PROFILEID}&deviceId={PLAYREADYID}&start={start}&end={end}&mode=VODRU7D&version=8&mdrm={mdrm}&tlsstream=true",
|
|
||||||
"registro": "https://www.movistar.es/particulares/ver-tv/contenidos/yomvi?origen=activar",
|
|
||||||
"rejilla": "https://ottcache.dof6.com/movistarplus/{deviceType}/{profile}/epg?from={UTCDATETIME}&span={DURATION}&channel={CHANNELS}&network={NETWORK}&version=8&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
"rejilla": "https://ottcache.dof6.com/movistarplus/{deviceType}/{profile}/epg?from={UTCDATETIME}&span={DURATION}&channel={CHANNELS}&network={NETWORK}&version=8&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
||||||
"relacionados": "https://ottcache.dof6.com/movistarplus/{deviceType}/users/webplayer/recommendations?profile={profile}&contentId={contentId}&showSeries=series&start={start}&end={end}&version=8&mdrm={mdrm}&tlsstream=true",
|
"renovacion_cdntoken2": "https://idserver.dof6.com/{ACCOUNTNUMBER}/devices/{deviceType}/cdn/token/refresh",
|
||||||
"renovacion_cdntoken2": "https://idserver.dof6.com/{ACCOUNTNUMBER}/devices/webplayer/cdn/token/refresh",
|
|
||||||
"renovacion_hztoken": "https://clientservices.dof6.com/movistarplus/{deviceType}/mediaPlayers/{DEVICEID}/hz-token",
|
"renovacion_hztoken": "https://clientservices.dof6.com/movistarplus/{deviceType}/mediaPlayers/{DEVICEID}/hz-token",
|
||||||
"renovacion_ssptoken": "https://clientservices.dof6.com/movistarplus/{deviceType}/accounts/{ACCOUNTNUMBER}/ssp-token?mediaPlayerId={DEVICEID}",
|
"renovacion_ssptoken": "https://clientservices.dof6.com/movistarplus/{deviceType}/accounts/{ACCOUNTNUMBER}/ssp-token?mediaPlayerId={DEVICEID}",
|
||||||
"sacarusuariosala": "https://watchtogether.dof6.com/rooms/{ROOMID}/participant/{PARTICIPANTID}?accountId={ACCOUNTNUMBER}",
|
|
||||||
"sacarusuariosalaoffline": "https://watchtogether.dof6.com/rooms/{ROOMID}/participant/{PARTICIPANTID}/abort?accountId={ACCOUNTNUMBER}",
|
|
||||||
"seguimiento": "https://perso.dof6.com/movistarplus/{deviceType}/user/{DIGITALPLUSUSERIDC}/tracking/series/{SERIESID}?accountNumber={ACCOUNTNUMBER}&profile={PROFILE}&version=8&mdrm={mdrm}&tlsstream=true",
|
|
||||||
"serverFP": "https://fp-ottlic-f3.imagenio.telefonica.net/TFAESP/fpls/contentlicenseservice/v1/licenses",
|
|
||||||
"serverPR": "https://pr-ottlic-f3.imagenio.telefonica.net/TFAESP/prls/contentlicenseservice/v1/licenses",
|
|
||||||
"serverWV": "https://wv-ottlic-f3.imagenio.telefonica.net/TFAESP/wvls/contentlicenseservice/v1/licenses",
|
|
||||||
"setUpStream": "https://alkasvaspub.imagenio.telefonica.net/asvas/ccs/{PID}/{deviceCode}/{PLAYREADYID}/Session",
|
"setUpStream": "https://alkasvaspub.imagenio.telefonica.net/asvas/ccs/{PID}/{deviceCode}/{PLAYREADYID}/Session",
|
||||||
"siguiente_episodio": "https://ottcache.dof6.com/movistarplus/{deviceType}/episodes/{contentId}/next?profile={PROFILE}&version=8&mdrm={mdrm}&tlsstream=true",
|
|
||||||
"suscripcion_CASUAL": "https://contratar.movistarplus.es/cliente-suscripcion/",
|
|
||||||
"suscripcion_DTHTITULAR": "https://sitioseguro.movistarplus.es/zonacliente/mi-suscripcion/",
|
|
||||||
"suscripcion_LITE": "https://contratar.movistarplus.es/cliente-suscripcion/",
|
|
||||||
"tearDownStream": "https://alkasvaspub.imagenio.telefonica.net/asvas/ccs/{PID}/{deviceCode}/{PLAYREADYID}/Session/{SessionID}",
|
"tearDownStream": "https://alkasvaspub.imagenio.telefonica.net/asvas/ccs/{PID}/{deviceCode}/{PLAYREADYID}/Session/{SessionID}",
|
||||||
"token": "https://auth.dof6.com/auth/oauth2/token?deviceClass=webplayer",
|
"token": "https://auth.dof6.com/auth/oauth2/token?deviceClass={deviceType}",
|
||||||
"token_hz": "https://autologinmovistar.imagenio.telefonica.net/asmgr/ccs/getHZTokenOnHome/WP_OTT/{MEDIAPLAYERID}",
|
"ultimasreproducciones": "https://perso.dof6.com/movistarplus/{deviceType}/users/{DIGITALPLUSUSERIDC}/viewings?profile={PROFILE}&container=trackedseries&mediaType=FOTOH&idsOnly={idsOnly}&accountNumber={ACCOUNTNUMBER}&version=8&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}"
|
||||||
"tracking_series": "https://perso.dof6.com/movistarplus/{deviceType}/user/{DIGITALPLUSUSERIDC}/tracking/series?accountNumber={ACCOUNTNUMBER}&version=8&mdrm={mdrm}&tlsstream=true",
|
|
||||||
"ultimasreproducciones": "https://perso.dof6.com/movistarplus/{deviceType}/users/{DIGITALPLUSUSERIDC}/viewings?profile={PROFILE}&container=trackedseries&mediaType=FOTOH&idsOnly={idsOnly}&accountNumber={ACCOUNTNUMBER}&version=8&start={start}&end={end}&mdrm={mdrm}&tlsstream=true&demarcation={demarcation}",
|
|
||||||
"valorar": "https://perso.dof6.com/vod/vod.svc/webplayer/contents/yomvi/{CONTENTID}/ratings/{RATING}?userId={USERID}&accountnumber={ACCOUNTNUMBER}",
|
|
||||||
"zonacliente_CASUAL_YOMVI": "https://contratar.movistarplus.es/cliente-suscripcion/",
|
|
||||||
"zonacliente_DTHTITULAR_YOMVI": "https://sitioseguro.movistarplus.es/zonacliente/tienda/index.html",
|
|
||||||
"zonacliente_LITE_YOMVI": "https://contratar.movistarplus.es/cliente-suscripcion/",
|
|
||||||
"zonacliente_OTT_YOMVI": "https://ver.movistarplus.es/ampliatususcripcion/",
|
|
||||||
"zonacliente_SVOD_YOMVI": "https://sitioseguro.movistarplus.es/zonacliente/tienda/index.html"
|
|
||||||
}
|
}
|
||||||
+52
-50
@@ -37,12 +37,9 @@ class Movistar(object):
|
|||||||
'demarcation': 0}
|
'demarcation': 0}
|
||||||
|
|
||||||
add_extra_info = True
|
add_extra_info = True
|
||||||
#dplayer = 'webplayer'
|
dplayer = 'webplayer'
|
||||||
#device_code = 'WP_OTT'
|
device_code = 'WP_OTT'
|
||||||
#manufacturer = 'Firefox'
|
manufacturer = 'Firefox'
|
||||||
dplayer = 'android.tv'
|
|
||||||
device_code = 'SMARTTV_OTT'
|
|
||||||
manufacturer = 'LG'
|
|
||||||
account_dir = 'account_1'
|
account_dir = 'account_1'
|
||||||
|
|
||||||
def __init__(self, config_directory, reuse_devices=False):
|
def __init__(self, config_directory, reuse_devices=False):
|
||||||
@@ -89,7 +86,6 @@ class Movistar(object):
|
|||||||
os.makedirs(config_directory + 'cache')
|
os.makedirs(config_directory + 'cache')
|
||||||
|
|
||||||
# Endpoints
|
# Endpoints
|
||||||
#self.endpoints = self.get_endpoints()
|
|
||||||
self.endpoints = endpoints
|
self.endpoints = endpoints
|
||||||
|
|
||||||
# Access token
|
# Access token
|
||||||
@@ -272,17 +268,18 @@ class Movistar(object):
|
|||||||
headers = self.net.headers.copy()
|
headers = self.net.headers.copy()
|
||||||
if self.account['device_id']:
|
if self.account['device_id']:
|
||||||
headers['x-movistarplus-deviceid'] = self.account['device_id']
|
headers['x-movistarplus-deviceid'] = self.account['device_id']
|
||||||
headers['x-movistarplus-ui'] = '2.36.30'
|
#headers['x-movistarplus-ui'] = '2.36.30'
|
||||||
headers['x-movistarplus-os'] = 'Linux88'
|
#headers['x-movistarplus-os'] = 'Linux88'
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'grant_type': 'password',
|
'grant_type': 'password',
|
||||||
'deviceClass': 'webplayer',
|
'deviceClass': self.dplayer,
|
||||||
'username': username,
|
'username': username,
|
||||||
'password': password,
|
'password': password,
|
||||||
}
|
}
|
||||||
|
|
||||||
url = self.endpoints['token']
|
url = self.endpoints['token'].format(deviceType=self.dplayer)
|
||||||
|
#LOG(url)
|
||||||
response = self.net.session.post(url, headers=headers, data=data)
|
response = self.net.session.post(url, headers=headers, data=data)
|
||||||
content = response.content.decode('utf-8')
|
content = response.content.decode('utf-8')
|
||||||
LOG(content)
|
LOG(content)
|
||||||
@@ -300,37 +297,16 @@ class Movistar(object):
|
|||||||
headers = self.net.headers.copy()
|
headers = self.net.headers.copy()
|
||||||
headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
||||||
#headers['x-movistarplus-deviceid'] = self.account['device_id']
|
#headers['x-movistarplus-deviceid'] = self.account['device_id']
|
||||||
headers['x-movistarplus-ui'] = '2.36.30'
|
#headers['x-movistarplus-ui'] = '2.36.30'
|
||||||
headers['x-movistarplus-os'] = 'Linux88'
|
#headers['x-movistarplus-os'] = 'Linux88'
|
||||||
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
||||||
url = self.endpoints['autenticacion_tk'] + '?_=' + str(int(time.time()*1000))
|
url = self.endpoints['autenticacion_tk'].format(deviceType=self.dplayer) + '?_=' + str(int(time.time()*1000))
|
||||||
|
#LOG(url)
|
||||||
#LOG('authenticate: headers: {}'.format(headers))
|
#LOG('authenticate: headers: {}'.format(headers))
|
||||||
data = self.net.load_data(url, headers)
|
data = self.net.load_data(url, headers)
|
||||||
#LOG('authenticate: data: {}'.format(data))
|
#LOG('authenticate: data: {}'.format(data))
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def load_service_directory(self):
|
|
||||||
url = 'https://homeservicedirectory.dof6.com/VoD/vod.svc/webplayer/environments/prod/ws-directory?format=json'
|
|
||||||
return self.net.load_data(url)
|
|
||||||
|
|
||||||
def get_endpoints(self):
|
|
||||||
endpoints = {}
|
|
||||||
content = self.cache.load('endpoints.json')
|
|
||||||
if content:
|
|
||||||
data = json.loads(content)
|
|
||||||
else:
|
|
||||||
data = self.load_service_directory()
|
|
||||||
self.cache.save_file('endpoints.json', json.dumps(data, ensure_ascii=False))
|
|
||||||
|
|
||||||
for services in data['services']['service']:
|
|
||||||
if isinstance(services['endpoint'], list):
|
|
||||||
for endpoint in services['endpoint']:
|
|
||||||
endpoints[endpoint['@name']] = endpoint['@address']
|
|
||||||
else:
|
|
||||||
endpoint = services['endpoint']
|
|
||||||
endpoints[endpoint['@name']] = endpoint['@address']
|
|
||||||
return endpoints
|
|
||||||
|
|
||||||
def change_device(self, id):
|
def change_device(self, id):
|
||||||
self.account['device_id'] = id
|
self.account['device_id'] = id
|
||||||
self.cache.save_file('device_id.conf', self.account['device_id'])
|
self.cache.save_file('device_id.conf', self.account['device_id'])
|
||||||
@@ -361,10 +337,10 @@ class Movistar(object):
|
|||||||
headers = self.net.headers.copy()
|
headers = self.net.headers.copy()
|
||||||
headers['Content-Type'] = 'application/json'
|
headers['Content-Type'] = 'application/json'
|
||||||
headers['x-movistarplus-deviceid'] = self.account['device_id']
|
headers['x-movistarplus-deviceid'] = self.account['device_id']
|
||||||
headers['x-movistarplus-ui'] = '2.36.30'
|
#headers['x-movistarplus-ui'] = '2.36.30'
|
||||||
headers['x-movistarplus-os'] = 'Linux88'
|
#headers['x-movistarplus-os'] = 'Linux88'
|
||||||
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
||||||
url = self.endpoints['activacion_dispositivo_cuenta_tk'].format(ACCOUNTNUMBER=self.account['id'], DEVICEID=self.account['device_id'])
|
url = self.endpoints['activacion_dispositivo_cuenta_tk'].format(deviceType=self.dplayer, ACCOUNTNUMBER=self.account['id'], DEVICEID=self.account['device_id'])
|
||||||
response = self.net.session.post(url, headers=headers)
|
response = self.net.session.post(url, headers=headers)
|
||||||
content = response.content.decode('utf-8')
|
content = response.content.decode('utf-8')
|
||||||
return content
|
return content
|
||||||
@@ -375,10 +351,12 @@ class Movistar(object):
|
|||||||
def new_device_id(self):
|
def new_device_id(self):
|
||||||
headers = self.net.headers.copy()
|
headers = self.net.headers.copy()
|
||||||
headers['Content-Type'] = 'application/json'
|
headers['Content-Type'] = 'application/json'
|
||||||
headers['x-movistarplus-ui'] = '2.36.30'
|
#headers['x-movistarplus-ui'] = '2.36.30'
|
||||||
headers['x-movistarplus-os'] = 'Linux88'
|
#headers['x-movistarplus-os'] = 'Linux88'
|
||||||
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
||||||
url = 'https://auth.dof6.com/movistarplus/webplayer/accounts/'+ self.account['id'] + '/devices/?qspVersion=ssp'
|
url = 'https://auth.dof6.com/movistarplus/{deviceType}/accounts/{ACCOUNTNUMBER}/devices/?qspVersion=ssp'
|
||||||
|
url = url.format(deviceType=self.dplayer, ACCOUNTNUMBER=self.account['id'])
|
||||||
|
#LOG(url)
|
||||||
response = self.net.session.post(url, headers=headers)
|
response = self.net.session.post(url, headers=headers)
|
||||||
content = response.content.decode('utf-8')
|
content = response.content.decode('utf-8')
|
||||||
return content.strip('"')
|
return content.strip('"')
|
||||||
@@ -435,7 +413,7 @@ class Movistar(object):
|
|||||||
def get_cdntoken(self):
|
def get_cdntoken(self):
|
||||||
headers = self.net.headers.copy()
|
headers = self.net.headers.copy()
|
||||||
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
||||||
url = self.endpoints['renovacion_cdntoken2'].format(ACCOUNTNUMBER=self.account['id'])
|
url = self.endpoints['renovacion_cdntoken2'].format(deviceType=self.dplayer, ACCOUNTNUMBER=self.account['id'])
|
||||||
data = self.net.post_data(url, None, headers)
|
data = self.net.post_data(url, None, headers)
|
||||||
if isinstance(data, dict):
|
if isinstance(data, dict):
|
||||||
return data.get('access_token')
|
return data.get('access_token')
|
||||||
@@ -461,7 +439,7 @@ class Movistar(object):
|
|||||||
headers = self.net.headers.copy()
|
headers = self.net.headers.copy()
|
||||||
headers['Content-Type'] = 'application/json'
|
headers['Content-Type'] = 'application/json'
|
||||||
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
headers['Authorization'] = 'Bearer ' + self.account['access_token']
|
||||||
url = self.endpoints['renovacion_ssptoken'].format(deviceType='webplayer', ACCOUNTNUMBER=self.account['id'], DEVICEID=self.account['device_id'])
|
url = self.endpoints['renovacion_ssptoken'].format(deviceType=self.dplayer, ACCOUNTNUMBER=self.account['id'], DEVICEID=self.account['device_id'])
|
||||||
data = self.net.post_data(url, '', headers)
|
data = self.net.post_data(url, '', headers)
|
||||||
return data.get('access_token')
|
return data.get('access_token')
|
||||||
|
|
||||||
@@ -494,7 +472,7 @@ class Movistar(object):
|
|||||||
|
|
||||||
def load_epg_data(self, date_str, duration=2, channels=''):
|
def load_epg_data(self, date_str, duration=2, channels=''):
|
||||||
demarcation = self.account['demarcation']
|
demarcation = self.account['demarcation']
|
||||||
url = self.endpoints['rejilla'].format(deviceType='webplayer', profile=self.account['platform'], UTCDATETIME=date_str, DURATION=duration, CHANNELS=channels, NETWORK='movistarplus', mdrm='true', demarcation=demarcation)
|
url = self.endpoints['rejilla'].format(deviceType=self.dplayer, profile=self.account['platform'], UTCDATETIME=date_str, DURATION=duration, CHANNELS=channels, NETWORK='movistarplus', mdrm='true', demarcation=demarcation)
|
||||||
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
||||||
#LOG(url)
|
#LOG(url)
|
||||||
data = self.net.load_data(url)
|
data = self.net.load_data(url)
|
||||||
@@ -643,7 +621,7 @@ class Movistar(object):
|
|||||||
if content:
|
if content:
|
||||||
data = json.loads(content)
|
data = json.loads(content)
|
||||||
else:
|
else:
|
||||||
url = self.endpoints['canales'].format(deviceType='webplayer', profile=profile, mdrm='true', demarcation=demarcation)
|
url = self.endpoints['canales'].format(deviceType=self.dplayer, profile=profile, mdrm='true', demarcation=demarcation)
|
||||||
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
||||||
#LOG(url)
|
#LOG(url)
|
||||||
data = self.net.load_data(url)
|
data = self.net.load_data(url)
|
||||||
@@ -750,7 +728,7 @@ class Movistar(object):
|
|||||||
|
|
||||||
def get_recordings_url(self):
|
def get_recordings_url(self):
|
||||||
url = self.endpoints['grabaciones'].format(
|
url = self.endpoints['grabaciones'].format(
|
||||||
deviceType='webplayer', DIGITALPLUSUSERIDC=self.account['encoded_user'], PROFILE=self.account['platform'],
|
deviceType=self.dplayer, DIGITALPLUSUSERIDC=self.account['encoded_user'], PROFILE=self.account['platform'],
|
||||||
idsOnly='false', start=1, end=30, mdrm='true', demarcation=self.account['demarcation'])
|
idsOnly='false', start=1, end=30, mdrm='true', demarcation=self.account['demarcation'])
|
||||||
#url += '&state=Completed&_='+ str(int(time.time()*1000))
|
#url += '&state=Completed&_='+ str(int(time.time()*1000))
|
||||||
url += '&_='+ str(int(time.time()*1000))
|
url += '&_='+ str(int(time.time()*1000))
|
||||||
@@ -766,12 +744,12 @@ class Movistar(object):
|
|||||||
|
|
||||||
def get_search_url(self, search_term):
|
def get_search_url(self, search_term):
|
||||||
url = self.endpoints['buscar_best'].format(
|
url = self.endpoints['buscar_best'].format(
|
||||||
|
deviceType=self.dplayer,
|
||||||
ACCOUNTNUMBER=self.account['id'],
|
ACCOUNTNUMBER=self.account['id'],
|
||||||
profile=self.account['platform'],
|
profile=self.account['platform'],
|
||||||
texto=search_term,
|
texto=search_term,
|
||||||
distilledTvRights=','.join(self.entitlements['distilledTvRights']),
|
distilledTvRights=','.join(self.entitlements['distilledTvRights']),
|
||||||
mdrm='true', demarcation=self.account['demarcation'])
|
mdrm='true', demarcation=self.account['demarcation'])
|
||||||
url = url.replace('webplayer', self.dplayer)
|
|
||||||
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
||||||
return url
|
return url
|
||||||
|
|
||||||
@@ -795,7 +773,7 @@ class Movistar(object):
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
def get_ficha_url(self, id, mode='GLOBAL', catalog=''):
|
def get_ficha_url(self, id, mode='GLOBAL', catalog=''):
|
||||||
url = self.endpoints['ficha'].format(deviceType='webplayer', id=id, profile=self.account['platform'], mediatype='FOTOV', version='7.1', mode=mode, catalog=catalog, channels='', state='', mdrm='true', demarcation=self.account['demarcation'], legacyBoxOffice='')
|
url = self.endpoints['ficha'].format(deviceType=self.dplayer, id=id, profile=self.account['platform'], mediatype='FOTOV', version='7.1', mode=mode, catalog=catalog, channels='', state='', mdrm='true', demarcation=self.account['demarcation'], legacyBoxOffice='')
|
||||||
url = url.replace('state=&', '')
|
url = url.replace('state=&', '')
|
||||||
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
if self.quality == 'UHD': url += '&filterQuality=UHD'
|
||||||
#print(url)
|
#print(url)
|
||||||
@@ -844,6 +822,27 @@ class Movistar(object):
|
|||||||
if 'ShowId' in video: t['show_id'] = video['ShowId']
|
if 'ShowId' in video: t['show_id'] = video['ShowId']
|
||||||
if self.add_extra_info:
|
if self.add_extra_info:
|
||||||
self.add_video_extra_info(t)
|
self.add_video_extra_info(t)
|
||||||
|
elif 'Pases' in data and len(data['Pases']) > 0:
|
||||||
|
video = data['Pases'][0]
|
||||||
|
t['subscribed'] = self.is_subscribed_vod(video.get('tvProducts', []))
|
||||||
|
if 'ShowId' in video: t['show_id'] = video['ShowId']
|
||||||
|
stype = None
|
||||||
|
if 'catalog=catchup' in ed['Ficha']:
|
||||||
|
stype = 'catch-up'
|
||||||
|
t['stream_type'] = 'u7d'
|
||||||
|
t['session_request'] = '{"contentID":' + str(t['id']) + ', "streamType":"CUTV"}'
|
||||||
|
elif 'catalog=npvr' in ed['Ficha']:
|
||||||
|
stype = 'npvr'
|
||||||
|
t['stream_type'] = 'rec'
|
||||||
|
t['session_request'] = '{"contentID":' + str(t['id']) + ', "streamType":"NPVR"}'
|
||||||
|
if 'UrlVideo' in video:
|
||||||
|
t['url'] = video['UrlVideo']
|
||||||
|
else:
|
||||||
|
if stype:
|
||||||
|
for l in video['links']:
|
||||||
|
if l['rel'] == stype:
|
||||||
|
t['url'] = l['href']
|
||||||
|
break
|
||||||
if 'Recording' in data:
|
if 'Recording' in data:
|
||||||
t['stream_type'] = 'rec'
|
t['stream_type'] = 'rec'
|
||||||
t['rec'] = {'id': data['Recording']['id'],
|
t['rec'] = {'id': data['Recording']['id'],
|
||||||
@@ -1156,7 +1155,7 @@ class Movistar(object):
|
|||||||
#sort = 'FE'
|
#sort = 'FE'
|
||||||
sort = 'MA'
|
sort = 'MA'
|
||||||
#sort = 'AZ'
|
#sort = 'AZ'
|
||||||
url = self.endpoints['consultar'].format(deviceType='webplayer', profile=self.account['platform'], sort=sort, start=1, end=50, mdrm='true', demarcation=self.account['demarcation'])
|
url = self.endpoints['consultar'].format(deviceType=self.dplayer, profile=self.account['platform'], sort=sort, start=1, end=50, mdrm='true', demarcation=self.account['demarcation'])
|
||||||
filter = '&filter=AC-OM,AC-MA,MA-GBLCICLO59,TD-CUP,RG-SINCAT,AC-PREPUB,' + self.entitlements['suscripcion']
|
filter = '&filter=AC-OM,AC-MA,MA-GBLCICLO59,TD-CUP,RG-SINCAT,AC-PREPUB,' + self.entitlements['suscripcion']
|
||||||
#filter = '&filter=AC-OM,AC-MA,MA-GBLCICLO59,TD-CUP,RG-SINCAT,AC-PREPUB'
|
#filter = '&filter=AC-OM,AC-MA,MA-GBLCICLO59,TD-CUP,RG-SINCAT,AC-PREPUB'
|
||||||
url += '&mode=VOD' + filter
|
url += '&mode=VOD' + filter
|
||||||
@@ -1524,5 +1523,8 @@ class Movistar(object):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def save_file(filename, content):
|
def save_file(filename, content):
|
||||||
|
if sys.version_info[0] < 3:
|
||||||
|
if not isinstance(content, unicode):
|
||||||
|
content = unicode(content, 'utf-8')
|
||||||
with io.open(filename, 'w', encoding='utf-8') as handle:
|
with io.open(filename, 'w', encoding='utf-8') as handle:
|
||||||
handle.write(content)
|
handle.write(content)
|
||||||
Reference in new issue
Block a user