Blöde lange Überschrift aber es trifft das Thema. Nun zuerst das Problem; Ich verwende in meinem Android Mobile 3 Kalender, einen Privaten, einen Geschäftlichen und einen Büro internen "public" Kalender. Soweit alles kein Problem, der meiner Mailbox zugewiesene Geschäftliche wird per Exchange synchronisiert, der Private ist ein Google Kalender aber der dritte steht nur auf einem iCal / Caldav Kalender Server zur Verfügung.

Erste Idee - Ne App für alles ?!

Nun es gibt im Android Market eine App die genau das machen soll was ich möchte, einen externen iCal mit meinem Telefon abgleichen. Leider ist diese App seit Veröffentlichung in der Beta und das letzte Update ist irgendwann aus 2010. Wie Murphy es auch so will läuft die App auf einem Galaxy S wunderbar aber auf meinem HTC Desire nicht - Blöd. Fehler bekannt aber entwickelt wird daran wohl nicht mehr.

Zweite Idee - iCal mit Google Kalender importieren

Nun da Android Telefon die Eigenschaft haben ohne Probleme mit beliebig vielen Google Kalendern zu synchronisieren dachte ich mir einfach den iCal vom Kalender Server in Google Kalender importieren und synchronisieren lassen. Tja... Da wäre nur ein Problem. Google Kalender akzeptiert nur offene iCals also Kalender die Public ohne Passwordschutz im Netz abrufbar sind - Fu. Lösung - Nun einfach ein kleines PHP Script gebastelt was mein Kalenderproblem löst. Das Script wird unter einer nicht zu erratenen URL online gestellt und im Google Kalender als Quell URL eingetragen. Würde dann z.b. so aussehen:
http://meinedomain.de/meincalendarscript/djFfj3Djd-Djdsue-dJa94Dkf-sWsdfj.php

Wenn nun Google auf die URL zugreift öffnet das PHP Script eine Verbindung zum besagten iCal Server mit Password und gibt die zurückgegebenen Termine aus. Resultat, ich habe nun auch den mit Authentifizierung geschützten iCal im Google Kalender und damit im Android.  *GRR* Hier das Script dazu:
header("Content-Type: text/calendar; charset=UTF-8");
header('Content-Disposition: filename=pub_calendar');
// create a new cURL resource
$curl= curl_init();

// set URL and other appropriate options
curl_setopt($curl, CURLOPT_URL, "https://my.awesome-ical-server.de/ical/public/Calendar");
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;
curl_setopt($curl, CURLOPT_SSLVERSION, 3);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

// grab URL and pass it to the browser
curl_exec($curl);

// close cURL resource, and free up system resources
curl_close($curl);

Da dies simple PHP Script den Login im Klartext speichert würde ich empfehlen ein Extra iCal Konto zu erstellen was nur Zugriff auf diese Ressource hat. gl hf ^^

Amazon Logo Diesen Blog unterstützen?
Bestell dir doch etwas bei Amazon. Nutze diesen speziellen Link, es kostet dich nichts extra und für jeden Kauf darüber erhalte ich eine kleine Gutschrift. Danke!
✉ Marco Götze//

Kommentare

Formate: | Größe: Mb
Anmelden mitoder Benutzernamen eingeben

