2021-09-08 21:10:08 +02:00
|
|
|
#!/usr/bin/env ruby
|
|
|
|
# coding: utf-8
|
|
|
|
|
|
|
|
require 'open-uri'
|
|
|
|
require 'nokogiri'
|
|
|
|
require 'erb'
|
|
|
|
|
2021-09-08 22:54:37 +02:00
|
|
|
class Event
|
|
|
|
attr_accessor :data, :url
|
|
|
|
|
|
|
|
def initialize data, url
|
|
|
|
@data = data
|
|
|
|
@url = url
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2021-09-08 21:10:08 +02:00
|
|
|
events = []
|
|
|
|
|
|
|
|
url = "https://www.dhmd.de/veranstaltungen/kalender/1/"
|
|
|
|
doc = Nokogiri::HTML URI.open(url)
|
|
|
|
doc.css("a.more").each do |details_link|
|
2021-09-08 22:54:37 +02:00
|
|
|
event_url = URI.join url, details_link.attr('href')
|
|
|
|
details = Nokogiri::HTML URI.open(event_url)
|
2021-09-08 21:10:08 +02:00
|
|
|
details.css("a.icon-termin").each do |icon|
|
|
|
|
ical = URI.open(icon.attr('href')).read()
|
|
|
|
ical.scan(/BEGIN:VEVENT\r\n(.+?)\nEND:VEVENT/m).each do |ev,|
|
2021-09-08 22:54:37 +02:00
|
|
|
ev = Event::new ev, event_url
|
2021-09-08 21:10:08 +02:00
|
|
|
events << ev
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ical = ERB::new <<~EOF
|
|
|
|
BEGIN:VCALENDAR
|
|
|
|
VERSION:2.0
|
|
|
|
METHOD:PUBLISH
|
|
|
|
X-WR-TIMEZONE;VALUE=TEXT:Europe/Berlin
|
|
|
|
<% events.each do |ev| %>
|
|
|
|
BEGIN:VEVENT
|
2021-09-08 22:54:37 +02:00
|
|
|
<%= ev.data %>
|
|
|
|
URL:<%= ev.url %>
|
|
|
|
LOCATION:Hygienemuseum
|
2021-09-08 21:10:08 +02:00
|
|
|
END:VEVENT
|
|
|
|
<% end %>
|
|
|
|
END:VCALENDAR
|
|
|
|
EOF
|
|
|
|
|
|
|
|
puts ical.result
|