#!/usr/bin/env ruby $:.unshift('vendor/ruby-mediawiki/lib') require 'mediawiki/dotfile' require 'cgi' require 'date' require 'erb' @wiki = MediaWiki.dotfile(nil,'entropia') #---------------------------------------------------------------------------- # Constants RFC822 = "%a, %d %b %Y %T %z" # for Date::strftime TPL_RSS = ' 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 <%= items %> ' TPL_ITEM = ' <%= CGI::escapeHTML(t["titel"]) %> <%= t["url"] %> <%= CGI::escapeHTML(t["titel"]) %> Talk Radio " length="<%= t["length"] %>" type="audio/mpeg" /> <%= 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"]) %> ' #---------------------------------------------------------------------------- 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 #---------------------------------------------------------------------------- # Generate RSS items = "" sendungen.each do |t| items += ERB.new(TPL_ITEM).result(binding); end rss = ERB.new(TPL_RSS).result; #puts rss #DEBUG rssfile = File.new("/home/neingeist/public_html/chaotica.xml", "w") rssfile.puts rss rssfile.close