Wojciech Stachowiak
Hallo!iCalendar/ICS Format - SharePoint Kalender - Mobile Geräte - SYNCIch habe auf unsere SharePoint Server ein MashPoint REST API installiert. community.bamboosolutio...Bei Kalender habe ich neue Ansicht mit Filter "[Heute]-365" gemacht. Bei iPad/iPhone war alles oK. Für Android (Google-Kalender) und neue Office365 (Kalender) habe ich auf alte Server PHP Script vorbereitet.-------------------------------------------------header('Content-Type: text/calendar');header('Content-Disposition: inline; filename=pub_calendar.ics');header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1 // Initialize session and set URL. $ch = curl_init(); //set up url and login curl_setopt($ch, CURLOPT_URL, 'https://......./mashpoint/1/$ical$/sites/intranet/Lists/Kalender/iPhone.aspx'); curl_setopt($ch, CURLOPT_USERPWD, 'DOMIAN\USER:PASSWORD'); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); //set up ssl curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //set up redirect and transfer curl_setopt($ch, CURLOPT_MAXREDIRS, 100); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_ENCODING, 'gzip');// Get the response $response = curl_exec($ch); //check for errors if(curl_errno($ch)) { echo "error#: ".curl_errno($ch).''; echo "error: ".curl_error($ch).''; } else { echo $response; }//close channel curl_close($ch); return $response;-------------------------------------------------Jetzt kann ich Public Kalender direkt in Office365 öffnen (Kalender öffnen -> URL) und bei Google (Über URL hinzufügen) installieren.Gruss
guti
Ich hab dieses Script mehrere Monate problemlos verwendet.Vor ein paar Wochen hab ich die URL angepasst und im Google-Kalender nochmal neu hinzugefügt und seitdem bekomm ich keine Termine mehr angezeigt.Rufe ich das PHP-Script manuell auf, bekomme ich die korrekte Datei mit den aktuellen Terminen. Wie könnte man hier bei der Fehlersuche beginnen :S
guti
Ich hab dieses Script mehrere Monate problemlos verwendet.
Vor ein paar Wochen hab ich die URL angepasst und im Google-Kalender nochmal neu hinzugefügt und seitdem bekomm ich keine Termine mehr angezeigt.
Rufe ich das PHP-Script manuell auf, bekomme ich die korrekte Datei mit den aktuellen Terminen. Wie könnte man hier bei der Fehlersuche beginnen :S
Benutzer2
Vielen Dank für die prima Lösung. Bis gestern ging sie auch. Seit heute tauchen die Termine aber nicht mehr im Google Kalender auf. Ein direkter Aufruf des Skripts liefer aber eine Datei mit den richtigen, auch aktuellen Daten. Hat jemand eine Idee wie ich (als Laie) den Fehler finden kann?
Benutzer2
Vielen Dank für die prima Lösung. Bis gestern ging sie auch. Seit heute tauchen die Termine aber nicht mehr im Google Kalender auf. Ein direkter Aufruf des Skripts liefer aber eine Datei mit den richtigen, auch aktuellen Daten. Hat jemand eine Idee wie ich (als Laie) den Fehler finden kann?
★Marco Gö†ze
Hmm bei mir kann ich den importierten Kalender ohne Probleme umbenennen. Ist meistens ein Client Problem.
solariz
Hmm bei mir kann ich den importierten Kalender ohne Probleme umbenennen. Ist meistens ein Client Problem.
much
Besten Dank für das hilfreiche Script. Was muss ich anpassen, damit als Kalendername nicht der Pfad zum File mit dem Script angezeigt wird, sondern der gewünschte Kalendername?
much
Besten Dank für das hilfreiche Script. Was muss ich anpassen, damit als Kalendername nicht der Pfad zum File mit dem Script angezeigt wird, sondern der gewünschte Kalendername?
maybee
habs... es lag am Serverzertifikat. Daher musste ich noch CURLOPT_SSL_VERIFYPEER = false hinzufügen. Jetzt funktionierts.
maybee
habs... es lag am Serverzertifikat. Daher musste ich noch CURLOPT_SSL_VERIFYPEER = false hinzufügen. Jetzt funktionierts.
★Marco Gö†ze
Ggf mal die SSL zeile komplett raus lassen und sicherstellen das du per HTTP:// nicht httpS: verbindest. Damit kann man das dann mal ausschließen. Auch kann es helfen mal CURLOPT_HEADER auf true zu setzen um so zu sehen ob fehler auftreten. Auch mal CURLOPT_VERBOSE einfügen und auf true setzen das gibt aufschluss was schief gegangen sein kann.
solariz
Ggf mal die SSL zeile komplett raus lassen und sicherstellen das du per HTTP:// nicht httpS: verbindest. Damit kann man das dann mal ausschließen. Auch kann es helfen mal CURLOPT_HEADER auf true zu setzen um so zu sehen ob fehler auftreten. Auch mal CURLOPT_VERBOSE einfügen und auf true setzen das gibt aufschluss was schief gegangen sein kann.
Malte Brunnlieb
CURL ist installiert. Habe den Test auch durchgeführt. Das einzige was mir etwas komisch vorkommt ist folgendes in der Ausgabe der CURL test.php: ["ssl_version_number"]=> int(0) ?? Du hattest in deinem Skript CURL_SSLVERSION auf 3 gesetzt. Kann es daran liegen? Ne Ahnung wie ich das Ändern kann?Bitte diesen Kommentar anonymisieren... der Name wurde automatisch hinzugefügt
Malte Brunnlieb
CURL ist installiert. Habe den Test auch durchgeführt. Das einzige was mir etwas komisch vorkommt ist folgendes in der Ausgabe der CURL test.php: ["ssl_version_number"]=> int(0)?? Du hattest in deinem Skript CURL_SSLVERSION auf 3 gesetzt. Kann es daran liegen? Ne Ahnung wie ich das Ändern kann?Bitte diesen Kommentar anonymisieren... der Name wurde automatisch hinzugefügt
Malte Brunnlieb
CURL ist installiert. Habe den Test auch durchgeführt. Das einzige was mir etwas komisch vorkommt ist folgendes in der Ausgabe der CURL test.php:
["ssl_version_number"]=>
int(0)
?? Du hattest in deinem Skript CURL_SSLVERSION auf 3 gesetzt. Kann es daran liegen? Ne Ahnung wie ich das Ändern kann?

