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('
+
+
+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}}