Qu'y a-t-il à la télé?

11

Défi

Écrivez un programme qui, en utilisant les données XML du site ici , affiche le nom du programme actuellement affiché sur BBC 1.

Information

Toutes les heures sont données à l'heure de Londres (GMT + 1 au moment de l'affichage et GMT + 0 après le 30 octobre). Par conséquent, vous devez convertir votre heure locale en heure de Londres.

Chaque programme reçoit une heure de début et de fin. Si l'heure actuelle se situe après l'heure de début et avant l'heure de fin d'un programme, ce programme est actuellement affiché. Votre programme peut gérer les chevauchements comme vous le souhaitez.

Votre sortie doit être le titre du programme, comme ceci:

BBC News

Cependant, si le programme a un sous-titre (indiqué par la présence de la balise de sous-titre), la sortie devrait être la suivante:

Steptoe and Son: The Piano

Steptoe and Son est le titre et The Piano est le sous-titre. Un exemple de programme avec un sous-titre est le suivant:

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

Les raccourcisseurs d'URL sont interdits mais les bibliothèques d'analyse XML sont autorisées.

Gagnant

Le code le plus court en octets gagne.

Beta Decay
la source
Pouvez-vous donner un cas de test avec une balise de sous-titre, car il n'y en a (actuellement) aucun dans le fichier xml lié.
KarlKastor
@KarlKastor Voilà
Beta Decay
Faut-il convertir l'heure locale en heure de Londres?
KarlKastor
2
Qu'est-ce qui fait exactement ce "golf rapide"?
Martin Ender
1
@MartinEnder Je suppose parce que je l'ai écrit rapidement: D
Beta Decay

Réponses:

2

Bash + curl + XMLStarlet, 166 caractères

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 .

Exemple d'exécution:

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

bash-4.3$ bash bbc.sh 
Bargain Hunt: Carmarthen
homme au travail
la source
Je ne suis pas bon en script bash, mais est-il possible de produire l'adresse du site Web via la version compressée de l'adresse compressée ou quelque chose de similaire?
Pas vraiment. Est trop court pour la compression. Non compressé a 36 octets, compressé avec gzip a 56 octets. D'autres outils que j'ai essayés produisent un résultat encore plus grand.
manatwork
5

Python, 440 428 426 398 395 octets

-31 octets grâce à @Loovjo

Lance une erreur lorsqu'il a trouvé la date.

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

Veuillez ne pas me blesser pour avoir analysé xml avec regex.

version utilisant un analyseur xml, 398 octets

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
la source
7
C'est bon, nous n'avons que des problèmes avec l'analyse du HTML avec regex;)
Beta Decay
1
Si je ne me trompe pas, je pense que vous pouvez remplacer le breakpar quelque chose qui provoque une erreur (comme 1/0(ou peut-être même _)). Je suis sûr que vos soumissions peuvent se terminer avec une erreur.
Loovjo
Les bibliothèques tierces sont-elles autorisées? Si oui, alors vous changez urllibd'utiliser requestsdans votre premier exemple: x=requests.get(link).text.split("</p")[:-1]. Cela vous fera économiser 2 octets.
Zizouz212
@ Zizouz212 Oui, les demandes sont autorisées
Beta Decay