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.


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

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.