Obtener la Lista de Canales y Programación de Movistar TV

#1
Para obtener la lista de canales de manera rapida y sencilla, pasaros por el post http://www.adslzone.net/postt350708.html y buscar el script de spacezed.

Pero si os gusta conocer las tripas de las cosas, continua leyendo...

He creado una aplicación, basada enormemente en las tools de infocast de juju666, para descargar los ficheros que se transmiten mediante DVBSTP en la red de MovistarTV. Básicamente es lo mismo que hace el script de spacezed, pero más genérica y solo descarga los ficheros, no los procesa para obtener la información.
La podéis descargar de aquí:
https://www.dropbox.com/s/trlh6mrhoqiqr ... icedsc.exe
Y necesita cygwin1.dll para ejecutarse correctamente.
Esta en "beta" y me quedan cosillas por pulir

DVBSTP es el protocolo de transferencia para el servicio SD&S (Service Discovery & Selection), mediante el cual se manda a los decos, entre otras cosas, la información de canales y programación. Tenéis el estandard si os gusta mucho leer aqui: http://www.etsi.org/deliver/etsi_ts/102 ... 10401p.pdf

Para no liarnos muchos, vamos a hacer unas clases practicas e iré explicando según aparezcan las cosas. Primero necesitamos conocer que proveedores de servicos (SP) nos ofrece Movistar:
Código:
servicedsc.exe 239.0.2.129 3937 2
El uso es sencillo y a juju666 seguro que le suena de algo :). IP multicast donde esta el servicio, puerto 3937 que corresponde con DVBSTP y 2 para indicarle que descargue los ficheros. Si todo va bien, nos descargar un fichero que con el nombre 01.0000.188 (o parecido):
Código:
servicedsc.exe 239.0.2.129 3937 2
[+] Abriendo socket 239.0.2.129:3937
1.0(188): [2/2] (100.0%) 1571 Bytes
[+] Section 01.0000.188 completed!
[!] CRC32 Mismatch. Calc:Packet 1d67ffa5:5768a716)
Ignorad los errores de CRC, que es parte de la beta :)
Nombre del fichero se corresponde con el tipo de datos que lleva. Exactamente se corresponde con [PayloadID].[SegmentID].[Version]. El dato más interesante es el PayloadID: 01 significa que es información de descubrimiento de SP. El fichero es un XML con la lista de SP que ofrecen:
Código:
<ServiceProvider
DomainName="DEM_38.imagenio.es" Version="127">
  <Offering> 
    <Push Address="239.0.2.172" Port="3937"></Push> 
  </Offering>
</ServiceProvider>
En <Push> tenemos la dirección del SP para DEM_38 (demarcación geográfica, en el script de spacezed tenéis la traducción a regiones). Preguntemosle a ver que se cuenta:
Código:
/servicedsc.exe 239.0.2.172 3937 2
[+] Abriendo socket 239.0.2.172:3937
6.0(146): [43/43] (100.0%) 59684 Bytes
[+] Section 06.0000.146 completed!
[!] CRC32 OK!
2.0(161): [77/77] (100.0%) 106876 Bytes
[+] Section 02.0000.161 completed!
[!] CRC32 OK!
5.0(97): [73/73] (100.0%) 100229 Bytes
[+] Section 05.0000.97 completed!
[!] CRC32 Mismatch. Calc:Packet 91cc984b:ffffffffc0b162d3)

All fiales complete. Closing
Tenemos 3 ficheros mas con PayloadID 02 (SD&S Broadcast Discovery Information), 05 (SD&S Package Discovery Information) y 06 (SD&S BCG Discovery Information).
En el 02 tenemos la lista de canales de la siguiente manera:
Código:
<SingleService>
  <ServiceLocation>
    <IPMulticastAddress Port="8208" Address="239.0.0.55" /> 
  </ServiceLocation>
  <TextualIdentifier ServiceName="539" logoURI="MAY_1/imSer/539.jpg" />
  <SI ServiceType="1" ServiceInfo="1"> 
    <Name Language="ENG">CLM TV</Name> 
    <ShortName Language="ENG">CMT</ShortName> 
    <Description Language="ENG">CMT</Description>
    <Genre href="urn:miviewtv:cs:GenreCS:2007:0.1">   
      <urn:Name>CULTURA/ESPECTÁCULOS</urn:Name>
    </Genre> 
    <ParentalGuidance> 
        <mpeg7:ParentalRating href="urn:dvb:metadata:cs:ParentalGuidanceCS:2007:1">   
          <mpeg7:Name>No rating available</mpeg7:Name>
        </mpeg7:ParentalRating>
    </ParentalGuidance>
  </SI>
