Astro und ich(hab den kleinsten Anteil) haben das Script noch etwas abgeaendert.
This commit is contained in:
parent
7ef3e312fe
commit
4aacc5b8f9
|
@ -36,8 +36,118 @@ events.each { |event|
|
|||
event[column].ljust(column_sizes[column] + 2)
|
||||
}.to_s.strip + (ptsd ? " (#{ptsd.strip})" : "")
|
||||
}</pre>
|
||||
|
||||
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.
|
||||
|
||||
<pre>
|
||||
#!/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
|
||||
</pre>
|
||||
|
||||
[[Kategorie:Ruby]]
|
||||
|
||||
|
||||
|
||||
{{Rübÿ Spëëd Mëtäl Cödïng}}
|
||||
|
|
Loading…
Reference in New Issue