Bitte diesen Kommentar anonymisieren... der Name wurde automatisch hinzugefügt
★Marco Gö†ze
Ggf. ist CURL auf dem Server nicht installiert ? Curl ist ein spezielle PHP Modul welches für das Script notwendig ist. Wenn dies fehlt kann er das CAL nicht abfragen und liefert dann 0 Byte oder einen Fehler zurück.
maybee
Moin,erstmal danke für das skript, ich suche schon lange nach einer Möglichkeit meine eigenen geschützten ical Kalender mit google zu synchronisieren. Leider funktioniert das Skript bei mir nicht so wie ich erhofft hatte.... Ich bekomme immer das ical File zurück mit Größe 0kb. Ich habe dein Skript genommen, den filename im header angepasst an meinen Kalendernamen, die URL angepasst, sodass diese nun direkt auf den zu synchronisierenden Kalender zeigt und zuletzt habe ich natürlich noch einen validen benutzernamen + kennwort eingesetzt...Irgendwelche Vermutungen woran das liegen kann, dass mein Kalender immer mit 0kb weitergeleitet wird?
★Marco Gö†ze
Ggf. ist CURL auf dem Server nicht installiert ? Curl ist ein spezielle PHP Modul welches für das Script notwendig ist. Wenn dies fehlt kann er das CAL nicht abfragen und liefert dann 0 Byte oder einen Fehler zurück.Wie testen ? : www.wallpaperama.com/fo.o...
solariz
Ggf. ist CURL auf dem Server nicht installiert ? Curl ist ein spezielle PHP Modul welches für das Script notwendig ist. Wenn dies fehlt kann er das CAL nicht abfragen und liefert dann 0 Byte oder einen Fehler zurück.
maybee
Moin,erstmal danke für das skript, ich suche schon lange nach einer Möglichkeit meine eigenen geschützten ical Kalender mit google zu synchronisieren.Leider funktioniert das Skript bei mir nicht so wie ich erhofft hatte.... Ich bekomme immer das ical File zurück mit Größe 0kb.Ich habe dein Skript genommen, den filename im header angepasst an meinen Kalendernamen, die URL angepasst, sodass diese nun direkt auf den zu synchronisierenden Kalender zeigt und zuletzt habe ich natürlich noch einen validen benutzernamen + kennwort eingesetzt...Irgendwelche Vermutungen woran das liegen kann, dass mein Kalender immer mit 0kb weitergeleitet wird?
maybee
Moin,

erstmal danke für das skript, ich suche schon lange nach einer Möglichkeit meine eigenen geschützten ical Kalender mit google zu synchronisieren.
Leider funktioniert das Skript bei mir nicht so wie ich erhofft hatte.... Ich bekomme immer das ical File zurück mit Größe 0kb.
Ich habe dein Skript genommen, den filename im header angepasst an meinen Kalendernamen, die URL angepasst, sodass diese nun direkt auf den zu synchronisierenden Kalender zeigt und zuletzt habe ich natürlich noch einen validen benutzernamen + kennwort eingesetzt...

Irgendwelche Vermutungen woran das liegen kann, dass mein Kalender immer mit 0kb weitergeleitet wird?
Felix Nagel
Thanks, I just need to change the position. Yours Felix
Felix Nagel
Thanks, I just need to change the position. Yours Felix
solariz
Stell sicher das vor dem PHP Script also vor dem PHP Code Nichts anderes im PHP File steht. Alternativ mal ein ob_start(); vor den header( anweisungen einfügen.
★Marco Gö†ze
Stell sicher das vor dem PHP Script also vor dem PHP Code Nichts anderes im PHP File steht. Alternativ mal ein ob_start(); vor den header( anweisungen einfügen.
Felix Nagel
Mhh leider läuft das bei mir nicht. Bekomme da ne "Cannot modify header information - headers already sent ..." Fehlermeldung. Ne Idee was man da machen kann?
Felix Nagel
Mhh leider läuft das bei mir nicht. Bekomme da ne "Cannot modify header information - headers already sent ..." Fehlermeldung. Ne Idee was man da machen kann?
Felix Nagel
Mhh leider läuft das bei mir nicht. Bekomme da ne "Cannot modify header information - headers already sent ..." Fehlermeldung. Ne Idee was man da machen kann?
Neuling
Funktioniert bei mir leider nicht