</SingleService>
Como veis, tenemos la dirección multicast y el puerto para poner el el VLC y ver el canal, el nombre del canal, etc. Incluso una clasificación parental. También nos interesa el ServiceName de la etiqueta <TextualIdentifier> que nos permitirá identificar el canal en otros XML.
Como por ejemplo en el 05, que creo que son los paquetes que se pueden contratar, pero no estoy seguro:
Código:
<PackageName Language="ENG">UTX00</PackageName>
<Service> 
  <TextualID ServiceName="597" />
  <LogicalChannelNumber>0</LogicalChannelNumber> 
</Service> 
<Service> 
  <TextualID ServiceName="1" /> 
  <LogicalChannelNumber>1</LogicalChannelNumber>
 </Service>
...
Para los que os gusta tenerlo todo ordenado, el LogicalChannelNumber es el número del canal en el deco. Así el ServiceName="1" (La 1) esta en el canal 1 del deco.
Y el fichero 06 nos dice donde se encuentra el EPG (Electronic Program Guide). Si! la guía de Movistar TV.
Código:
<BCG Id="EPG">
  <Name Language="eng">MiViewTV ProgramGuide</Name>
  <TransportMode>
    <DVBSTP Source="EPG_0.imagenio.es" Port="3937" Address="239.0.2.130">
       <PayloadId Id="0xF1">
           <Segment ID="0x430a" Version="0" />
           <Segment ID="0x4001" Version="4" />
           <Segment ID="0x4388" Version="3" />
Vemos que en <DVBSTP> tenemos otra dirección DVBSTP que podemos consultar. A lo largo de este fichero, se encontraran varias etiquetas <DVBSTP> más para consultar la guía. Esto lo hacen para mejorar el rendimiento, ya que si estuviera en una sola dirección tardaría mucho en descargarla.
Si usamos el programita con esta dirección, obtendremos ficheros con los nombres:
  • f1.430a.0
  • f1.4001.4
  • f1.4388.3
Que contienen:
Código:
<Schedule serviceIDRef="849.imagenio.es" Version="0">
  <ScheduleEvent>
    <Program crid="crid://imagenio.es/0/37835240/37835240" /> 
	<InstanceDescription> 
	  <Title>Love at first byte: the secret science of dating</Title> 
	  <Genre href="urn:miviewtv:cs:GenreCS:2007:32.42"> 
	    <Name>REPORTAJES</Name> 
	  </Genre>
	  <ParentalGuidance> 
	    <mpeg7:ParentalRating href="urn:dvb:metadata:cs:ParentalGuidanceCS:2007:2"> 
	       <mpeg7:Name>Suitable for all audiences</mpeg7:Name> 
	    </mpeg7:ParentalRating> 
      </ParentalGuidance>
    </InstanceDescription> 
	<PublishedStartTime>2014-02-16T00:00:00.000Z</PublishedStartTime>
    <PublishedDuration>PT1H</PublishedDuration>
    <ImmediateViewing value="false" /> 
	<UserActionList> 
	  <mpeg7:ActionType> 
	     <mpeg7:Name>FastForward</mpeg7:Name>
	  </mpeg7:ActionType> 
	</UserActionList> 
	<EventStartTime>2014-02-16T00:00:00.000Z</EventStartTime>
	<EventDuration>PT1H</EventDuration> 
  </ScheduleEvent>
Que seguro que sabéis como interpretarlo.

Espero que lo podáis aprovechar!
 
#2
Muy buena informacion. Alguien que controle xml y algun lenguaje de programacion se podria crear una guia de imagenio para PC extrapolando esos datos...

Y currandoselo mucho, se podria hacer que cuando hicieras click en algun programa de la EPG directamente te abriera el VLC con el streaming de ese canal. Y "rizando mas el rizo" si el programa que pulsas aun no ha empezado, que mande un script al VLC a la hora que empiece con la opcion grabar activada.

Ahora las mentes inquietas ya tienen cosas para entretenerse jajajaja
 
#3
Por cierto, yo tengo una cosa pendiente de hacer y lo mimso alguno sabeis como ayudarme a empezar.

Tengo un deco de imagenio con grabador y di de baja la opcion PVR, ahora el deco se comporta como un ADB normal sin HDD

Logicamente esto es por el xml que le envian con la config del deco desde movistar y mi idea es descargar el xml del deco con grabador y mandarsela yo al deco en vez de dejar que el se descargue la que le proporciona movistar

Alguien sabe por donde puedo empezar a documentarme??

Gracias
 
#4
Re:

pinoprod dijo:
Muy buena informacion. Alguien que controle xml y algun lenguaje de programacion se podria crear una guia de imagenio para PC extrapolando esos datos...

