Bald sind wieder, ganz hipp, '''Filmnächte am Elbufer'''. Leider ist auf http://filmnaechte-am-elbufer.de/ keine sofort verwertbare Information zu finden. 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})" : "") } 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. #!/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 'Juni' then 6 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(Time.now.year, 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(' Filmnaechte am Elbufer http://filmnaechte-am-elbufer.de/ Filmnaechte am Elbufer de-de') 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(''"\n"'') f.close [[Kategorie:Ruby]] {{Rübÿ Spëëd Mëtäl Cödïng}}