Apa yang ada di TV?


11

Tantangan

Tulis program yang, menggunakan data XML dari situs di sini , menampilkan nama program yang saat ini ditampilkan di BBC 1.

Informasi

Semua waktu diberikan pada waktu London (GMT + 1 pada saat posting dan GMT + 0 setelah 30 Oktober). Karena itu, Anda harus mengubah waktu lokal Anda ke waktu London.

Setiap program diberi waktu mulai dan berakhir. Jika waktu saat ini adalah setelah waktu mulai dan sebelum waktu akhir suatu program, program itu sedang ditampilkan. Program Anda dapat menangani tumpang tindih dengan cara apa pun yang Anda inginkan.

Output Anda haruslah judul program, seperti:

BBC News

Namun, jika program memiliki subtitle (ditunjukkan oleh keberadaan tag subtitle), hasilnya harus seperti ini:

Steptoe and Son: The Piano

Di mana Steptoe and Son adalah judul dan The Piano adalah subtitle. Contoh program dengan subtitle adalah sebagai berikut:

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

Penyingkat URL tidak diizinkan tetapi parsing pustaka XML diizinkan.

Kemenangan

Kode terpendek dalam byte menang.


Dapatkah Anda memberikan test case dengan tag subtitle, karena (saat ini) tidak ada dalam file xml tertaut.
KarlKastor

@KarlKastor Ini dia
Beta Decay

Apakah kita harus mengubah waktu lokal ke waktu London?
KarlKastor

2
Apa sebenarnya yang membuat "golf cepat" ini?
Martin Ender

1
@ MartinEnder saya kira karena saya menulisnya dengan cepat: D
Beta Decay

Jawaban:


2

Bash + curl + XMLStarlet, 166 karakter

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 .

Contoh dijalankan:

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

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

Saya tidak pandai bash scripting, tetapi apakah mungkin untuk menghasilkan alamat situs web melalui dekompresi versi terkompresi dari alamat atau yang serupa?

Tidak juga. Terlalu pendek untuk kompresi. Terkompresi memiliki 36 byte, dikompresi dengan gzip memiliki 56 byte. Alat lain yang saya coba menghasilkan hasil yang lebih besar.
manatwork

5

Python, 440 428 426 398 395 Bytes

-31 Bytes terima kasih kepada @Loovjo

Melempar kesalahan saat menemukan tanggal.

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

Tolong jangan sakiti saya untuk parsing xml dengan regex.

versi menggunakan parser 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
Tidak apa-apa, kami hanya punya masalah dengan penguraian HTML dengan regex;)
Beta Decay

1
Jika saya tidak salah, saya pikir Anda dapat mengganti breakdengan sesuatu yang menyebabkan kesalahan (seperti 1/0(atau bahkan mungkin _)). Saya cukup yakin kiriman Anda dapat keluar dengan kesalahan.
Loovjo

Apakah lib pihak ketiga diizinkan? Jika ya, maka Anda mengubah urllibuntuk menggunakan requestsdalam contoh pertama Anda: x=requests.get(link).text.split("</p")[:-1]. Itu akan menghemat 2 byte.
Zizouz212

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.