mein-abfallkalender.de auslesen

Moin!

Ich möchte das mein-abfallkalender.de-Thema nochmal aufnehmen und euch nun das fertige Skript vorstellen, dass mit eurer Hilfe entstanden ist (dafür nochmal danke!).

Das ist der Service um den es hier geht:
http://mein-abfallkalender.de/

Das Skript ließt für alle unterstützten Gemeinden die kommenden Leerungstermine und packt sie für die Ausgabe im WebFront in eine HTML-Box String Variable. Das Ergebniss sieht dann so aus:
muell.JPG

Diese Gemeinden und Städte machen zur Zeit mit (komplette Liste eingefügt, damit die Suchfunktion die Ortsnamen finden kann):

Postleitzahlenbereich 00000 bis 09999:
01000 Gassistation
Postleitzahlenbereich 30000 bis 39999:
36304 Alsfeld; 36326 Antrifttal; 35510 Butzbach; 37269 Eschwege; 36324 Feldatal; 36397 Freiensteinau; 35328 Gemünden; 36321 Grebenau; 36355 Grebenhain; 36356 Herbstein; 35315 Homberg; 36319 Kirtorf; 36341 Lauterbach; 36369 Lautertal; 35037 Marburg; 35325 Mücke; 35514 Münzenberg; 32469 Petershagen; 35517 Rockenberg; 36329 Romrod; 36110 Schlitz; 36317 Schwalmtal; 35326 Ulrichstein; 36365 Wartenberg; 37213 Witzenhausen
Postleitzahlenbereich 40000 bis 49999:
41539 Dormagen; 41460 Neuss
Postleitzahlenbereich 50000 bis 59999:
51371 Leverkusen; 58300 Wetter
Postleitzahlenbereich 60000 bis 69999:
63674 Altenstadt; 61231 Bad Nauheim; 61118 Bad Vilbel; 63654 Büdingen; 63303 Dreieich; 61207 Echzell; 65343 Eltville; 65817 Eppstein; 65760 Eschborn; 61195 Florstadt; 63579 Freigericht; 61169 Friedberg; 61381 Friedrichsdorf; 63688 Gedern; 65366 Geisenheim; 63571 Gelnhausen; 63695 Glauburg; 63150 Heusenstamm; 63697 Hirzenhain; 65239 Hochheim; 65719 Hofheim; 61184 Karben; 63699 Kefenrod; 65397 Kiedrich; 61462 Königstein; 68623 Lampertheim; 63225 Langen; 63692 Limeshain; 65389 Lorch; 66663 Merzig; 61267 Neu-Anspach; 63263 Neu-Isenburg; 63667 Nidda; 61192 Niddatal; 61130 Nidderau; 61239 Ober-Mörlen; 63179 Obertshausen; 65375 Oestrich-Winkel; 63683 Ortenberg; 66953 Pirmasens; 63689 Ranstadt; 61201 Reichelsheim; 63517 Rodenbach; 63322 Rödermark; 63110 Rodgau; 61191 Rosbach; 65385 Rüdesheim am Rhein; 66740 Saarlouis; 63679 Schotten; 66386 St Ingbert; 65843 Sulzbach; 61250 Usingen; 65396 Walluf; 61198 Wölfersheim; 61204 Wöllstadt
Postleitzahlenbereich 80000 bis 89999:
84032 Altdorf; 84030 Ergolding; 82166 Gräfelfing; 82031 Grünwald; 84086 Neufahrn; 82152 Planegg
Postleitzahlenbereich 90000 bis 99999:
91052 Erlangen
Eine aktuelle Liste gibt es hier: http://mein-abfallkalender.de/unsere_referenzen.html. Über diese Links müsst ihr auch zur individuellen Seite eurer Entsorgungsbetriebe springen, um die individuelle URL zu erstellen.

Für alle nicht Symcon-Nutzer kann man sich auch E-Mail Erinnerungen schicken lassen oder den angepassten Abfallkalender als Outlook-Datei runterladen.

