|
|
|
#!/usr/bin/env ruby
|
|
|
|
$:.unshift('vendor/ruby-mediawiki/lib')
|
|
|
|
require 'mediawiki/dotfile'
|
|
|
|
@wiki = MediaWiki.dotfile(nil,'entropia')
|
|
|
|
|
|
|
|
require 'date'
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
def table_termine (t)
|
|
|
|
body = '{| border=1 cellspacing="0" cellpadding="5" style="border-collapse:collapse;"'
|
|
|
|
body += "\n"
|
|
|
|
body += "| Datum \n| Uhrzeit \n| Ort \n| Beschreibung \n|-\n"
|
|
|
|
t.each do |termin|
|
|
|
|
body += "| " + termin["datum"].to_s + "\n"
|
|
|
|
body += "| " + termin["uhrzeit"].to_s + "\n"
|
|
|
|
body += "| " + termin["ort"].to_s + "\n"
|
|
|
|
body += "| " + termin["beschreibung"].to_s + "\n"
|
|
|
|
body += "|-\n"
|
|
|
|
end
|
|
|
|
body += "|}"
|
|
|
|
return body
|
|
|
|
end
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
termine = []
|
|
|
|
|
|
|
|
template = "Vorlage:Radio Chaotica-Sendung"
|
|
|
|
@wiki.article(template).what_links_here.each do |page|
|
|
|
|
if erste_sendung = parse_template(page, template)["erste_sendung"]
|
|
|
|
termin = {}
|
|
|
|
termin["datum"] = erste_sendung.gsub(/\s*um\s*\d+:\d+$/,"")
|
|
|
|
termin["uhrzeit"] = "16:00"
|
|
|
|
termin["beschreibung"] = "[[" + page + "]]"
|
|
|
|
termin["ort"] = "[http://www.querfunk.de Querfunk]"
|
|
|
|
termine.push(termin)
|
|
|
|
else
|
|
|
|
$stderr.print(page, ": erste_sendung nicht gesetzt")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
template = "Vorlage:Termin"
|
|
|
|
@wiki.article(template).what_links_here.each do |page|
|
|
|
|
termin = parse_template(page, template)
|
|
|
|
termine.push(termin)
|
|
|
|
end
|
|
|
|
|
|
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Get a real date
|
|
|
|
termine.each do |termin|
|
|
|
|
if termin["datum"] !~ /^[0-9]{2}\.[0-9]{2}\.[0-9]{4}.*$/
|
|
|
|
puts "#{termin["datum"]} looks funny, fall back to today."
|
|
|
|
termin["date"] = Date.today()
|
|
|
|
else
|
|
|
|
termin["date"] = Date.parse(datum2isodate(termin["datum"]))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
termine = termine.sort do |x,y|
|
|
|
|
x["date"] <=> y["date"]
|
|
|
|
end
|
|
|
|
|
|
|
|
vergangene_termine = termine.clone.delete_if { |t| t["date"] >= Date.today() }
|
|
|
|
kommende_termine = termine.clone.delete_if { |t| t["date"] < Date.today() }
|
|
|
|
|
|
|
|
body = "== Vergangene Termine ==\n"
|
|
|
|
body += table_termine(vergangene_termine)
|
|
|
|
|
|
|
|
body += "\n== Kommende Termine ==\n"
|
|
|
|
body += table_termine(kommende_termine)
|
|
|
|
|
|
|
|
a = @wiki.article("Benutzer:Neingeist/Termine")
|
|
|
|
a.text = body
|
|
|
|
a.submit("wiki ex machina")
|