Televizyonda ne var?


11

Meydan okuma

Buradaki siteden XML verilerini kullanarak , şu anda BBC 1'de gösterilen programın adını görüntüleyen bir program yazın .

Bilgi

Tüm saatler Londra saatinde verilir (yayın tarihinde GMT + 1 ve 30 Ekim'den sonra GMT + 0). Bu nedenle, yerel saatinizi Londra saatine dönüştürmelisiniz.

Her programa bir başlangıç ​​ve bitiş zamanı verilir. Geçerli saat bir programın başlangıç ​​zamanından ve bitiş zamanından önce ise, o program şu anda gösterilir. Programınız üst üste binmeyi istediğiniz şekilde işleyebilir.

Çıktınız program başlığı olmalıdır, şöyle:

BBC News

Ancak, programın bir altyazısı varsa (altyazı etiketinin varlığıyla gösterilir), çıktı şu şekilde olmalıdır:

Steptoe and Son: The Piano

Nerede Steptoe and Son başlık ve Piyano altyazı olduğunu. Altyazılı örnek bir program aşağıdaki gibidir:

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

URL kısaltıcılarına izin verilmiyor, ancak XML ayrıştırma kitaplıklarına izin veriliyor.

Kazanan

Bayt cinsinden en kısa kod kazanır.


Bağlantılı xml dosyasında (şu anda) hiçbiri olmadığı için altyazı etiketi içeren bir test durumu verebilir misiniz?
KarlKastor

@KarlKastor İşte başlıyoruz
Beta Decay

Yerel saati Londra saatine dönüştürmek zorunda mıyız?
KarlKastor

2
Bu "hızlı golfü" tam olarak yapan nedir?
Martin Ender

1
@MartinEnder Sanırım çabucak yazdım: D
Beta

Yanıtlar:


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 .

Örnek çalışma:

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

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

Bh komut dosyasında iyi değilim, ancak adresin sıkıştırılmış sürümünü veya benzer bir şeyi açarak web sitesi adresini üretmek mümkün mü?

Pek sayılmaz. Sıkıştırma için çok kısa. Sıkıştırılmamış 36 bayta, gzip ile sıkıştırılmış 56 bayta sahiptir. Denediğim diğer araçlar daha da büyük sonuç üretiyor.
manatwork

5

Python, 440 428 426 398 395 Bayt

@Loovjo sayesinde -31 Bayt

Tarihi bulduğunda bir hata atar.

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

Regex ile xml ayrıştırmak için bana zarar vermeyin.

xml ayrıştırıcı kullanan sürüm, 398 Bayt

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
Sorun değil, HTML'nin regex ile ayrıştırılmasında sorun yaşıyoruz;)
Beta Çürümesi

1
Yanılmıyorsam, breakhataya neden olan bir şeyle (örneğin 1/0(hatta belki _)) değiştirebileceğinizi düşünüyorum. Gönderimlerinizin bir hata ile çıkabileceğinden eminim.
Loovjo

Üçüncü taraf kütüphanelerine izin veriliyor mu? Evet, o zaman değiştirmek urllibkullanmak requestsilk örnekte: x=requests.get(link).text.split("</p")[:-1]. Bu size 2 bayt kazandıracaktır.
Zizouz212

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.