From b1e8fce8106b2d031ccf269f7edb6a6556389670 Mon Sep 17 00:00:00 2001 From: Astro Date: Fri, 1 Jul 2022 00:22:38 +0200 Subject: [PATCH] dresden-versammlungen: init --- dresden-versammlungen/scrape.rb | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 dresden-versammlungen/scrape.rb diff --git a/dresden-versammlungen/scrape.rb b/dresden-versammlungen/scrape.rb new file mode 100644 index 0000000..9ee1098 --- /dev/null +++ b/dresden-versammlungen/scrape.rb @@ -0,0 +1,46 @@ +#!/usr/bin/env ruby +# coding: utf-8 + +require 'open-uri' +require 'json' +require 'erb' + +def fmt_time event, key + t = Time.new event["Datum"] + times = nil + if event["Zeit"] =~ /(\d{1,2})[\.:]?(\d{0,2})\s*-\s*(\d{1,2})[\.:]?(\d{0,2})/ + start = t.clone() + $1.to_i * 3600 + $2.to_i * 60 + stop = t.clone() + $3.to_i * 3600 + $4.to_i * 60 + else + start = t.clone() + stop = t.clone() + 21 * 3600 + 59 * 60 + end + { :start => start, :stop => stop }[key].strftime "%Y%m%dT%H%M%S" +end + +url = "https://www.dresden.de/data_ext/versammlungsuebersicht/Versammlungen.json" +data = URI.open(url).read() +json = JSON.parse data +events = json['Versammlungen'].select { |event| event["Status"] == "beschieden" } + +ical = ERB::new <<~EOF + BEGIN:VCALENDAR + VERSION:2.0 + METHOD:PUBLISH + X-WR-TIMEZONE;VALUE=TEXT:Europe/Berlin + <% events.each do |ev| %> + BEGIN:VEVENT + METHOD:PUBLISH + CLASS:PUBLIC + UID:<%= fmt_time ev, :start %> + DTSTART:<%= fmt_time ev, :start %> + DTEND:<%= fmt_time ev, :stop %> + SUMMARY:<%= ev["Thema"] %> + LOCATION:<%= ev["Veranstalter"] %> (<%= ev["Teilnehmer"] %>), <%= ev["Ort"] %> + URL:https://www.dresden.de/de/rathaus/dienstleistungen/versammlungsuebersicht.php + END:VEVENT + <% end %> + END:VCALENDAR +EOF + +puts ical.result