มีอะไรในทีวี


11

ท้าทาย

เขียนโปรแกรมที่ใช้ข้อมูล XML จากเว็บไซต์ที่นี่แสดงชื่อของโปรแกรมที่แสดงอยู่ใน BBC 1

ข้อมูล

ให้เวลาทั้งหมดในเวลาลอนดอน (GMT + 1 ณ เวลาที่โพสต์และ GMT + 0 หลังวันที่ 30 ตุลาคม) ดังนั้นคุณควรแปลงเวลาท้องถิ่นของคุณเป็นเวลาลอนดอน

แต่ละโปรแกรมจะได้รับเวลาเริ่มต้นและสิ้นสุด หากเวลาปัจจุบันอยู่หลังเวลาเริ่มต้นและก่อนเวลาสิ้นสุดของโปรแกรมโปรแกรมนั้นกำลังแสดงอยู่ โปรแกรมของคุณอาจจัดการกับการทับซ้อนในสิ่งที่คุณต้องการ

ผลลัพธ์ของคุณจะต้องเป็นชื่อโปรแกรมเช่น:

BBC News

อย่างไรก็ตามหากโปรแกรมมีคำบรรยาย (แสดงโดยการมีแท็กคำบรรยาย) ผลลัพธ์ควรเป็นดังนี้:

Steptoe and Son: The Piano

ที่ชื่อSteptoe และ 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
อะไรคือสิ่งที่ทำให้ "กอล์ฟด่วน" นี้
Martin Ender

1
@MartinEnder ฉันคิดว่าเพราะฉันเขียนมันเร็ว: D
Beta Decay

คำตอบ:


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

ฉันไม่เก่งในการเขียนสคริปต์ทุบตี แต่เป็นไปได้หรือไม่ที่จะสร้างที่อยู่เว็บไซต์ผ่านการคลายบีบอัดที่อยู่เวอร์ชันที่บีบอัดหรือที่คล้ายกัน

ไม่ได้จริงๆ สั้นเกินไปสำหรับการบีบอัด ไม่บีบอัดมี 36 ไบต์บีบอัดด้วย gzip มี 56 ไบต์ เครื่องมืออื่น ๆ ที่ฉันพยายามให้ได้ผลลัพธ์ยิ่งใหญ่
จัดการ

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 ด้วย regex

เวอร์ชันที่ใช้ตัวแยกวิเคราะห์ 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 ด้วย regex;)
สลายตัวเบต้า

1
หากฉันไม่ผิดฉันคิดว่าคุณสามารถแทนที่breakด้วยสิ่งที่ทำให้เกิดข้อผิดพลาด (เช่น1/0(หรืออาจจะ_)) ฉันค่อนข้างมั่นใจว่าการส่งของคุณสามารถออกโดยมีข้อผิดพลาด
Loovjo

อนุญาตให้บุคคลที่สามใช้ libs ได้หรือไม่ ถ้าใช่แล้วคุณเปลี่ยนurllibที่จะใช้ในตัวอย่างแรกของคุณ:requests x=requests.get(link).text.split("</p")[:-1]นั่นจะช่วยให้คุณประหยัด 2 ไบต์
Zizouz212

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.