#!/usr/bin/env ruby $:.unshift('vendor/ruby-mediawiki/lib') require 'mediawiki/dotfile' @wiki = MediaWiki.dotfile(nil,'entropia') require 'date' require 'cgi' RFC822 = "%a, %d %b %Y %T %z" # for Date::strftime #---------------------------------------------------------------------------- def parse_template(title, template) template_re = Regexp.new("\\\{\\\{" + template + "(.*?)\\\}\\\}") fields = {} fields_string = @wiki.article(title).text.scan(template_re)[0][0] inlink = 0 field = "" fields_string += "|" unless fields_string.match(/\|$/) fields_string.split(//).each do |c| if c == "|" && inlink == 0 (key, value) = field.split(/=/) fields[key] = value field = "" else inlink += 1 if c == "[" inlink -= 1 if c == "]" field += c end end fields end def datum2isodate(datum) return datum[6..9] + "-" + datum[3..4] + "-" + datum[0..1] end #---------------------------------------------------------------------------- sendungen = [] template = "Vorlage:Radio Chaotica-Sendung" @wiki.article(template).what_links_here.each do |page| # puts page # DEBUG if erste_sendung = parse_template(page, template)["erste_sendung"] sendung = {} sendung["datum"] = erste_sendung.gsub(/\s*um\s*\d+:\d+$/,"") sendung["titel"] = page sendung["url"] = "http://entropia.de/wiki/#{CGI::escape(page)}" sendung["discussion"] = "http://entropia.de/wiki/Diskussion:#{CGI::escape(page)}" sendung["download"] = parse_template(page, template)["download"] # Get a real date if sendung["datum"] !~ /^[0-9]{2}\.[0-9]{2}\.[0-9]{4}.*$/ $stderr.puts "#{sendung["datum"]} looks funny, fall back to today." sendung["date"] = Date.today() else sendung["date"] = Date.parse(datum2isodate(sendung["datum"])) end sendung["pubdate"] = sendung["date"].strftime(RFC822) # FIXME sendung["length"] = 57671680 sendung["duration"] = "00:59:59" sendungen.push(sendung) else $stderr.puts page, ": erste_sendung nicht gesetzt" end # break # DEBUG end sendungen = sendungen.sort do |x,y| y["date"] <=> x["date"] end #---------------------------------------------------------------------------- body = " radio chaotica podcast http://entropia.de/wiki/Radio%20Chaotica ein podcast der sendungen des entropia e.v., chaos computer club karlsruhe auf querfunk, 104.8 mhz Talk Radio MediaWiki neinomat de Entropia e.V. Karlsruhe radio@entropia.de (Radio Chaotica) #{Time.now.strftime(RFC822)} http://podcast.entropia.de/chaotica-100x300-crappy.png 100 300 http://entropia.de/wiki/Radio%20Chaotica Radio Chaotica daily 1 2000-01-01T12:00+00:00 ein podcast der sendungen des entropia e.v., chaos computer club karlsruhe auf querfunk, 104.8 mhz ein podcast der sendungen des entropia e.v., chaos computer club karlsruhe auf querfunk, 104.8 mhz entropia,karlsruhe,ccc,hacking,computer,technology,society,chaosradio,chaos,politics no Entropia e.V. Karlsruhe Entropia e.V. Karlsruhe radio@entropia.de " sendungen.each do |t| body += " #{CGI::escapeHTML(t["titel"])} #{t["url"]} #{CGI::escapeHTML(t["titel"])} Talk Radio #{t["url"]} #{t["pubdate"]} #{t["discussion"]} #{CGI::escapeHTML(t["titel"])} radio@entropia.de no Entropia e.V. Karlsruhe entropia,karlsruhe,ccc,hacking,computer,technology,society,chaosradio,chaos,politics #{t["duration"]} #{CGI::escapeHTML(t["titel"])} #{CGI::escapeHTML(t["titel"])} " end body += "" #puts body #DEBUG rss = File.new("/home/neingeist/public_html/chaotica.xml", "w") rss.puts body rss.close