Zunächst braucht ihr eine URL zu eurem angepassten Kalender:
1.) Auf der Referenzen-Seite den Link eurer Gemeinde anklicken
2.) Straßennamen eingeben
3.) Zeitraum: die nächsten 7 Tage wählen (das Skript begrenzt die Anzahl der angezeigten Einträge nicht, das geschieht hierüber)
4.) Ggf. Abfallart die ihr nicht sehen wollt abwählen
5.) Meine Termine anzeigen, dann auf Termine/iCal klicken
6.) Hier nochmal alles richtig einstellen (nächste 7 Tage!), Erinnerung: aus
7.) Verwendungsart „via iCal abonnieren“
8,) Termine via iCall nutzen
9.) Nun wird euch die URL angezeigt.
10.) webcal:// durch http:// ersetzten und die URL in das Skript einfügen (siehe unten Punkt 7)

Nun zum Skript und zur Installation:
1.) Zuerst die iCallCreator (Standard, nicht Pro) PHP-Klasse hier herunterladen: http://kigkonsult.se/iCalcreator/
2.) Die Klasse nach /IPS/scripts/… auspacken, dabei das Unterverzeichnis „iCalcreator-2.22“ anlegen
3.) Eine String-Variable mit Profil HTML-Box anlegen
4.) Neues Skript erstellen und den Code unten mit Copy/Paste einfügen
5.) Einen täglichen Timer (zB täglich Nachts um 00:05Uhr) an das Skript anhängen
6.) Im Skript die ID eurer String-Variablen anpassen
7.) Im Skript die URL anpassen auf euren Müllkalender (siehe oben)
-fertig-

<? 
 // Liesst die naechsten Leerungen von www.mein-abfallkalender.de V1.01 
 // Diese Können in einer String/HTML-Box Variable im WebInterface angezeigt werden.
 // Auf der Seite muss eine individuelle URL erstellt werden und unten im Skript eingefuegt werden
 // Fuer mein Skript habe ich die Option "Zeitraum: Die naechsten 7 Tage" gewaehlt, damit bekommt man
 // nur die Termine die demnächst anstehen. Dann Termina via iCall/Webcall nutzen klicken und angezeigte
 // URL kopieren.

 require_once( "iCalcreator-2.22/iCalcreator.php");  
 // Gibts hier: http://kigkonsult.se/iCalcreator/index.php

$today = date("j.n.Y: "); 							//zum testen: $today = "23.11.2016: "; Format beachten!
$tomorrow = date("j.n.Y: ", strtotime("+1 days"));
$nextTermine = "";

$tz = "Europe/Berlin";
$config = array( "unique_id" => "1281",              	// set the (site) unique id,  
 				 "filename" => "Leverkusen.ics" );       // required if any component UID is missing!!  

$v = new vcalendar( $config );						    // create a new calendar instance  

 // Hier die individuelle URL einfuegen:
$v->setConfig( "url", "http://leverkusen.mein-abfallkalender.de/ical.ics?sid=20704&cd=inline&ft=noalarm&fp=days_7&wids=551,561,552,553,555,554" );  
  
@$v->parse();											// Hat eine Warnung ausgeloest, deshalb der @  
$v->sort();   											// Sortieren der Ergebnisse

$events_arr = $v->selectComponents(2000,01,01,2100,12,31,"vevent");		// Alle Events in der Zeitspanne selektieren  
foreach( $events_arr as $year => $year_arr ) 
 { 
  foreach( $year_arr as $month => $month_arr ) 
  { 
    foreach( $month_arr as $day => $day_arr ) 
    { 
          foreach( $day_arr as $event ) 
        {  
            $date  		 = $event->getProperty( "dtstart" );   
            $summary     = $event->getProperty( "summary" );  
            $dateS 		 = $date["day"].".".$date["month"].".".$date["year"].": ";
			if ($dateS == $today){
				$dateS = "<b><font color=#ff0000>HEUTE:</b></font> ";	// Datum durch das Wort HEUTE (in rot) ersetzten
				}
			if ($dateS == $tomorrow){
				$dateS = "<b><font color=#ff8000>MORGEN:</b></font> ";  // Datum durch das Wort MORGEN (in orange) ersetzten
				} 
			$nextTermine = $nextTermine . $dateS . $summary . "<br>";   // Zusammenbau der HTML Box
         }    
    } 
   } 
  }
    
  // Hier an eure Variablen-ID anpassen!
  SetValue(26431 /*[EigeneProgramme\Muellkalender\Muelltermine]*/,$nextTermine);     // Übergabe an die MTMLBox/String Variable
?>  

Ich hoffe das ist für ein paar Nutzer interessant.

Hi,
kannst du dir mal folgendes ansehen. Bei uns kann ich es nur über folgende Seite abrufen.
entsorgung herne - Abfallkalender

Kann ich es das auch einbinden?

Danke und Gruß
Jens

Gesendet von iPhone mit Tapatalk

Sieht eher schleicht aus. Das Skript ist zu auslesen aus iCal Dateien gedacht. Bei dir müsste das aus dem HTML code extrahiert werden…

also kann ich das knicken? Danke dir!

Gesendet von iPhone mit Tapatalk

Zumindest auf diesem Weg Du kannst aber versuchen die Daten aus der HTML Seite auszulesen und aufzubereiten da es ja eine HTML Seite ist.

 // Hier die individuelle URL einfuegen: 
$v->setConfig( "url", "http://leverkusen.mein-abfallkalender.de/ical.ics?sid=20704&cd=inline&ft=noalarm&fp=days_7&wids=551,561,552,553,555,554" );   

kann man diese Passage auf eine .ics Datei in einem Verzeichnis umbiegen ?

habs gefunden: $url = „file:///D:/daten/test/“.$Name.".ics";

Müllscript läuft für LK Göttingen

ics (ical) ist ein gängiges Format. Mit der VCalendar Klasse kannst du ganz leicht jede beliebige Datei auslesen.

Gruß,

Toni

Zwei Wochen getestet und trotzdem einen Fehler übersehen…

Das Datum kommt bei den Tagen (und wahrscheinlich auch bei den Monaten) ohne führende „0“. Dadurch versagt bei einstelligen Tagen die „Heute/Morgen“ Erkennung. Ich habe den Fehler direkt im initialen Post gefixt und die Versionsnummer auf V1.01 hochgesetzt. Einfach Zeile 12/13 korrigieren („d“ zu „j“ und „m“ zu „n“).

Habe die Variante jetzt bei mir umgesetzt.
Die .ics habe ich meiner Gemeinde runtergeladen und den als Pfad in dem Script hinterlegt.
Leider sind alle Termine aus 2017 aufgelistet und nicht die in der Zukunft folgen.

Was kann ich denn da machen?

Guten n’Abend

auch meine Gemeinde bietet diesen Service an. Schritte der Anleitung ausgeführt -> passt!

Vielen Dank an die Ersteller!

Matthias

Seit gestern findet sich folgende Information auf der Web-Seite des Anbieters:

Mittwoch, 02.01.2019
Wichtige Mitteilung: iCal Funktion steht bis Ende Januar nicht zur Verfügung.
Sehr geehrter ICalendar Nutzer, derzeigt stehen die Abfuhrtermine als iCalendar (Anzeige im Google Kalender, iPhone Kalender, Outlook …) wegen unberechtigter Zugriffe von Drittanbietern nicht zur Verfügung. Der Service wird derzeit für registrierte User umgestellt und steht ab Anfang Februar wieder zur Verfügung. Bitte nutzen Sie solange die Möglichkeit der E-Mail Erinnerung. Vielen Dank. Sie erhalten bereits eine E-Mail Erinnerung? Dann müssen Sie nichts tun. Mfg Ihr „Mein-Abfallkalender“ Service-Team".

Damit steht zu befürchten, dass die Bereitstellung der iCall Daten auf eine Verfahren mit Login umgestellt wird. Das könnte meine bescheidenenen PHP Programierkenntnisse überfprdern.

Ich hoffe ich bekomme ggf. Hilfe mein Skript dann anzupassen, so dass es weiterhion funktioniert.

Hallo,

ich hätte die ical als .ics vorliegen für das Jahr 2019, wie kann ich das einbinden ?

Hi zusammen,