Y currandoselo mucho, se podria hacer que cuando hicieras click en algun programa de la EPG directamente te abriera el VLC con el streaming de ese canal. Y "rizando mas el rizo" si el programa que pulsas aun no ha empezado, que mande un script al VLC a la hora que empiece con la opcion grabar activada.

Ahora las mentes inquietas ya tienen cosas para entretenerse jajajaja
La idea es con esto empezar a trabajar en un addon PVR para XBMC. Quien sabe, lo mismo en un futuro podremos quitar los decos de Movistar y poner nuestros propios cacharros.
 
#6
Re: Obtener la Lista de Canales y Programación de Movistar T

Estoy interesado en montar un parser para la epg de imagenio y convertirlo a xmltv, creo que un addon no es necesario teniendo en cuenta que imagenio funciona perfectamente con tvheadend.
Pensaba hacerlo en python, parsear los xml y generar el xmltv no deberia ser problema, pero no tengo claro como hacer las petciones multicast, puedes poner el codigo fuente de tu programa para que pueda adaptarlo intentare generarlo.

Muchas gracias
 
#7
Re: Obtener la Lista de Canales y Programación de Movistar T

xmltv dijo:
Estoy interesado en montar un parser para la epg de imagenio y convertirlo a xmltv, creo que un addon no es necesario teniendo en cuenta que imagenio funciona perfectamente con tvheadend.
Pensaba hacerlo en python, parsear los xml y generar el xmltv no deberia ser problema, pero no tengo claro como hacer las petciones multicast, puedes poner el codigo fuente de tu programa para que pueda adaptarlo intentare generarlo.

Muchas gracias
me uno a la peticion ;-)
 
#9
Re: Obtener la Lista de Canales y Programación de Movistar T

Hola

Yo estoy trabajando en esto... Si alguien quiere colaborar adelante.
https://github.com/radioactivetoy/movistartv2xmltv

De momento:
Obtiene la ip de provicincia (basado en el codigo del buscador de canales)
Obtiene el xml con la lista de canales y lo parsea
Obtiene la lista de servicios de la EPG y los parsea
Obtiene un fichero xml aislado de la EPG



TODO
Mi codigo en python no es bueno,
No he encontrado en la EPG donde esta la descripción de los programas, solo el titulo, canal y duracion
Obtener de las cabeceras de multicast los datos transmitidos (los 12 primeros caracteres), supongo que servira para identificar despues los ficheros.
Convertir todo a xmltv
Ver cual es el dominio de donde se extraen los logos para bajarlos
 
#10
Re: Obtener la Lista de Canales y Programación de Movistar T

Buenas,

Hay un API por aqui que investigar, a ver si saco un tiempo y le echo un vistazo porque devuelve JSON y es bastante interesante para parsear.

ejemplo:

curl "https://go.tv.movistar.es/LiveGuide/GetLiveChannelsReducedLiveSchedules?offset=0&limit=100&liveChannelIds=231%2C226%2C230%2C224%2C229%2C227%2C663&startDate=1405868800&endDate=1405885399&imageWidth=95&imageHeight=60&adultFilter=1"

para verlo bonito:

curl "https://go.tv.movistar.es/LiveGuide/GetLiveChannelsReducedLiveSchedules?offset=0&limit=100&liveChannelIds=231&startDate=1405868800&endDate=1405885399&imageWidth=95&imageHeight=60&adultFilter=1" | python -m json.tool
 
#11
Re: Obtener la Lista de Canales y Programación de Movistar T

He escrito algo de código para descargar todos los xml de la guía :p . Ahora hay que procesarlos para pasarlos a xmltv :cautious: .

Todo esta comentado en el código, pero si alguien quiere colaborar contesto gustosamente cualquier duda .

https://github.com/ese/movistartv2xmltv
 
#12
Re: Obtener la Lista de Canales y Programación de Movistar T

eSeeSe dijo:
He escrito algo de código para descargar todos los xml de la guía :p . Ahora hay que procesarlos para pasarlos a xmltv :cautious: .

Todo esta comentado en el código, pero si alguien quiere colaborar contesto gustosamente cualquier duda .

https://github.com/ese/movistartv2xmltv
Jaja... veo que es un fork del mio, pero poco codigo mio queda :-D. Tu codigo python es infinitamente mejor. Tengo unas semanas muy liadas, pero cuando este mas descargado de curro le pego un vistazo a ver si te ayudo a pasarlo a xmltv.

Saludos
 
#13
Re: Obtener la Lista de Canales y Programación de Movistar T

