Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <title>PHP-Script zum auslesen einer ICS Datei</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <meta charset="UTF-8">
- <meta name="robots" content="index, follow" />
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
- </head>
- <body>
- <main role="main">
- <div class="container">
- <?php
- /*error_reporting(E_ALL);*/
- error_reporting(-1);
- ini_set('display_errors', TRUE);
- $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
- date_default_timezone_set('Europe/Berlin');
- class ics {
- /* Die Funktion besteht darin, alle Inhalte von ics zu erhalten und alle Daten entsprechend den Ereignissen und ihren Abschnitten aufzulösen */
- function getIcsEventsAsArray($file) {
- $icalString = file_get_contents ( $file );
- $icsDates = array ();
- /* Auflösen der ICs-Daten, um Daten als Array entsprechend der Zeichenkette 'BEGIN:' zu erhalten */
- $icsData = explode ( "BEGIN:", $icalString );
- /* Iteration des icsData-Werts, um alle Start- und Enddaten als Unterarray zu erstellen */
- foreach ( $icsData as $key => $value ) {
- $icsDatesMeta [$key] = explode ( "\n", $value );
- }
- /* Itearting Einstieg in den Ics-Meta-Wert */
- foreach ( $icsDatesMeta as $key => $value ) {
- foreach ( $value as $subKey => $subValue ) {
- /* um ics-Ereignisse in der richtigen Reihenfolge zu erhalten */
- $icsDates = $this->getICSDates ( $key, $subKey, $subValue, $icsDates );
- }
- }
- return $icsDates;
- }
- /* Die Funktion besteht darin, die Elemente zu entfernen, die nicht die richtigen Start-, End- und Zusammenfassungsinformationen haben. */
- function getICSDates($key, $subKey, $subValue, $icsDates) {
- if ($key != 0 && $subKey == 0) {
- $icsDates [$key] ["BEGIN"] = $subValue;
- } else {
- $subValueArr = explode ( ":", $subValue, 2 );
- if (isset ( $subValueArr [1] )) {
- $icsDates [$key] [$subValueArr [0]] = $subValueArr [1];
- }
- }
- return $icsDates;
- }
- }
- /*header("Access-Control-Allow-Orgin: *");*/
- /* Ersetzen Sie die URL / den Dateipfad durch die .ics-Url */
- $file = "https://IregenEineUrl.com/events/?ical=1";
- ini_set('user_agent', 'My-Application/2.5');
- /* Abrufen von Ereignissen aus der isc-Datei */
- $obj = new ics();
- $icsEvents = $obj->getIcsEventsAsArray( $file );
- /* Hier erhalten wir die Zeitzone, um die Ereignisdaten entsprechend dem Standort von GEO zu erhalten */
- //date_default_timezone_set('Europe/Vienna');
- if(isset($icsEvents [1] ['DTSTART;TZID=UTC:19970902T090000'])){
- $timeZone = trim ( $icsEvents [1] ['DTSTART;TZID=UTC:19970902T090000'] );
- };
- //$timeZone = trim ( $icsEvents [1] ['X-WR-TIMEZONE'] );
- unset( $icsEvents [1] );
- $html = '<div class="row">';
- $eventImagePng = null;
- $eventLink = null;
- $eventName = null;
- $eventLink = null;
- $eventLocation = null;
- $start = null;
- $end = null;
- //$timeZone = null;
- foreach( $icsEvents as $icsEvent){
- /* Startdatum abfragen */
- if(isset($icsEvent ['DTSTART;VALUE=DATE'])){
- $start = isset( $icsEvent ['DTSTART;VALUE=DATE'] ) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
- };
- //$start = isset( $icsEvent ['DTSTART;VALUE=DATE'] ) ? $icsEvent ['DTSTART;VALUE=DATE'] : $icsEvent ['DTSTART'];
- /* Konvertierung in datetime und Anwendung der Zeitzone, um die richtige Datumszeit zu erhalten */
- $startDt = new DateTime ( $start );
- //$startDt->setTimeZone ( new DateTimezone ( $timeZone ) );
- $startDate = $startDt->format ( 'd.m.Y' );
- /* Enddatum abfragen */
- if(isset($icsEvent ['DTEND;VALUE=DATE'])){
- $end = isset( $icsEvent ['DTEND;VALUE=DATE'] ) ? $icsEvent ['DTEND;VALUE=DATE'] : $icsEvent ['DTEND'];
- };
- //$end = isset( $icsEvent ['DTEND;VALUE=DATE'] ) ? $icsEvent ['DTEND;VALUE=DATE'] : $icsEvent ['DTEND'];
- /* Konvertierung in datetime und Anwendung der Zeitzone, um die richtige Datumszeit zu erhalten */
- $endDt = new DateTime ( $end );
- //$endDt->setTimeZone ( new DateTimezone ( $timeZone ) );
- $endDate = $endDt->format ( 'd.m.Y' );
- /* Den Namen des Ereignisses ermitteln */
- if(isset($icsEvent['SUMMARY'])){
- $eventName = $icsEvent['SUMMARY'];
- };
- if(isset($icsEvent['URL'])){
- $eventLink = $icsEvent['URL'];
- };
- if(isset($icsEvent['ATTACH;FMTTYPE=image/jpeg'])){
- $eventImageJpg = $icsEvent['ATTACH;FMTTYPE=image/jpeg'];
- };
- if(isset($icsEvent['ATTACH;FMTTYPE=image/png'])){
- $eventImagePng = $icsEvent['ATTACH;FMTTYPE=image/png'];
- };
- if(isset($icsEvent['LOCATION'])){
- $eventLocation = $icsEvent['LOCATION'];
- };
- $html .=
- '<div class="col-md-12"><div class="card card mb-4 shadow-sm">
- <img src="' . htmlspecialchars($eventImageJpg ?? $eventImagePng, ENT_COMPAT, 'UTF-8') . '" class="card-img-top" alt="' . $icsEvent ['BEGIN'] .'">'
- .
- '<div class="card-body">
- <a href="'.htmlspecialchars($eventLink, ENT_COMPAT, 'UTF-8').'" target="_blank">
- <h3 class="card-title">'.htmlspecialchars($eventName, ENT_COMPAT, 'UTF-8').'</h3>
- </a>
- <p class="card-text">Datum: '.htmlspecialchars($startDate, ENT_COMPAT, 'UTF-8').' -  '.htmlspecialchars($endDate, ENT_COMPAT, 'UTF-8').'</p>
- <p>Veranstaltungsort: <a href="'.htmlspecialchars($eventLink, ENT_COMPAT, 'UTF-8').'" target="_blank">'.htmlspecialchars($eventLocation, ENT_COMPAT, 'UTF-8').'</a></p>
- </div></div></div>';
- }
- echo $html.'</div>';
- ?>
- </div>
- </main>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment