テレビには何がありますか?


11

チャレンジ

ここにあるサイトのXMLデータを使用して、現在BBC 1に表示されているプログラムの名前を表示するプログラムを作成します。

情報

すべての時間はロンドン時間で与えられます(投稿時はGMT + 1、10月30日以降はGMT + 0)。したがって、現地時間をロンドン時間に変換する必要があります。

各プログラムには開始時刻と終了時刻が与えられます。現在の時刻がプログラムの開始時刻の後、終了時刻の前である場合、そのプログラムは現在表示されています。とにかくあなたのプログラムは重複を処理するかもしれません。

出力は、次のようにプログラムのタイトルである必要があります。

BBC News

ただし、プログラムに字幕がある場合(subtitleタグの存在によって示される)、出力は次のようになります。

Steptoe and Son: The Piano

どこSteptoeと息子はタイトルで、ピアノが字幕です。字幕付きのプログラム例は次のとおりです。

<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短縮サービスは許可されていませんが、XML解析ライブラリは許可されています。

勝ち

バイト単位の最短コードが優先されます。


リンクされたxmlファイルには(現在)存在しないため、字幕タグ付きのテストケースを提供できますか。
カールカストール

@KarlKastorそこに行く
ベータ崩壊

現地時間をロンドン時間に変換する必要がありますか?
カールカストール

2
この「クイックゴルフ」の正確な理由は何ですか?
マーティンエンダー

1
D:私はすぐにそれを書いたので、私が思う@MartinEnder
ベータ崩壊

回答:


2

Bash + curl + XMLStarlet、166文字

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 .

サンプル実行:

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

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

私はbashスクリプトが苦手ですが、アドレスの圧縮バージョンなどを解凍してウェブサイトのアドレスを生成することは可能ですか?

あんまり。圧縮するには短すぎます。非圧縮には36バイト、gzipで圧縮には56バイトがあります。私が試した他のツールはさらに大きな結果を生み出しました。
マナトワーク

5

Python、440 428 426 398 395バイト

-Loovjoのおかげで-31バイト

日付が見つかったときにエラーをスローします。

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

正規表現を使用してxmlを解析するために私を傷つけないでください。

xmlパーサーを使用したバージョン、398バイト

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
大丈夫、正規表現を使用したHTMLの解析に問題があるだけです;)
ベータディケイ

1
間違っていなければbreak、エラーの原因となるもの1/0(または(場合によっては_)など)に置き換えることができると思います。投稿がエラーで終了する可能性があると確信しています。
Loovjo

サードパーティのライブラリは許可されていますか?はいの場合、最初の例でurllib使用するようrequestsに変更しますx=requests.get(link).text.split("</p")[:-1]。これにより、2バイト節約できます。
Zizouz212

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.