radioactivetoy dijo:
eSeeSe dijo:
He escrito algo de código para descargar todos los xml de la guía :p . Ahora hay que procesarlos para pasarlos a xmltv :cautious: .

Todo esta comentado en el código, pero si alguien quiere colaborar contesto gustosamente cualquier duda .

https://github.com/ese/movistartv2xmltv
Jaja... veo que es un fork del mio, pero poco codigo mio queda :-D. Tu codigo python es infinitamente mejor. Tengo unas semanas muy liadas, pero cuando este mas descargado de curro le pego un vistazo a ver si te ayudo a pasarlo a xmltv.

Saludos
Perfecto :) Yo a la que tenga algún rato libre espero poder darle algo también.

Por cierto en el código esta limitado a 200 ficheros pero en mis pruebas he visto que hay 253 ficheros por IP y por lo que he visto cada IP tiene el EPG de un día, la 130 el de hoy, la 131 hoy+1 ...

Y una cuestión que vendría de lujo ¿Alguien sabe de donde pilla los iconos de los canales el deco?
 
#14
Re: Obtener la Lista de Canales y Programación de Movistar T

Hola,

Yo también estoy interesado en tener este software. Y también soy programador, así que os echaré una mano... en los ratos que me dejen.

Para generar el xmltv se puede usar esta libreria:
https://pypi.python.org/pypi/python-xmltv/
Creo que facilitaría bastante el trabajo.

De momento lo único que hice fue reordenar el código para que no se enfadara mi IDE. Había pensado en refactorizar un poco el código y parsear los XMLs y meter los datos en una base de datos (sqlite o algo así), para desde aquí generar los xmltv.

Un saludo.

eSeeSe dijo:
radioactivetoy dijo:
eSeeSe dijo:
He escrito algo de código para descargar todos los xml de la guía :p . Ahora hay que procesarlos para pasarlos a xmltv :cautious: .

Todo esta comentado en el código, pero si alguien quiere colaborar contesto gustosamente cualquier duda .

https://github.com/ese/movistartv2xmltv
Jaja... veo que es un fork del mio, pero poco codigo mio queda :-D. Tu codigo python es infinitamente mejor. Tengo unas semanas muy liadas, pero cuando este mas descargado de curro le pego un vistazo a ver si te ayudo a pasarlo a xmltv.

Saludos
Perfecto :) Yo a la que tenga algún rato libre espero poder darle algo también.

Por cierto en el código esta limitado a 200 ficheros pero en mis pruebas he visto que hay 253 ficheros por IP y por lo que he visto cada IP tiene el EPG de un día, la 130 el de hoy, la 131 hoy+1 ...

Y una cuestión que vendría de lujo ¿Alguien sabe de donde pilla los iconos de los canales el deco?
 
#15
Re: Obtener la Lista de Canales y Programación de Movistar T

Hola! Qué suerte haber dado con este post. Yo estaba haciendo un script precisamente en python y me estaba quedando un poco chapucera la captura multicast, pero con vuestras aportaciones he podido continuar parseando el xml y creo que voy a poder hacerlo o al menos avanzarlo bastante.

Las descripciones se obtienen con peticiones get con el crid del programa.
'http://www-60.svc.imagenio.telefonica.net:2001/appserver/mvtv.do?action=getEpgInfo&extInfoID=' + CRID + '&tvWholesaler=1'

Los iconos se sacan con ursl del tipo:
http://172.26.22.23:2001/appclient/inco ... mSer/2.jpg

Pero no os recomiendo que las useis, porque la resolución es bajísima y se ve muy mal. Merece la pena que perdáis 20 minutos en buscar los logos de internet en png con transparencia y mejor calidad.

De todas formas recomiendo también usar la web:
www.vuplus-community.net/rytec/rytecxmltvdplus.gz

Prácticamente son los mismos canales que da imagenio y las descripciones son muy completas. Por lo que quiero extraerlo de Imagenio es por sacar la información del episodio y temporada, obtener el epg de 7 días y a lo mejor jugar con las imágenes de los programas para incrustrarlas en los mkv.

Saludos y muchas gracias!!
 
#17
Re: Obtener la Lista de Canales y Programación de Movistar T

Buenas,

Ya he avanzado bastante el script, pero estoy depurando problemas con el encoding. Usando la librería xmltv como recomendabais, genero el xml que lee tvheadend, con los canales y los programas, incluyendo episodios y lo que he visto interesante.

A ver si lo pulo y lo comparto porque seguro que lo del encoding es una chorrada y lo arregláis rápido.

Si quieres algo rápido y que te coja gran parte de los canales, crea el archivo y dale permisos de ejecución:
/usr/bin/tv_grab_es_rytec
Código:
#!/bin/bash
dflag=
vflag=
cflag=


