¿Qué hay en la televisión?

11

Desafío

Escriba un programa que, utilizando los datos XML del sitio aquí , muestre el nombre del programa que se muestra actualmente en BBC 1.

Información

Todos los horarios se dan a la hora de Londres (GMT + 1 en el momento de la publicación y GMT + 0 después del 30 de octubre). Por lo tanto, debe convertir su hora local a la hora de Londres.

Cada programa tiene una hora de inicio y finalización. Si la hora actual es posterior a la hora de inicio y antes de la hora de finalización de un programa, ese programa se muestra actualmente. Su programa puede manejar superposiciones de la forma que desee.

Su salida debe ser el título del programa, así:

BBC News

Sin embargo, si el programa tiene un subtítulo (mostrado por la presencia de la etiqueta de subtítulo), la salida debería ser así:

Steptoe and Son: The Piano

Donde Steptoe and Son es el título y The Piano es el subtítulo. Un programa de ejemplo con un subtítulo es el siguiente:

<programme>
    <subtitle>Newcastle</subtitle>
    <title>Flog It!</title>
    <end>1710</end>
    <start>1610</start>
    <desc>
      Antiques series. Paul Martin presents from the Discovery Museum in Newcastle. The items uncovered include a book of autographs with a local connection. Also in HD. [S]
    </desc>
</programme>

Los acortadores de URL no están permitidos, pero las bibliotecas de análisis XML están permitidas.

Victorioso

El código más corto en bytes gana.

Decaimiento Beta
fuente
¿Puede dar un caso de prueba con una etiqueta de subtítulos, porque (actualmente) no hay ninguno en el archivo xml vinculado.
KarlKastor
@KarlKastor Ahí tienes
Decaimiento Beta
¿Tenemos que convertir la hora local a la hora de Londres?
KarlKastor
2
¿Qué hace exactamente este "golf rápido"?
Martin Ender
1
@MartinEnder Supongo que porque lo escribí rápidamente: D
Beta Decay

Respuestas:

2

Bash + curl + XMLStarlet, 166 caracteres

d=`TZ=Europe/London date +%H%M`
curl -s bleb.org/tv/data/listings/0/bbc1.xml|xmlstarlet sel -t -m "//programme[start<=$d and end>$d]" -v title -m subtitle -o :\  -v .

Ejecución de muestra:

bash-4.3$ date 
Mon Aug 22 14:17:07 EEST 2016

bash-4.3$ bash bbc.sh 
Bargain Hunt: Carmarthen
hombre trabajando
fuente
No soy bueno en bash scripting, pero ¿es posible producir la dirección del sitio web mediante la descompresión de la versión comprimida de la dirección o algo similar?
Realmente no. Es demasiado corto para la compresión. Sin comprimir tiene 36 bytes, comprimido con gzip tiene 56 bytes. Otras herramientas que probé producen un resultado aún mayor.
manatwork
5

Python, 440 428 426 398 395 Bytes

-31 Bytes gracias a @Loovjo

Lanza un error cuando encuentra la fecha.

import re,pytz,urllib
from datetime import*
x=urllib.urlopen("http://www.bleb.org/tv/data/listings/0/bbc1.xml").read().split("</p")[:-1]
for m,n in enumerate(re.search("\d*</s",i).group()for i in x):
 if n>datetime.strftime(datetime.now(pytz.utc).astimezone(pytz.timezone('Europe/London')),"%H%M"):print re.search(">.*?</t",x[m-1]).group()[1:-3],": "+re.search("e>.*?</s",x[m-1]).group()[2:-3],_

No me hagas daño por analizar xml con regex.

versión con un analizador xml, 398 bytes

import re,pytz,urllib
import xml.etree.ElementTree as ET
from datetime import*
x=list(ET.parse(urllib.urlretrieve("http://www.bleb.org/tv/data/listings/0/bbc1.xml")[0]).getroot())
for m,n in enumerate(i.find("start").text for i in x):
 if n>datetime.strftime(datetime.now(pytz.utc).astimezone(pytz.timezone('Europe/London')),"%H%M"):print x[m-1].find("title").text,": "+x[0].find("subtitle").text,_
KarlKastor
fuente
77
Está bien, solo tenemos problemas con el análisis de HTML con regex;)
Decaimiento Beta
1
Si no me equivoco, creo que puede reemplazarlo breakcon algo que cause un error (como 1/0(o tal vez incluso _)). Estoy bastante seguro de que sus envíos pueden salir con un error.
Loovjo
¿Se permiten librerías de terceros? Si es así, entonces se cambia urlliba utilizar requestsen su primer ejemplo: x=requests.get(link).text.split("</p")[:-1]. Eso te ahorrará 2 bytes.
Zizouz212
@ Zizouz212 Sí, se permiten solicitudes
Beta Decay