From a625635ee1e65b19fbc41d603c1c66d5caebc7e8 Mon Sep 17 00:00:00 2001 From: Astro Date: Mon, 6 Sep 2021 01:26:50 +0200 Subject: [PATCH] kreuzchor-termine: init --- default.nix | 1 + kreuzchor-termine/scrape.rb | 57 +++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 kreuzchor-termine/scrape.rb diff --git a/default.nix b/default.nix index 47295d7..8dba3c0 100644 --- a/default.nix +++ b/default.nix @@ -31,4 +31,5 @@ in { freifunk_node = wrapScript "freifunk_node" ./freifunk_node/scrape.rb; impfee = wrapScript "impfee" ./impfee/scrape.rb; riesa-efau-kalender = wrapScript "riesa-efau-kalender" ./riesa-efau-kalender/scrape.rb; + kreuzchor-termine = wrapScript "kreuzchor-termine" ./kreuzchor-termine/scrape.rb; } diff --git a/kreuzchor-termine/scrape.rb b/kreuzchor-termine/scrape.rb new file mode 100644 index 0000000..c5b1c62 --- /dev/null +++ b/kreuzchor-termine/scrape.rb @@ -0,0 +1,57 @@ +#!/usr/bin/env ruby +# coding: utf-8 + +require 'open-uri' +require 'json' +require 'erb' + +def fmt_time t + t.strftime "%Y%m%dT%H%M%S" +end + +class Event + attr_accessor :name, :location, :link, :date +end + +events = [] + +url = "https://kreuzchor.de/termine-tickets/" +data = URI.open(url).read() +if data =~ /var php_vars = (\{.+\});$/ + json = JSON.parse $1 +else + raise "Data not found" +end + +json['events'].each do |event| + ev = Event::new + ev.name = event['title'] + ev.location = event['venue'] + ev.date = Time.at(event['event_time'] / 1000, in: 0) + ev.link = event['permalink'].empty? ? event['event_link'] : event['permalink'] + events << ev +end + +events.sort_by! { |ev| ev.date } + +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:<%= ev.link %> + DTSTART:<%= fmt_time(ev.date) %> + DTEND:<%= fmt_time(ev.date + 2 * 3600) %> + SUMMARY:<%= ev.name %> + LOCATION:<%= ev.location %> + URL:<%= ev.link %> + END:VEVENT + <% end %> + END:VCALENDAR +EOF + +puts ical.result