wget -T 20 www.vuplus-community.net/rytec/rytecxmltvdplus.gz -O ~/tv_grab_file.xmltv.gz
gunzip -f ~/tv_grab_file.xmltv.gz

if (( $# < 1 ))
then
  cat ~/tv_grab_file.xmltv
  exit 0
fi

for arg
do
    delim=""
    case "$arg" in
    #translate --gnu-long-options to -g (short options)
       --description) args="${args}-d ";;
       --version) args="${args}-v ";;
       --capabilities) args="${args}-c ";;
       #pass through anything else
       *) [[ "${arg:0:1}" == "-" ]] || delim="\""
           args="${args}${delim}${arg}${delim} ";;
    esac
done

#Reset the positional parameters to the short options
eval set -- $args

while getopts "dvc" option 
do
    case $option in
        d)  dflag=1;;
        v)  vflag=1;;
        c)  cflag=1;;
        \?) printf "unknown option: -%s\n" $OPTARG
            printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
            exit 2
            ;;
    esac >&2
done

if [ "$dflag" ]
then
   printf "Spain (vuplus-community.net) \n"
fi
if [ "$vflag" ]
then
   printf "0.1\n"
fi
if [ "$cflag" ]
then
   printf "baseline\n"
fi

exit 0
 
#18
Re: Obtener la Lista de Canales y Programación de Movistar T

azlon dijo:
Buenas,

Ya he avanzado bastante el script, pero estoy depurando problemas con el encoding. Usando la librería xmltv como recomendabais, genero el xml que lee tvheadend, con los canales y los programas, incluyendo episodios y lo que he visto interesante.

A ver si lo pulo y lo comparto porque seguro que lo del encoding es una chorrada y lo arregláis rápido.

Si quieres algo rápido y que te coja gran parte de los canales, crea el archivo y dale permisos de ejecución:
/usr/bin/tv_grab_es_rytec
Código:
#!/bin/bash
dflag=
vflag=
cflag=


wget -T 20 www.vuplus-community.net/rytec/rytecxmltvdplus.gz -O ~/tv_grab_file.xmltv.gz
gunzip -f ~/tv_grab_file.xmltv.gz

if (( $# < 1 ))
then
  cat ~/tv_grab_file.xmltv
  exit 0
fi

for arg
do
    delim=""
    case "$arg" in
    #translate --gnu-long-options to -g (short options)
       --description) args="${args}-d ";;
       --version) args="${args}-v ";;
       --capabilities) args="${args}-c ";;
       #pass through anything else
       *) [[ "${arg:0:1}" == "-" ]] || delim="\""
           args="${args}${delim}${arg}${delim} ";;
    esac
done

#Reset the positional parameters to the short options
eval set -- $args

while getopts "dvc" option 
do
    case $option in
        d)  dflag=1;;
        v)  vflag=1;;
        c)  cflag=1;;
        \?) printf "unknown option: -%s\n" $OPTARG
            printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
            exit 2
            ;;
    esac >&2
done

if [ "$dflag" ]
then
   printf "Spain (vuplus-community.net) \n"
fi
if [ "$vflag" ]
then
   printf "0.1\n"
fi
if [ "$cflag" ]
then
   printf "baseline\n"
fi

exit 0
y como implemeto esto en el tvheadend?
he conseguido hacer algo con este tuto http://ricardforner.blogspot.com.es/201 ... ry-pi.html pero el epg es muy malo
 
#19
Re: Obtener la Lista de Canales y Programación de Movistar T

Teneniendo el archivo que te digo con permisos de ejeción, reinicias tvheadend y básicamente es seguir el manual sin historias de java. Lo pones como grabber, asocias los canales y listo.


Sent from my iPhone using Tapatalk
 
#20
Re: Obtener la Lista de Canales y Programación de Movistar T

azlon dijo:
Teneniendo el archivo que te digo con permisos de ejeción, reinicias tvheadend y básicamente es seguir el manual sin historias de java. Lo pones como grabber, asocias los canales y listo.


Sent from my iPhone using Tapatalk
Ya lo he puesto como grabber, he reiniciado miles de veces, pero cuando voy a asociar los canales me siguen saliendo los que tenia antes, y los que tenia puestos se los he quitado, pero siguen saliendo, es como si se quedasen en cache. Asi que no puedo probr si funciona

Edito: Esto es lo que me pasa, he puesto el modulo en Disabled:



He reiniciado y todo, pero me sigue saliendo la opcion de asociar los canales:



Hay alguna manera de que se actualice rapidamente?
 
Arriba