Что по телевизору?


11

Вызов

Напишите программу , которая, используя данные XML с сайта здесь , отображать имя программы , которая в настоящее время показывает на BBC 1.

Информация

Время указывается по лондонскому времени (GMT + 1 на момент публикации и GMT + 0 после 30 октября). Поэтому вам следует перевести ваше местное время в лондонское.

Каждой программе дается время начала и окончания. Если текущее время указано после времени начала и до времени окончания программы, эта программа отображается в данный момент. Ваша программа может обрабатывать перекрытия в любом случае.

Ваш вывод должен быть названием программы, вот так:

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 Вот и все
бета-распад

Нужно ли переводить местное время в лондонское?
КарлКастор

2
Что именно делает этот «быстрый гольф»?
Мартин Эндер

1
@MartinEnder Я полагаю, потому что я написал это быстро: D
Бета-распад

Ответы:


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

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
Ничего страшного, у нас проблемы только с анализом HTML с помощью регулярных выражений;)
Beta Decay

1
Если я не ошибаюсь, я думаю, вы можете заменить что- breakто, что вызывает ошибку (например, 1/0(или, может быть, даже _)). Я уверен, что ваши материалы могут завершиться с ошибкой.
Loovjo

Разрешены ли сторонние библиотеки? Если да, то вы меняете urllibиспользовать requestsв первом примере: x=requests.get(link).text.split("</p")[:-1]. Это сэкономит вам 2 байта.
Zizouz212

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.