#!/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