Co jest w telewizji?


11

Wyzwanie

Napisz program, który, wykorzystując dane XML z witryny tutaj , wyświetli nazwę programu, który jest obecnie pokazano na BBC 1.

Informacja

Wszystkie godziny podane są w czasie londyńskim (GMT + 1 w momencie nadania i GMT + 0 po 30 października). Dlatego należy przeliczyć czas lokalny na czas londyński.

Każdy program ma czas rozpoczęcia i zakończenia. Jeśli bieżący czas jest późniejszy niż czas rozpoczęcia i czas zakończenia programu, ten program jest obecnie wyświetlany. Twój program może obsługiwać nakładanie się w dowolny sposób.

Twój wynik musi być tytułem programu, podobnie jak:

BBC News

Jeśli jednak program ma napisy (pokazane przez obecność znacznika napisów), wynik powinien wyglądać następująco:

Steptoe and Son: The Piano

Gdzie Steptoe and Son to tytuł, a The Piano to podtytuł. Przykładowy program z napisami jest następujący:

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

Skracacze URL są niedozwolone, ale biblioteki parsowania XML są dozwolone.

Zwycięski

Najkrótszy kod w bajtach wygrywa.


Czy możesz podać przypadek testowy ze znacznikiem napisów, ponieważ (aktualnie) nie ma go w połączonym pliku xml.
KarlKastor,

@KarlKastor tam udać
rozpadu beta

Czy musimy przeliczyć czas lokalny na czas londyński?
KarlKastor,

2
Co dokładnie sprawia, że ​​ten „szybki golf”?
Martin Ender

1
@MartinEnder Chyba dlatego, że napisałem to szybko: D
Beta Decay

Odpowiedzi:


2

Bash + curl + XMLStarlet, 166 znaków

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 .

Przykładowy przebieg:

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

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

Nie jestem dobry w skryptowaniu bash, ale czy można wygenerować adres strony internetowej poprzez dekompresowaną skompresowaną wersję adresu lub coś podobnego?

Nie całkiem. Jest za krótki do kompresji. Nieskompresowany ma 36 bajtów, skompresowany gzip ma 56 bajtów. Inne narzędzia, które próbowałem, dają jeszcze większy wynik.
manatwork

5

Python, 440 428 426 398 395 bajtów

-31 Bajtów dzięki @Loovjo

Zgłasza błąd, gdy znalazł datę.

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

Nie rób mi krzywdy za parsowanie xml z regex.

wersja korzystająca z parsera XML, 398 bajtów

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
W porządku, mamy problemy tylko z parsowaniem HTML za pomocą regex;)
Beta Decay

1
Jeśli się nie mylę, myślę, że możesz zastąpić breakcoś, co powoduje błąd (np. 1/0(A może nawet _)). Jestem prawie pewien, że Twoje zgłoszenia mogą zakończyć się z błędem.
Loovjo,

Czy biblioteki osób trzecich są dozwolone? Jeśli tak, to zmienić urllib, aby wykorzystać requestsw swoim pierwszym przykładzie: x=requests.get(link).text.split("</p")[:-1]. To pozwoli Ci zaoszczędzić 2 bajty.
Zizouz212,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.