<?php class DemosBerlinBridge extends BridgeAbstract { const NAME = 'Demos Berlin'; const URI = 'https://www.berlin.de/polizei/service/versammlungsbehoerde/versammlungen-aufzuege/'; const CACHE_TIMEOUT = 3 * 60 * 60; const DESCRIPTION = 'Angezeigte Versammlungen und Aufzüge in Berlin'; const MAINTAINER = 'knrdl'; const PARAMETERS = [[ 'days' => [ 'name' => 'Tage', 'type' => 'number', 'title' => 'Einträge für die nächsten Tage zurückgeben', 'required' => true, 'defaultValue' => 7, ] ]]; public function getIcon() { return 'https://www.berlin.de/i9f/r1/images/favicon/favicon.ico'; } public function collectData() { $url = 'https://www.berlin.de/polizei/service/versammlungsbehoerde/versammlungen-aufzuege/index.php/index/all.json'; $json = getContents($url); $jsonFile = json_decode($json, true); $daysInterval = DateInterval::createFromDateString($this->getInput('days') . ' day'); $maxTargetDate = date_add(new DateTime('now'), $daysInterval); foreach ($jsonFile['index'] as $entry) { $entryDay = implode('-', array_reverse(explode('.', $entry['datum']))); // dd.mm.yyyy to yyyy-mm-dd $ts = (new DateTime())->setTimestamp(strtotime($entryDay)); if ($ts <= $maxTargetDate) { $item = []; $item['uri'] = 'https://www.berlin.de/polizei/service/versammlungsbehoerde/versammlungen-aufzuege/index.php/detail/' . $entry['id']; $item['timestamp'] = $entryDay . ' ' . $entry['von']; $item['title'] = $entry['thema']; $location = $entry['strasse_nr'] . ' ' . $entry['plz']; $locationQuery = http_build_query(['query' => $location]); $item['content'] = <<<HTML <h1>{$entry['thema']}</h1> <p>📅 <time datetime="{$item['timestamp']}">{$entry['datum']} {$entry['von']} - {$entry['bis']}</time></p> <a href="https://www.openstreetmap.org/search?$locationQuery"> 📍 {$location} </a> <p>{$entry['aufzugsstrecke']}</p> HTML; $item['uid'] = $this->getSanitizedHash($entry['datum'] . '-' . $entry['von'] . '-' . $entry['bis'] . '-' . $entry['thema']); $this->items[] = $item; } } } private function getSanitizedHash($string) { return hash('sha1', preg_replace('/[^a-zA-Z0-9]/', '', strtolower($string))); } }