diff --git a/Filmnächte-Scraping.mw b/Filmnächte-Scraping.mw index c064de0a..0987c5b6 100644 --- a/Filmnächte-Scraping.mw +++ b/Filmnächte-Scraping.mw @@ -36,8 +36,118 @@ events.each { |event| 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 '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(' ++ [[Kategorie:Ruby]] - - {{Rübÿ Spëëd Mëtäl Cödïng}}+ ') +f.close ++ '"\n"'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('