[ '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'] = <<{$entry['thema']}

📅

📍 {$location}

{$entry['aufzugsstrecke']}

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))); } }