Cosa c'è in TV?


11

Sfida

Scrivere un programma che, utilizzando i dati XML dal sito qui , visualizzare il nome del programma, che è attualmente in mostra su BBC 1.

Informazione

Tutti gli orari sono indicati all'ora di Londra (GMT + 1 al momento della pubblicazione e GMT + 0 dopo il 30 ottobre). Pertanto, è necessario convertire l'ora locale in ora di Londra.

A ciascun programma viene data l'ora di inizio e di fine. Se l'ora corrente è successiva all'ora di inizio e prima dell'ora di fine di un programma, quel programma viene attualmente visualizzato. Il tuo programma può gestire sovrapposizioni in qualsiasi modo tu voglia.

Il tuo output deve essere il titolo del programma, in questo modo:

BBC News

Tuttavia, se il programma ha un sottotitolo (mostrato dalla presenza del tag sottotitolo), l'output dovrebbe essere così:

Steptoe and Son: The Piano

Dove Steptoe and Son è il titolo e The Piano è il sottotitolo. Un programma di esempio con sottotitoli è il seguente:

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

Gli accorciatori di URL non sono consentiti, ma sono consentite le librerie di analisi XML.

vincente

Vince il codice più breve in byte.


Puoi dare un caso di prova con un tag sottotitoli, perché (attualmente) non c'è nessuno nel file XML collegato.
KarlKastor,

@KarlKastor Ecco qua
Decadimento beta

Dobbiamo convertire l'ora locale in ora di Londra?
KarlKastor,

2
Cosa rende esattamente questo "golf veloce"?
Martin Ender,

1
@MartinEnder Suppongo perché l'ho scritto rapidamente: D
Decadimento beta

Risposte:


2

Bash + curl + XMLStarlet, 166 caratteri

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 .

Esecuzione di esempio:

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

bash-4.3$ bash bbc.sh 
Bargain Hunt: Carmarthen

Non sono bravo a bash scripting, ma è possibile produrre l'indirizzo del sito Web tramite decompressione della versione compressa dell'indirizzo o qualcosa di simile?

Non proprio. È troppo corto per la compressione. Non compresso ha 36 byte, compresso con gzip ha 56 byte. Altri strumenti che ho provato producono risultati ancora più grandi.
arte

5

Python, 440 428 426 398 395 byte

-31 byte grazie a @Loovjo

Genera un errore quando ha trovato la 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],_

Per favore, non farmi del male per aver analizzato xml con regex.

versione usando un parser xml, 398 byte

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
Va bene, abbiamo solo problemi con l'analisi dell'HTML con regex;)
Decadimento beta

1
Se non sbaglio, penso che puoi sostituirlo breakcon qualcosa che causa un errore (come 1/0(o forse anche _)). Sono abbastanza sicuro che i tuoi invii possano uscire con un errore.
Loovjo,

Sono consentite le librerie di terze parti? Se sì, allora si cambia urllibda utilizzare requestsnel vostro primo esempio: x=requests.get(link).text.split("</p")[:-1]. Ciò ti farà risparmiare 2 byte.
Zizouz212,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.