ich bekomme beim Start des Scipts (seit einigen Monten) die folgende Fehlermeldung:

Abort Processing during Fatal-Error: Methods with the same name as their class will not be constructors in a future version of PHP; vcalendar has a deprecated constructor

Ich habe schon alles mögliche versucht, komme aber nicht weiter.

Auch die Version 2.22 scheint es nicht mehr zu geben. Die aktuelle Version ist die 2.27. Wäre kein Problem, wenn bei der 2.27 die Daten iCalcreator.php nicht mehr in dem Verzeichnis liegt und auch sonst nicht in einem der heruntergeladenen Verzeichnisse?!?

Habe die Version von hier:
GitHub - iCalcreator/iCalcreator: iCalcreator is the PHP class package managing iCal formatted files
und dann „Clone und Download“ wobei ich Download in Zip ausgewählt habe.

Wäre klasse, wenn das bald wieder laufen würde.

Vielen Dank

Matthias

Momentan funktioniert die Abfrage leider wieder sehr unzuverlässig.
Ich habe mal eine Prüfung auf Erfolg eingebaut und überschreibe bei erfolgloser Abfrage die bisherigen Daten nicht mehr mit einem leeren Array.

Werde die Version demnächst hier mal veröffentlichen…

Hier mal die aktuelle Version, welche bis vor ein paar Wochen noch funktioniert hat…

<? 
 // Liesst die naechsten Leerungen von www.mein-abfallkalender.de V1.20
 // Diese Können in einer String/HTML-Box Variable im WebInterface angezeigt werden.
 // Auf der Seite muss eine individuelle URL erstellt werden und unten im Skript eingefuegt werden
 // Fuer mein Skript habe ich die Option "Zeitraum: Die naechsten 7 Tage" gewaehlt, damit bekommt man
 // nur die Termine die demnächst anstehen. Dann Termine via iCall/Webcall nutzen klicken und angezeigte
 // URL kopieren.

// Hier die indivuduelle URL einfuegen:
$linkURL = "http://bad-vilbel.mein-abfallkalender.de/ical.ics?sid=1281&cd=attachment&ft=6&fp=days_7&wids=21,22,24,23,25,126,26&uid=17041&pwid=6a37433962&cid=4&fn=Mein-Abfallkalender_Stadt_Bad_Vilbel_Die_nächsten_7_Tage.ics";

$maxEntries = 4; //maximale Anzahl der Einträge in die Liste

require_once( "iCalcreator-2.22/iCalcreator.php");      // Gibts hier: http://kigkonsult.se/iCalcreator/index.php

$today = date("j.n.Y: "); 							   //zum testen: $today = "23.11.2016: "; Format beachten!
$tomorrow = date("j.n.Y: ", strtotime("+1 days"));
$nextTermine = "";
$nextTermineText = "";

$tz = "Europe/Berlin";
$config = array( "unique_id" => "1281",              	// set the (site) unique id,  
 				 "filename" => "BadVilbel.ics" );       // required if any component UID is missing!!  

$v = new vcalendar( $config );						    // create a new calendar instance  

$v->setConfig( "url", $linkURL );

$v->parse();											// Hat eine Warnung ausgeloest, deshalb der @  
$v->sort();   											// Sortieren der Ergebnisse

$events_arr = $v->selectComponents(2020,01,01,2030,01,01,"vevent");		// Alle Events in der Zeitspanne selektieren!!!!! <<<<<<<< anpassen!

$nbr = 0;
foreach( $events_arr as $year => $year_arr ) 
 { 
  foreach( $year_arr as $month => $month_arr ) 
  { 
    foreach( $month_arr as $day => $day_arr ) 
    { 
          foreach( $day_arr as $event ) 
            {  
            $date  		 = $event->getProperty( "dtstart" );   
            $summary     = $event->getProperty( "summary" );  
            $dateS 		 = $date["day"].".".$date["month"].".".$date["year"].": ";
			$dateX 		 = $date["day"].".".$date["month"].".: ";
			if ($dateS == $today){
				$dateS = "<b><font color=#ff0000>HEUTE:</b></font> ";	// Datum durch das Wort HEUTE (in rot) ersetzten
				$dateX = "heute: ";
				}
			if ($dateS == $tomorrow){
				$dateS = "<b><font color=#ff8000>MORGEN:</b></font> ";  // Datum durch das Wort MORGEN (in orange) ersetzten
				$dateX = "morgen: ";
				} 
			$nextTermine = $nextTermine . $dateS . $summary . "<br>";   // Zusammenbau der HTML Box
			$nextTermineText = $nextTermineText . $dateX . $summary . "; ";   // Zusammenbau als text string (fuer Alexa)
            $nbr++;
            if ($nbr >= $maxEntries) break 3;
            }    
    } 
   } 
  }

