154 lines
4.2 KiB
Plaintext
154 lines
4.2 KiB
Plaintext
Bald sind wieder, ganz hipp, '''Filmnächte am Elbufer'''. Leider ist auf http://filmnaechte-am-elbufer.de/ keine sofort verwertbare Information zu finden.
|
|
<source lang="ruby">require 'htree'
|
|
#
|
|
# Saugen
|
|
#
|
|
#system("wget -O programm.html 'http://filmnaechte-am-elbufer.de/fn.php?idx=20'")
|
|
#
|
|
# Parsen
|
|
#
|
|
doc = HTree(File.new('programm.html')).to_rexml
|
|
events = []
|
|
spans = {}
|
|
doc.each_element('/html/body//table[@style=\'width: 488px\']/tr/td//span') { |span|
|
|
text = span.text.to_s
|
|
text.gsub!(/\ ./, ' ')
|
|
spans[span.attributes['class']] = text if text.size > 0
|
|
if span.attributes['class'] == 'progTitle'
|
|
events << spans
|
|
spans = {'progDay'=>spans['progDay'],
|
|
'progTime'=>spans['progTime'],
|
|
'progWeek'=>spans['progWeek']}
|
|
end
|
|
}
|
|
#
|
|
# Ausgabe tabellarisch
|
|
#
|
|
column_sizes = Hash.new(0)
|
|
events.each { |event|
|
|
event.each { |column,cell|
|
|
column_sizes[column] = cell.size if cell.size > column_sizes[column]
|
|
}
|
|
}
|
|
events.each { |event|
|
|
ptsd = event['progTitleSpecialDay']
|
|
puts %w(progWeek progDay progTime progTitle).collect { |column|
|
|
event[column].ljust(column_sizes[column] + 2)
|
|
}.to_s.strip + (ptsd ? " (#{ptsd.strip})" : "")
|
|
}</source>
|
|
|
|
Nachdem [[Benutzer:Conny|mir]] Astro sehr viel geholfen hat, ist dann folgendes Script herausgekommen.
|
|
Das Script holt sich bei jedem Aufruf automagisch die Daten von der Website, verarbeitet sie und gibt die Daten wieder als xml-file (filmnaechte.xml) aus. Dieses ist dann so vorbereitet, das es "hoffentlich" als RSS-Feed benutzt werden kann.
|
|
|
|
<source lang="ruby">
|
|
#!/usr/bin/env ruby
|
|
require 'htree'
|
|
require 'http-access2'
|
|
require 'time'
|
|
require 'rexml/element'
|
|
|
|
|
|
class Event
|
|
attr_reader :time
|
|
def <=>(o)
|
|
@time <=> o.time
|
|
end
|
|
def initialize(spans)
|
|
if spans['progDay'] =~ /(\d+)\. (.+)/
|
|
tag, monatsname = $1, $2
|
|
monat = case monatsname
|
|
when 'Juli' then 7
|
|
when 'August' then 8
|
|
when 'September' then 9
|
|
else
|
|
raise "Unbekannter Monat: #{monatsname}"
|
|
end
|
|
|
|
elsif spans['progDay'] =~ /Heute/
|
|
tag, monat = Time.now.day, Time.now.month
|
|
else
|
|
raise "Komischer Tag: #{spans['progDay']}"
|
|
end
|
|
|
|
if spans['progTime'] =~ /(\d+)[:\.](\d+)/
|
|
stunde, minute = $1, $2
|
|
end
|
|
|
|
@time = Time.local(2006, monat, tag, stunde, minute)
|
|
@title = spans['progTitle']
|
|
@description = spans['progTitleSpecialDay'].to_s
|
|
end
|
|
|
|
def to_rss
|
|
# Beispiel-RSS: http://astroblog.spaceboyz.net/rss.rb :-)
|
|
item = REXML::Element.new('item')
|
|
title = item.add(REXML::Element.new('title'))
|
|
title.text = @title
|
|
pubDate = item.add(REXML::Element.new('pubDate'))
|
|
pubDate.text = @time.strftime('%Y-%m-%dT%H:%M:%S+02:00') # Immer Sommerzeit (GMT+2)
|
|
description = item.add(REXML::Element.new('description'))
|
|
description.text = @description
|
|
item
|
|
end
|
|
end
|
|
|
|
#quelle
|
|
urlstr = 'http://filmnaechte-am-elbufer.de/fn.php?idx=20'
|
|
|
|
#html-inhalt holen
|
|
|
|
programm_html = ''
|
|
h = HTTPAccess2::Client.new(urlstr)
|
|
response = h.get(urlstr){ |data| programm_html += data }
|
|
|
|
#html-Daten verarbeiten
|
|
doc = HTree(programm_html).to_rexml
|
|
events = []
|
|
spans = {}
|
|
|
|
doc.each_element('/html/body//table[@style=\'width: 488px\']/tr/td//span') { |span|
|
|
text = span.text.to_s
|
|
text.gsub!(/\ ./, ' ')
|
|
spans[span.attributes['class']] = text if text.size > 0
|
|
|
|
if span.attributes['class'] == 'progTitle'
|
|
events << Event.new(spans)
|
|
spans = { 'progDay'=>spans['progDay'],
|
|
'progTime'=>spans['progTime'],
|
|
'progWeek'=>spans['progWeek'] }
|
|
end
|
|
}
|
|
|
|
#xml-file erzeugen
|
|
f = File.new("filmnaechte.xml", "w")
|
|
|
|
#xml und rss Header erzeugen
|
|
f.write('<?xml version="2.0" encoding="UTF-8"?>
|
|
<rss version="2.0">
|
|
<channel>
|
|
<title>Filmnaechte am Elbufer</title>
|
|
<link>http://filmnaechte-am-elbufer.de/</link>
|
|
<description>Filmnaechte am Elbufer</description>
|
|
<language>de-de</language>')
|
|
|
|
events.sort!
|
|
while events.first.time < Time.now
|
|
events.shift
|
|
end
|
|
|
|
events = events[0..9]
|
|
events.each { |event|
|
|
event.to_rss.write(f)
|
|
|
|
#Um den xml-code besser lesbar zu machen, wird noch ein Zeilenumbruch eingefuegt.
|
|
f.write("\n")
|
|
|
|
}
|
|
f.write('</channel>'"\n"'</rss>')
|
|
f.close
|
|
</source>
|
|
|
|
[[Kategorie:Ruby]]
|
|
|
|
{{Rübÿ Spëëd Mëtäl Cödïng}}
|