O que há na TV?

11

Desafio

Escreva um programa que, usando os dados XML do site aqui , exiba o nome do programa que está sendo exibido atualmente na BBC 1.

Em formação

Todos os horários são indicados no horário de Londres (GMT + 1 no momento da postagem e GMT + 0 após 30 de outubro). Portanto, você deve converter sua hora local para a hora de Londres.

Cada programa recebe um horário de início e de término. Se o horário atual for posterior ao horário de início e antes do horário de término de um programa, esse programa será exibido no momento. Seu programa pode lidar com sobreposições da maneira que desejar.

Sua saída deve ser o título do programa, assim:

BBC News

No entanto, se o programa tiver uma legenda (mostrada pela presença da etiqueta da legenda), a saída deve ser a seguinte:

Steptoe and Son: The Piano

Onde Steptoe and Son é o título e The Piano é a legenda. Um exemplo de programa com legenda é o seguinte:

<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>

Os encurtadores de URL não são permitidos, mas as bibliotecas de análise XML são permitidas.

Ganhando

O código mais curto em bytes vence.

Beta Decay
fonte
Você pode fornecer um caso de teste com uma tag de legenda, porque (atualmente) não há nenhum no arquivo xml vinculado.
KarlKastor
@KarlKastor Aí está
Beta Decay
Temos que converter a hora local para a hora de Londres?
KarlKastor
2
O que exatamente faz esse "golfe rápido"?
Martin Ender
1
@MartinEnder Suponho que o escrevi rapidamente: D
Beta Decay

Respostas:

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 .

Exemplo de execução:

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

bash-4.3$ bash bbc.sh 
Bargain Hunt: Carmarthen
homem a trabalhar
fonte
Eu não sou bom em scripts bash, mas é possível produzir o endereço do site descompactando a versão compactada do endereço ou algo semelhante?
Na verdade não. É muito curto para compactação. Descompactado tem 36 bytes, compactado com gzip tem 56 bytes. Outras ferramentas que tentei produzir resultados ainda maiores.
manatwork
5

Python, 440 428 426 398 395 bytes

-31 Bytes graças a @Loovjo

Lança um erro ao encontrar a data.

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],_

Por favor, não me machuque por analisar xml com regex.

versão usando um analisador 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
fonte
7
Tudo bem, só temos problemas com a análise de HTML com regex;)
Decay Beta
1
Se não me engano, acho que você pode substituir o breakpor algo que causa um erro (como 1/0(ou talvez até _)). Tenho certeza de que seus envios podem sair com um erro.
Loovjo 20/08/16
Libs de terceiros são permitidas? Se sim, então você mudar urllibpara usar requestsem seu primeiro exemplo: x=requests.get(link).text.split("</p")[:-1]. Isso economizará 2 bytes.
precisa saber é o seguinte
@ Zizouz212 Sim, pedidos são permitidos
Decay Beta