电视上有什么?


11

挑战

编写一个程序,该程序使用来自此处站点的XML数据显示当前在BBC 1上显示的程序的名称。

信息

所有时间均为伦敦时间(发布时为GMT + 1,10月30日之后为GMT + 0)。因此,您应该将当地时间转换为伦敦时间。

每个程序都有一个开始和结束时间。如果当前时间在程序的开始时间之后和结束时间之前,则该程序当前正在显示。您的程序可能会以您希望的任何方式处理重叠。

您的输出必须是程序标题,如下所示:

BBC News

但是,如果程序有字幕(由字幕标签显示),则输出应如下所示:

Steptoe and Son: The Piano

其中“ 斯特普托和儿子”为标题,“钢琴”为副标题。带有字幕的示例程序如下:

<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

@KarlKastor你去那里
β衰变

我们必须将当地时间转换为伦敦时间吗?
KarlKastor

2
究竟是什么使这种“快速高尔夫”?
马丁·恩德

1
@MartinEnder我想是因为我写得很快:D
Beta Decay

Answers:


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个字节。我尝试过的其他工具产生的结果更大。
manatwork '16

5

Python中,440 428 426 398 395个字节

-31字节感谢@Loovjo

找到日期时引发错误。

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
没关系,我们只有使用regex解析HTML时才遇到问题;)
Beta Decay

1
如果我没记错的话,我认为您可以将替换为break会导致错误的内容(例如1/0(甚至是_))。我很确定您的提交会因错误而退出。
罗夫霍

是否允许第三方库?如果是,则更urllib改为requests在第一个示例中使用x=requests.get(link).text.split("</p")[:-1]。这样可以节省2个字节。
Zizouz212 '16

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.