// Fix: Falls die Abfrage erfolglos war, letzte Werte laden und Datum modifizieren
if($nextTermine ==""){
    $LastUpdate = false;
    $nextTermineText = GetValue(37187);
    $nextTermine = GetValue(26431);
    $LastUpdateArray = IPS_GetVariable(52277);
    $LastUpdateTimestamp = $LastUpdateArray['VariableChanged'];
    $LastUpdateDate = date('Y-m-d', $LastUpdateTimestamp);
    $interval = date_diff(date_create(date('Y-m-d')), date_create($LastUpdateDate));
    $diff = intval($interval->format('%R%a'));
    switch ($diff) {
        case 0:
            break;
        case -1:
            $nextTermine = str_replace("HEUTE:", "GESTERN:", $nextTermine);
            $nextTermine = str_replace("MORGEN:", "HEUTE:", $nextTermine);
            break;
        case -2:
            $nextTermine = str_replace("GESTERN:", "Vorgestern:", $nextTermine);
            $nextTermine = str_replace("HEUTE:", "GESTERN:", $nextTermine);
            break;
        default:
            $nextTermine = str_replace("HEUTE:", "VORBEI:", $nextTermine);
            $nextTermine = str_replace("MORGEN:", "VORBEI:", $nextTermine);
            $nextTermine = str_replace("GESTERN:", "VORBEI:", $nextTermine);
            $nextTermine = str_replace("Vorgestern:", "VORBEI:", $nextTermine);
            break;
    }
} else $LastUpdate = true;


// Hier an eure Variablen-ID anpassen!
SetValue(26431,$nextTermine);             // Übergabe an die MTMLBox/String Variable
SetValue(37187,$nextTermineText);     // Übergabe an die String Variable (fuer Alexa)
SetValue(52277, $LastUpdate);               // Last Update Status
?>  

Leider funktioniert sie seit einiger Zeit nicht mehr. Mein-Abfallkalender hatte mal eine Downtime, seitdem kann man aber die Datei wieder ganz normal manuell über die URL runterladen. Ich denke also nicht, dass die etwas geändert haben. Mein Symcon läuft aus Ubuntu und ich mache regelmässig updates, kann also auch sein, dass dort etwas geändert wurde, was iCallcreator nocht verträgt. Fehlermeldung lautet „Failed to open steam“ und in der weiteren Verarbeitung im Skript scheint es wohl so zu sein, dass die Datei leer oder nicht vorhanden ist.

Fehlermeldung im Detail:
Warning: file_get_contents(http://bad-vilbel.mein-abfallkalender.de/ical.ics?sid=1281&cd=attachment&ft=6&fp=days_7&wids=21,22,24,23,25,126,26&uid=17041&pwid=6a37433962&cid=4&fn=Mein-Abfallkalender_Stadt_Bad_Vilbel_Die_nächsten_7_Tage.ics): failed to open stream: Die Wartezeit für die Verbindung ist abgelaufen in /var/lib/symcon/scripts/iCalcreator-2.22/lib/vcalendar.class.php on line 1773

Aktuelle Version von iCalcreator scheinen viel an Kompatibilität zu brechen und ich habe mich daher noch nicht wirklich getraut diese zu testen.

Ich komme nicht mehr wirklich weiter.

Nutz das Skript hier noch jemand und hat ggf. das gleiche Problem?

Versuche es mal mit HTTPS!

das habe ich natürlich als erstes probiert. Im Browser geht übrigens auch noch http…