Scripte für den Google Kalender. (Ehemals Termine eintragen)

Hallo alle zusammen.

Termine per IPS in den Google Kalender eintragen.
Besteht da interesse?

Ich habe das für mich gelöst.

Auf jeden Fall. Wir haben einen Familienkalender in den jeder per iPad, iPhone oder Android-Telefon, usw. Termine eintragen kann. Nur vom IPS-Terminal aus ging das noch nicht. Da konnten wir bisher immer nur nachsehen was anliegt.

Hallo kronos,

OK. Das wird aber erst Sonntagabend was.
Ich bin mit meiner Frau auf dem Weg nach Nürnberg.

Heute ist Eröffnung vom Christkindlmarkt. :stuck_out_tongue:

Das ist doch völlig in Ordnung so. Abgesehen davon habe ich auch so noch genügend Baustellen - wie immer halt wenn man eine Haussteuerung hat.
Trink für mich einen Glühwein mit.

JAJAJAJAJA :smiley: Herzlichen Dank schon mal im voraus

gruß
goran

Will ich auch.

Gruß MCS-51

Hallo alle zusammen.

Mit leichter Verspätung das Script zum Schreiben von Terminen in den Google-Kalender.

Vorgehensweise:

  • php_openssl.zip runterladen und entpacken.

  • Die php_openssl.dll in „IP-Symcon\ext“ kopieren.
    !!Achtung! Bitte genau diese Datei nehmen.!!

  • Den IP-Symcon Dienst stoppen.

  • Den IP-Symcon Dienst starten.

  • Die Datei Zend.zip runterladen und entpacken.

  • Den kompletten „Zend“-Ordner in „IP-Symcon\scripts“ kopieren.

  • Ein neues Script anlegen und das rein kopieren.


<?
/*=============================================================
skrGoogleKalenderSchreiben - Martin Heinzel - 24.11.2011
Version: 0.1

Beschreibung:
Mit diesem Script werden Termine in den Google Kalender geschrieben.

Wiederholungen:

0  =  keine
1  =  wöchentlich
2  =  14 Tage
3  =  monatlich
4  =  jährlich

Änderungen
----------

tt.mm.jjjj von Version x.x -> y.y

Beschreibung:

================================================================*/

// Variablen Deklaration --------------------------------------

//Bitte anpassen
//---------------------------------------------------------------
$user 							= 'schnucki@googlemail.com'; //-> Email Adresse von Google-Mail
$pass 							= '12345678';                    //-> Passwort der Email Adresse
//---------------------------------------------------------------

// ID's
//--------------
// Kontrolle der ID's
$id_StartDay		      = 	@IPS_GetObjectIDByName("StartDay", $IPS_SELF);
// Wenn es diese Variable noch nicht gibt dann wird das Script
// zum ersten mal aufgerufen und muss eingerichtet werden.
if($id_StartDay === false)
{

	// erstellen der Integer-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "Recur"
   $id_Recur             =  IPS_CreateVariable(1);
	IPS_SetName($id_Recur, "Recur");
	IPS_SetParent($id_Recur, $IPS_SELF);
	SetValueInteger($id_Recur, 0);

	// erstellen der String-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "StartDay"
   $id_StartDay	         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartDay, "StartDay");
	IPS_SetParent($id_StartDay, $IPS_SELF);
	SetValueString($id_StartDay, date("d", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartMonth"
   $id_StartMonth	         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartMonth, "StartMonth");
	IPS_SetParent($id_StartMonth, $IPS_SELF);
	SetValueString($id_StartMonth, date("m", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartYear"
   $id_StartYear           =  IPS_CreateVariable(3);
	IPS_SetName($id_StartYear, "StartYear");
	IPS_SetParent($id_StartYear, $IPS_SELF);
	SetValueString($id_StartYear, date("Y", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartHour"
   $id_StartHour           =  IPS_CreateVariable(3);
	IPS_SetName($id_StartHour, "StartHour");
	IPS_SetParent($id_StartHour, $IPS_SELF);
	SetValueString($id_StartHour, date("H", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartMinute"
   $id_StartMinute         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartMinute, "StartMinute");
	IPS_SetParent($id_StartMinute, $IPS_SELF);
	SetValueString($id_StartMinute, date("i", mktime()+86400));

	//erzeugen und initialisieren der Variablen "EndDay"
   $id_EndDay	         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndDay, "EndDay");
	IPS_SetParent($id_EndDay, $IPS_SELF);
	SetValueString($id_EndDay, date("d", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndMonth"
   $id_EndMonth	         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndMonth, "EndMonth");
	IPS_SetParent($id_EndMonth, $IPS_SELF);
	SetValueString($id_EndMonth, date("m", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndYear"
   $id_EndYear           =  IPS_CreateVariable(3);
	IPS_SetName($id_EndYear, "EndYear");
	IPS_SetParent($id_EndYear, $IPS_SELF);
	SetValueString($id_EndYear, date("Y", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndHour"
   $id_EndHour           =  IPS_CreateVariable(3);
	IPS_SetName($id_EndHour, "EndHour");
	IPS_SetParent($id_EndHour, $IPS_SELF);
	SetValueString($id_EndHour, date("H", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndMinute"
   $id_EndMinute         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndMinute, "EndMinute");
	IPS_SetParent($id_EndMinute, $IPS_SELF);
	SetValueString($id_EndMinute, date("i", mktime()+90000));

	//erzeugen und initialisieren der Variablen "Titel"
   $id_Titel  	          =  IPS_CreateVariable(3);
	IPS_SetName($id_Titel, "Titel");
	IPS_SetParent($id_Titel, $IPS_SELF);
	SetValueString($id_Titel, "Das ist ein Termin von IPS");

	//erzeugen und initialisieren der Variablen "Description"
   $id_Description  	    =  IPS_CreateVariable(3);
	IPS_SetName($id_Description, "Description");
	IPS_SetParent($id_Description, $IPS_SELF);
	SetValueString($id_Description, "Beschreibung für den IPS Testtermin");

	//erzeugen und initialisieren der Variablen "Where"
   $id_Where  	          =  IPS_CreateVariable(3);
	IPS_SetName($id_Where, "Where");
	IPS_SetParent($id_Where, $IPS_SELF);
	SetValueString($id_Where, "Bocholt");

	// erstellen der Bool-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "AllDay"
   $id_AllDay  	         =  IPS_CreateVariable(0);
	IPS_SetName($id_AllDay, "AllDay");
	IPS_SetParent($id_AllDay, $IPS_SELF);
	SetValueBoolean($id_AllDay, False);
	
	// nach dem Anlegen das Script beenden
	return;
}
else
{

   $id_StartMonth       =  IPS_GetObjectIDByName("StartMonth", $IPS_SELF);
   $id_StartYear        =  IPS_GetObjectIDByName("StartYear", $IPS_SELF);
   $id_StartHour        =  IPS_GetObjectIDByName("StartHour", $IPS_SELF);
   $id_StartMinute      =  IPS_GetObjectIDByName("StartMinute", $IPS_SELF);
   $id_EndDay           =  IPS_GetObjectIDByName("EndDay", $IPS_SELF);
   $id_EndMonth         =  IPS_GetObjectIDByName("EndMonth", $IPS_SELF);
   $id_EndYear          =  IPS_GetObjectIDByName("EndYear", $IPS_SELF);
   $id_EndHour          =  IPS_GetObjectIDByName("EndHour", $IPS_SELF);
   $id_EndMinute        =  IPS_GetObjectIDByName("EndMinute", $IPS_SELF);
 	$id_Recur            =  IPS_GetObjectIDByName("Recur", $IPS_SELF);
   $id_Titel            =  IPS_GetObjectIDByName("Titel", $IPS_SELF);
   $id_Description      =  IPS_GetObjectIDByName("Description", $IPS_SELF);
   $id_Where            =  IPS_GetObjectIDByName("Where", $IPS_SELF);
   $id_AllDay           =  IPS_GetObjectIDByName("AllDay", $IPS_SELF);

}


// Variablen
//--------------
$StartDay         =  GetValueString($id_StartDay);
if(strlen($StartDay)< 2)
{
   $StartDay      =  "0".$StartDay;
   SetValueString($id_StartDay, $StartDay);
}

$StartMonth       =  GetValueString($id_StartMonth);
if(strlen($StartMonth)< 2)
{
   $StartMonth      =  "0".$StartMonth;
   SetValueString($id_StartMonth, $StartMonth);
}

$StartYear        =  GetValueString($id_StartYear);
if(strlen($StartYear)< 4)
{
   $StartYear      =  "20".$StartYear;
   SetValueString($id_StartYear, $StartYear);
}

$StartHour        =  GetValueString($id_StartHour);
if(strlen($StartHour)< 2)
{
   $StartHour      =  "0".$StartHour;
   SetValueString($id_StartHour, $StartHour);
}

$StartMinute      =  GetValueString($id_StartMinute);
if(strlen($StartMinute)< 2)
{
   $StartMinute      =  "0".$StartMinute;
   SetValueString($id_StartMinute, $StartMinute);
}

$EndDay           =  GetValueString($id_EndDay);
if(strlen($EndDay)< 2)
{
   $EndDay      =  "0".$EndDay;
   SetValueString($id_EndDay, $EndDay);
}

$EndMonth         =  GetValueString($id_EndMonth);
if(strlen($EndMonth)< 2)
{
   $EndMonth      =  "0".$EndMonth;
   SetValueString($id_EndMonth, $EndMonth);
}

$EndYear          =  GetValueString($id_EndYear);
if(strlen($EndYear)< 4)
{
   $EndYear      =  "20".$EndYear;
   SetValueString($id_EndYear, $EndYear);
}

$EndHour          =  GetValueString($id_EndHour);
if(strlen($EndHour)< 2)
{
   $EndHour      =  "0".$EndHour;
   SetValueString($id_EndHour, $EndHour);
}

$EndMinute        =  GetValueString($id_EndMinute);
if(strlen($EndMinute)< 2)
{
   $EndMinute      =  "0".$EndMinute;
   SetValueString($id_EndMinute, $EndMinute);
}

$Recur            =  GetValueInteger($id_Recur);
$Titel            =  GetValueString($id_Titel);
$Description      =  GetValueString($id_Description);
$Where            =  GetValueString($id_Where);
$AllDay           =  GetValueBoolean($id_AllDay);
$recurData     	=	'';

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
try
{
	$client = getClientLoginHttpClient($user, $pass);
}
catch(Exception $e)
{
	// prevent Google username and password from being displayed
	// if a problem occurs
	echo "Could not connect to calendar.";
	die();
}

// Event schreiben
//================

//Auswahl der Wiederholung
Switch($Recur)
{
	// keine
	case 0:

		//Erzeugen von Start und Endzeiten
	   $startDate     =  $StartYear.'-'.$StartMonth.'-'.$StartDay;
		$endDate		   =  $EndYear.'-'.$EndMonth.'-'.$EndDay;
      $tzOffset      =  '+01';

		if($AllDay)
		{
			$startTime     =  '';
	      $endTime       =  '';
		}
		else
		{
      	$startTime     =  $StartHour.':'.$StartMinute;
      	$endTime       =  $EndHour.':'.$EndMinute;
		}
		
		createEvent ($client, $Titel, $Description, $Where, $startDate, $startTime, $endDate, $endTime, $tzOffset);
		break;
		
	// wöchentlich
	case 1:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//wöchentlicher Termin
		$recurData				= $recurData."RRULE:FREQ=WEEKLY;INTERVAL=1"."
";


		createRecurringEvent ($client, $Titel, $Description, $Where, $recurData);
		break;

	// 14 Tage
	case 2:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//14 Tage Termin
		$recurData				= $recurData."RRULE:FREQ=WEEKLY;INTERVAL=2"."
";

		createRecurringEvent ($client, $Titel, $Description, $Where, $recurData);
		break;

	// monatlich
	case 3:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//monatlicher Termin
		$recurData				= $recurData."RRULE:FREQ=MONTHLY;INTERVAL=1"."
";

		createRecurringEvent ($client, $Titel, $Description, $Where, $recurData);
		break;

	// jährlich
	case 4:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//jährlich Termin
		$recurData				= $recurData."RRULE:FREQ=YEARLY;INTERVAL=1"."
";

		createRecurringEvent ($client, $Titel, $Description, $Where, $recurData);
}

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

/**
 * Returns a HTTP client object with the appropriate headers for communicating
 * with Google using the ClientLogin credentials supplied.
 *
 * @param  string $user The username, in e-mail address format, to authenticate
 * @param  string $pass The password for the user specified
 * @return Zend_Http_Client
 */
function getClientLoginHttpClient($user, $pass)
{
  $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;

  $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  return $client;
}

/**
 * Creates an event on the authenticated user's default calendar with the
 * specified event details.
 *
 * @param  Zend_Http_Client $client    The authenticated client object
 * @param  string           $title     The event title
 * @param  string           $desc      The detailed description of the event
 * @param  string           $where
 * @param  string           $startDate The start date of the event in YYYY-MM-DD format
 * @param  string           $startTime The start time of the event in HH:MM 24hr format
 * @param  string           $endDate   The end date of the event in YYYY-MM-DD format
 * @param  string           $endTime   The end time of the event in HH:MM 24hr format
 * @param  string           $tzOffset  The offset from GMT/UTC in [+-]DD format (eg -08)
 * @return string The ID URL for the event.
 */
function createEvent ($client, $title, $desc, $where,
							 $startDate, $startTime,
							 $endDate, $endTime, $tzOffset)
{
  $gc = new Zend_Gdata_Calendar($client);
  $newEntry = $gc->newEventEntry();
  $newEntry->title = $gc->newTitle(trim($title));
  $newEntry->where  = array($gc->newWhere($where));

  $newEntry->content = $gc->newContent($desc);
  $newEntry->content->type = 'text';

  $when = $gc->newWhen();
  if($startTime == '' and $endTime == '')
  {
	  $when->startTime = $startDate;
	  $when->endTime = $endDate;
  }
  else
  {
  	  $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
     $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
  }
  
  $newEntry->when = array($when);

  $createdEntry = $gc->insertEvent($newEntry);
  return $createdEntry->id->text;
}

/**
 * Creates a recurring event on the authenticated user's default calendar with
 * the specified event details.
 *
 * @param  Zend_Http_Client $client    The authenticated client object
 * @param  string           $title     The event title
 * @param  string           $desc      The detailed description of the event
 * @param  string           $where
 * @param  string           $recurData The iCalendar recurring event syntax (RFC2445)
 * @return void
 */
function createRecurringEvent ($client, $title, $desc, $where, $recurData)
{
  $gc = new Zend_Gdata_Calendar($client);
  $newEntry = $gc->newEventEntry();
  $newEntry->title = $gc->newTitle(trim($title));
  $newEntry->where = array($gc->newWhere($where));

  $newEntry->content = $gc->newContent($desc);
  $newEntry->content->type = 'text';
  $newEntry->recurrence = $gc->newRecurrence($recurData);

  $gc->post($newEntry->saveXML());
}

//--------------------- Funktionen ENDE ------------------------

?>

  • In dem Script „$user“ anpassen. Der User ist deine Google-Mail Adresse
  • In dem Script „$pass“ anpassen. Das ist das Passwort für deine Google-Mail Adresse

Beim ersten Starten des Scripts werden alle benötigten Variablen angelegt.
Beim zweiten Starten des Scripts geht ein Testtermin raus.

Beschreibung der Variablen:

StartDay = Terminstart „Tag“ in zwei Zeichen also: 01 für 1
StartMonth = Terminstart „Monat“ in zwei Zeichen also: 01 für 1
StartYear = Terminstart „Jahr“ in vier Zeichen also: 2011
StartHour = Terminstart „Stunde“ in zwei Zeichen also: 01 für 1
StartMinute = Terminstart „Minute“ in zwei Zeichen also: 01 für 1

EndDay = Terminende „Tag“ in zwei Zeichen also: 01 für 1
EndMonth = Terminende „Monat“ in zwei Zeichen also: 01 für 1
EndYear = Terminende „Jahr“ in vier Zeichen also: 2011
EndHour = Terminende „Stunde“ in zwei Zeichen also: 01 für 1
EndMinute = Terminende „Minute“ in zwei Zeichen also: 01 für 1

Titel = Titel des Termins
Description = Beschreibung des Termins
Where = Ort des Termins

AllDay = True = Ganztagestermin

Recur = Termin-Wiederholung

0= keine
1= wöchentlich
2= 14 Tage
3= monatlich
4= Jährlich

Das wars.

Bei Fragen oder Anregungen bitte melden.

ext.zip (3.86 MB)

Zend.zip (640 KB)

Nette Sache, wenn man google mag. Ich würde jedocj den Post in den ersten Beitrag verschieben, damit man das schöne Skript später leichter findet.

Nettes Feature. Danke Dir fürs bereit stellen.

Klasse Sache, danke Dir. Funktioniert wunderbar. Zuerst bin ich ja ziemlich erschrocken, ist ja ein riesen Skript. Aber wenn man es „aufräumt“ (also alles was für die Installation ist raus schmeißt) wird es auch für mich übersichtlicher.

Noch eine Frage, gibte es eine Möglichkeit, Termine auch im „Nicht-standart-Kalender“ einzutragen?

grüße
goran

Bitte, Bitte.

Ist halt die „Cover my arse version“.

Egentlich wusste ich das die Frage kommt.
Wieder halbe Arbeit abgeliefert. :o

Muss ich prüfen. Ich nutze nur den Standart-Kalender.

Hallo goran,

ich habe das geprüft. Ja das geht.
Du kannst Termine auch in bestimmte Kalender eintragen.

Ich habe das Script geändert.


<?
/*=============================================================
skrGoogleKalenderSchreiben - Martin Heinzel - 24.11.2011
Version: 1.0

Beschreibung:
Mit diesem Script werden Termine in den Google Kalender geschrieben.

Wiederholungen:

0  =  keine
1  =  wöchentlich
2  =  14 Tage
3  =  monatlich
4  =  jährlich

Änderungen
----------

30.11.2011 von Version 0.1 -> 1.0

Beschreibung:

Erste gültige Version des Scripts.
Es wurde noch die Auswahl des Kalenders in dem der Termin eingetragen werden soll
eingefügt. Bleibt der "calendar_user" leer wird der Standard-Kalender genommen.

================================================================*/

// Variablen Deklaration --------------------------------------

//Bitte anpassen
//---------------------------------------------------------------
//Email Adresse von Google-Mail
$user                             = 'schnucki@googlemail.com';
//Passwort der Email Adresse
$pass                             = '12345678';
//Kalender-ID
$calendar_user    			= '';
//---------------------------------------------------------------

// ID's
//--------------
// Kontrolle der ID's
$id_StartDay		      = 	@IPS_GetObjectIDByName("StartDay", $IPS_SELF);
// Wenn es diese Variable noch nicht gibt dann wird das Script
// zum ersten mal aufgerufen und muss eingerichtet werden.
if($id_StartDay === false)
{

	// erstellen der Integer-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "Recur"
   $id_Recur             =  IPS_CreateVariable(1);
	IPS_SetName($id_Recur, "Recur");
	IPS_SetParent($id_Recur, $IPS_SELF);
	SetValueInteger($id_Recur, 0);

	// erstellen der String-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "StartDay"
   $id_StartDay	         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartDay, "StartDay");
	IPS_SetParent($id_StartDay, $IPS_SELF);
	SetValueString($id_StartDay, date("d", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartMonth"
   $id_StartMonth	         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartMonth, "StartMonth");
	IPS_SetParent($id_StartMonth, $IPS_SELF);
	SetValueString($id_StartMonth, date("m", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartYear"
   $id_StartYear           =  IPS_CreateVariable(3);
	IPS_SetName($id_StartYear, "StartYear");
	IPS_SetParent($id_StartYear, $IPS_SELF);
	SetValueString($id_StartYear, date("Y", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartHour"
   $id_StartHour           =  IPS_CreateVariable(3);
	IPS_SetName($id_StartHour, "StartHour");
	IPS_SetParent($id_StartHour, $IPS_SELF);
	SetValueString($id_StartHour, date("H", mktime()+86400));

	//erzeugen und initialisieren der Variablen "StartMinute"
   $id_StartMinute         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartMinute, "StartMinute");
	IPS_SetParent($id_StartMinute, $IPS_SELF);
	SetValueString($id_StartMinute, date("i", mktime()+86400));

	//erzeugen und initialisieren der Variablen "EndDay"
   $id_EndDay	         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndDay, "EndDay");
	IPS_SetParent($id_EndDay, $IPS_SELF);
	SetValueString($id_EndDay, date("d", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndMonth"
   $id_EndMonth	         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndMonth, "EndMonth");
	IPS_SetParent($id_EndMonth, $IPS_SELF);
	SetValueString($id_EndMonth, date("m", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndYear"
   $id_EndYear           =  IPS_CreateVariable(3);
	IPS_SetName($id_EndYear, "EndYear");
	IPS_SetParent($id_EndYear, $IPS_SELF);
	SetValueString($id_EndYear, date("Y", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndHour"
   $id_EndHour           =  IPS_CreateVariable(3);
	IPS_SetName($id_EndHour, "EndHour");
	IPS_SetParent($id_EndHour, $IPS_SELF);
	SetValueString($id_EndHour, date("H", mktime()+90000));

	//erzeugen und initialisieren der Variablen "EndMinute"
   $id_EndMinute         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndMinute, "EndMinute");
	IPS_SetParent($id_EndMinute, $IPS_SELF);
	SetValueString($id_EndMinute, date("i", mktime()+90000));

	//erzeugen und initialisieren der Variablen "Titel"
   $id_Titel  	          =  IPS_CreateVariable(3);
	IPS_SetName($id_Titel, "Titel");
	IPS_SetParent($id_Titel, $IPS_SELF);
	SetValueString($id_Titel, "Das ist ein Termin von IPS");

	//erzeugen und initialisieren der Variablen "Description"
   $id_Description  	    =  IPS_CreateVariable(3);
	IPS_SetName($id_Description, "Description");
	IPS_SetParent($id_Description, $IPS_SELF);
	SetValueString($id_Description, "Beschreibung für den IPS Testtermin");

	//erzeugen und initialisieren der Variablen "Where"
   $id_Where  	          =  IPS_CreateVariable(3);
	IPS_SetName($id_Where, "Where");
	IPS_SetParent($id_Where, $IPS_SELF);
	SetValueString($id_Where, "Bocholt");

	// erstellen der Bool-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "AllDay"
   $id_AllDay  	         =  IPS_CreateVariable(0);
	IPS_SetName($id_AllDay, "AllDay");
	IPS_SetParent($id_AllDay, $IPS_SELF);
	SetValueBoolean($id_AllDay, False);
	
	// nach dem Anlegen das Script beenden
	return;
}
else
{

   $id_StartMonth       =  IPS_GetObjectIDByName("StartMonth", $IPS_SELF);
   $id_StartYear        =  IPS_GetObjectIDByName("StartYear", $IPS_SELF);
   $id_StartHour        =  IPS_GetObjectIDByName("StartHour", $IPS_SELF);
   $id_StartMinute      =  IPS_GetObjectIDByName("StartMinute", $IPS_SELF);
   $id_EndDay           =  IPS_GetObjectIDByName("EndDay", $IPS_SELF);
   $id_EndMonth         =  IPS_GetObjectIDByName("EndMonth", $IPS_SELF);
   $id_EndYear          =  IPS_GetObjectIDByName("EndYear", $IPS_SELF);
   $id_EndHour          =  IPS_GetObjectIDByName("EndHour", $IPS_SELF);
   $id_EndMinute        =  IPS_GetObjectIDByName("EndMinute", $IPS_SELF);
 	$id_Recur            =  IPS_GetObjectIDByName("Recur", $IPS_SELF);
   $id_Titel            =  IPS_GetObjectIDByName("Titel", $IPS_SELF);
   $id_Description      =  IPS_GetObjectIDByName("Description", $IPS_SELF);
   $id_Where            =  IPS_GetObjectIDByName("Where", $IPS_SELF);
   $id_AllDay           =  IPS_GetObjectIDByName("AllDay", $IPS_SELF);

}


// Variablen
//--------------
$StartDay         =  GetValueString($id_StartDay);
if(strlen($StartDay)< 2)
{
   $StartDay      =  "0".$StartDay;
   SetValueString($id_StartDay, $StartDay);
}

$StartMonth       =  GetValueString($id_StartMonth);
if(strlen($StartMonth)< 2)
{
   $StartMonth      =  "0".$StartMonth;
   SetValueString($id_StartMonth, $StartMonth);
}

$StartYear        =  GetValueString($id_StartYear);
if(strlen($StartYear)< 4)
{
   $StartYear      =  "20".$StartYear;
   SetValueString($id_StartYear, $StartYear);
}

$StartHour        =  GetValueString($id_StartHour);
if(strlen($StartHour)< 2)
{
   $StartHour      =  "0".$StartHour;
   SetValueString($id_StartHour, $StartHour);
}

$StartMinute      =  GetValueString($id_StartMinute);
if(strlen($StartMinute)< 2)
{
   $StartMinute      =  "0".$StartMinute;
   SetValueString($id_StartMinute, $StartMinute);
}

$EndDay           =  GetValueString($id_EndDay);
if(strlen($EndDay)< 2)
{
   $EndDay      =  "0".$EndDay;
   SetValueString($id_EndDay, $EndDay);
}

$EndMonth         =  GetValueString($id_EndMonth);
if(strlen($EndMonth)< 2)
{
   $EndMonth      =  "0".$EndMonth;
   SetValueString($id_EndMonth, $EndMonth);
}

$EndYear          =  GetValueString($id_EndYear);
if(strlen($EndYear)< 4)
{
   $EndYear      =  "20".$EndYear;
   SetValueString($id_EndYear, $EndYear);
}

$EndHour          =  GetValueString($id_EndHour);
if(strlen($EndHour)< 2)
{
   $EndHour      =  "0".$EndHour;
   SetValueString($id_EndHour, $EndHour);
}

$EndMinute        =  GetValueString($id_EndMinute);
if(strlen($EndMinute)< 2)
{
   $EndMinute      =  "0".$EndMinute;
   SetValueString($id_EndMinute, $EndMinute);
}

$Recur            =  GetValueInteger($id_Recur);
$Titel            =  GetValueString($id_Titel);
$Description      =  GetValueString($id_Description);
$Where            =  GetValueString($id_Where);
$AllDay           =  GetValueBoolean($id_AllDay);
$recurData     	=	'';

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
try
{
	$client = getClientLoginHttpClient($user, $pass);
}
catch(Exception $e)
{
	// prevent Google username and password from being displayed
	// if a problem occurs
	echo "Could not connect to calendar.";
	die();
}

// Event schreiben
//================

//Auswahl der Wiederholung
Switch($Recur)
{
	// keine
	case 0:

		//Erzeugen von Start und Endzeiten
	   $startDate     =  $StartYear.'-'.$StartMonth.'-'.$StartDay;
		$endDate		   =  $EndYear.'-'.$EndMonth.'-'.$EndDay;
      $tzOffset      =  '+01';

		if($AllDay)
		{
			$startTime     =  '';
	      $endTime       =  '';
		}
		else
		{
      	$startTime     =  $StartHour.':'.$StartMinute;
      	$endTime       =  $EndHour.':'.$EndMinute;
		}
		
		createEvent ($client, $calendar_user, $Titel, $Description, $Where, $startDate, $startTime, $endDate, $endTime, $tzOffset);
		break;
		
	// wöchentlich
	case 1:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//wöchentlicher Termin
		$recurData				= $recurData."RRULE:FREQ=WEEKLY;INTERVAL=1"."
";


		createRecurringEvent ($client, $calendar_user, $Titel, $Description, $Where, $recurData);
		break;

	// 14 Tage
	case 2:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//14 Tage Termin
		$recurData				= $recurData."RRULE:FREQ=WEEKLY;INTERVAL=2"."
";

		createRecurringEvent ($client, $calendar_user, $Titel, $Description, $Where, $recurData);
		break;

	// monatlich
	case 3:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//monatlicher Termin
		$recurData				= $recurData."RRULE:FREQ=MONTHLY;INTERVAL=1"."
";

		createRecurringEvent ($client, $calendar_user, $Titel, $Description, $Where, $recurData);
		break;

	// jährlich
	case 4:

		if($AllDay)
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."
";
		}
		else
		{
			//Startzeit
			$recurData				= $recurData."DTSTART;TZID=Europe/Berlin:".$StartYear.$StartMonth.$StartDay."T".$StartHour.$StartMinute."00"."
";
			//Endzeit
			$recurData				= $recurData."DTEND;TZID=Europe/Berlin:".$EndYear.$EndMonth.$EndDay."T".$EndHour.$EndMinute."00"."
";
		}

		//jährlich Termin
		$recurData				= $recurData."RRULE:FREQ=YEARLY;INTERVAL=1"."
";

		createRecurringEvent ($client, $calendar_user, $Titel, $Description, $Where, $recurData);
}

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

/**
 * Returns a HTTP client object with the appropriate headers for communicating
 * with Google using the ClientLogin credentials supplied.
 *
 * @param  string $user The username, in e-mail address format, to authenticate
 * @param  string $pass The password for the user specified
 * @return Zend_Http_Client
 */
function getClientLoginHttpClient($user, $pass)
{
  $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;

  $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  return $client;
}

/**
 * Creates an event on the authenticated user's default calendar with the
 * specified event details.
 *
 * @param  Zend_Http_Client $client    The authenticated client object
 * @param  string           $title     The event title
 * @param  string           $desc      The detailed description of the event
 * @param  string           $where
 * @param  string           $startDate The start date of the event in YYYY-MM-DD format
 * @param  string           $startTime The start time of the event in HH:MM 24hr format
 * @param  string           $endDate   The end date of the event in YYYY-MM-DD format
 * @param  string           $endTime   The end time of the event in HH:MM 24hr format
 * @param  string           $tzOffset  The offset from GMT/UTC in [+-]DD format (eg -08)
 * @return string The ID URL for the event.
 */
function createEvent ($client, $calendar_user, $title, $desc, $where,
							 $startDate, $startTime,
							 $endDate, $endTime, $tzOffset)
{
  $gc = new Zend_Gdata_Calendar($client);
  $newEntry = $gc->newEventEntry();
  $newEntry->title = $gc->newTitle(trim($title));
  $newEntry->where  = array($gc->newWhere($where));

  $newEntry->content = $gc->newContent($desc);
  $newEntry->content->type = 'text';

  $when = $gc->newWhen();
  if($startTime == '' and $endTime == '')
  {
	  $when->startTime = $startDate;
	  $when->endTime = $endDate;
  }
  else
  {
  	  $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
     $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
  }
  
  $newEntry->when = array($when);

  if($calendar_user == '')
  {
	  $createdEntry = $gc->insertEvent($newEntry);
  }
  else
  {
	  $createdEntry = $gc->insertEvent($newEntry, "http://www.google.com/calendar/feeds/$calendar_user/private/full");
  }

  return $createdEntry->id->text;
}

/**
 * Creates a recurring event on the authenticated user's default calendar with
 * the specified event details.
 *
 * @param  Zend_Http_Client $client    The authenticated client object
 * @param  string           $title     The event title
 * @param  string           $desc      The detailed description of the event
 * @param  string           $where
 * @param  string           $recurData The iCalendar recurring event syntax (RFC2445)
 * @return void
 */
function createRecurringEvent ($client, $calendar_user, $title, $desc, $where, $recurData)
{
  $gc = new Zend_Gdata_Calendar($client);
  $newEntry = $gc->newEventEntry();
  $newEntry->title = $gc->newTitle(trim($title));
  $newEntry->where = array($gc->newWhere($where));

  $newEntry->content = $gc->newContent($desc);
  $newEntry->content->type = 'text';
  $newEntry->recurrence = $gc->newRecurrence($recurData);

  if($calendar_user == '')
  {
	  $gc->post($newEntry->saveXML());
  }
  else
  {
	  $gc->post($newEntry->saveXML(), "http://www.google.com/calendar/feeds/$calendar_user/private/full");
  }

}

//--------------------- Funktionen ENDE ------------------------

?>

Du must noch zusätzlich die Kalender-ID bei der Variablen $calendar_user eintragen. Bleibt die Variable leer wird der Standard-Kalender genommen.

Die Kalender-ID findest Du in den Einstellungen deines Kalenders.
Siehe Screenshots. Einfach Copy-Paste.

Calender_User1.png

Hallo Martin.

Script wird ohne Fehler ausgeführt, Variablen angelegt, der Testtermin im Kalender eingetragen. Auch wird er auf mein Smartphone synchronisiert.

Jetzt die dumme Frage: Wie benutze ich Dein Script weiter? Im WFE habe ich mir einen Link auf das Script eingerichtet. Ausführbar ist es auch. Und nun? Soll da noch ein Grid erscheinen, die bei Google auch? Oder befülle ich die Variablen nur mit meinen Daten?

Vermutung nun: Es soll tatsächlich „nur“ die Werte in den Var. in den Kalender schreiben, oder? Also vorher befüllen, dann Script ausführen.

Ja. So hatte ich mir das gedacht.
Die Variablen ins Webfront,
Dash bei mir VB.net und nach Eingabe
Script starten.

Wo ich noch mit dran bin ist ein Monats und Jahrekalender.

Mehr wird es aber nicht geben.
Dafür gibt es dann dein Handy oder Thunderbird.

Hallo alle zusammen.

Wie versprochen kommt hier der Monatskalender für den aktuellen Monat.


<?
/*=============================================
skrGoogleMonatskalender - Martin Heinzel - 29.11.2011
Version: 0.1

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------
// Bitte anpassen
// Variablen
//--------------
$user 							= 'schnucki@googlemail.com';
$pass 							= '12345';
$magicCookie   				= 'e4d7b12345678f6adf49fb151a38d5d31';
$arrEvent_Time             = array();
$arrEvent_Titel            = array();
//-------------------------------------------------------------

//benötigte Funktionen/Klassen
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
try
{
	$client = getClientLoginHttpClient($user, $pass);
}
catch(Exception $e)
{
	// prevent Google username and password from being displayed
	// if a problem occurs
	echo "Could not connect to calendar.";
	die();
}

// Event lesen
//==============

// Event ab dem aktuellem Datum
$start_date = date("Y-m")."-01";
$end_date = date("Y-m")."-".date('t');

// Eine neue Instanz der Kalender Klasse anlegen
$gdataCal = new Zend_Gdata_Calendar($client);

// Eine neue Suchanfrage
$query = $gdataCal->newEventQuery();


// Übergeben der Daten der Suchanfrage
$query->setUser($user);
$query->setVisibility('private-'.$magicCookie);
$query->setSingleEvents(true);
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setSortOrder('ascending');
$query->setMaxResults(30);
$query->setStartMin($start_date);
$query->setStartMax($end_date);

// Die Suchanfrage ausführen
$event_list = $gdataCal->getCalendarEventFeed($query);

foreach ($event_list as $event)
{
	// title
	$arrEvent_Titel[]	=	$event->title;

	// Auslesen der Startzeit
	$Date_Time = $event->when[0]->startTime;

	// Zerlegen der Startzeit
	if(strpos($Date_Time, "T")>0)
	{
		$arrDate_Time 			= 	explode("T", $Date_Time);
		$arrEvent_Time[] 		=  $arrDate_Time[0];
	}
	else
	{
	   $arrEvent_Time[] 		=  $Date_Time;
	}

}

$month   =  date('n');
$browser = calender_month($month, $arrEvent_Time);
SetValue(CreateVariableByName($IPS_SELF, "Monatskalender", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

/**
 * Returns a HTTP client object with the appropriate headers for communicating
 * with Google using the ClientLogin credentials supplied.
 *
 * @param  string $user The username, in e-mail address format, to authenticate
 * @param  string $pass The password for the user specified
 * @return Zend_Http_Client
 */
function getClientLoginHttpClient($user, $pass)
{
  $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;

  $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  return $client;
}

function calender_month($month, $arrEvent_Time)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google
Kalender in  Form eines  Farbumschlag. Der aktuelle
Tag wird  an hand eines  gesonderten Farbumschlages
dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$key          = $month -1;
$year         = date('Y');
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe der Termine
$Style_Appointment   = 'bgcolor="#800080"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F9F1C9';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
$Monatskalender ='<table border="1" summary="Kalender '.$arr_Month[$key].'">
<tr>
      <th colspan="7" '.$Style_MonthHeader.'>'.$arr_Month[$key].'</th>
</tr>
<tr>'.$DayHeader.'</tr>';

//wie viele Tage hat dieser Monat
$total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
//an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
if($day_offset < 0)
{
    $day_offset = 6;
}

//initialisieren des Tageszählers
$Day_Count = 1;

//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
for($week = 0; $week < 6; $week++)
{
    $Monatskalender .='<tr>';

    //eine Woche hat immer noch 7 Tage
    for($day = 0; $day < 7; $day++)
    {
        //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
        if($day_offset > 0)
        {
            $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
         	$day_offset -= 1;
        }
        else
        {
            //ausfüllen der Tage mit Tageszahlen
            if($Day_Count <= $total_days)
            {
                //Der aktuelle Tag wird eingefärbt
                if($month == $act_month and $Day_Count == $act_day)
                {
                    $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                }
                else
                {
     						//Tage mit einem Termin werden eingefärbt
     						$StartDay      =  $Day_Count;
							if(strlen($StartDay)< 2)		$StartDay      =  "0".$StartDay;

                     $StartMonth    =  $month;
							if(strlen($StartMonth)< 2)		$StartMonth    =  "0".$StartMonth;

							$Appointment   		=  False;
                     $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

                     foreach ($arrEvent_Time as $Event_Time)
							{
								If($Event_Time == $Appointment_Time)   $Appointment   		=  True;
							}

                    if($Appointment)
                    {
                        $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //alle anderen Tagen sind ohne färbung
                        $Monatskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                    }
                }
                $Day_Count += 1;
            }
            else
            {
                //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
            }

        }
    }
    //Ende der Wochenreihe
    $Monatskalender .='</tr>';
}
//Ende des Monats
$Monatskalender .='</table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Monatskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>

Es muss angepasst werden:

  • In dem Script „$user“ anpassen. Der User ist deine Google-Mail Adresse
  • In dem Script „$pass“ anpassen. Das ist das Passwort für deine Google-Mail Adresse
  • In dem Script „$magicCookie“ anpassen. Magic Cookie in Google herausfinden (Einstellungen -> Kalender -> Kalendername anklicken -> Privatadresse -> XML -> Cookie rauskopieren).

Der Kalender ist in der Variablen „Monatskalender“ und kann so angezeigt werden.

Das wars.

Bei Fragen oder Anregungen bitte melden.

und hier der Jahreskalender.


<?
/*=============================================
skrGoogleJahreskalender - Martin Heinzel - 02.12.2011
Version: 0.1

Beschreibung:
Mit diesem Skript wird ein Jahreskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
// Bitte anpassen
// Variablen
//--------------
$user                             = 'schnucki@googlemail.com';
$pass                             = '12345';
$magicCookie                   = 'e4d7b12345678f6adf49fb151a38d5d31'; 
$arrEvent_Time             = array();
$arrEvent_Titel            = array();
//-------------------------------------------------------------

//benötigte Funktionen/Klassen
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
try
{
	$client = getClientLoginHttpClient($user, $pass);
}
catch(Exception $e)
{
	// prevent Google username and password from being displayed
	// if a problem occurs
	echo "Could not connect to calendar.";
	die();
}

// Event lesen
//==============

// Event ab dem aktuellem Datum
$start_date = date("Y")."-01"."-01";
$end_date = date("Y")."-12"."-31";

// Eine neue Instanz der Kalender Klasse anlegen
$gdataCal = new Zend_Gdata_Calendar($client);

// Eine neue Suchanfrage
$query = $gdataCal->newEventQuery();


// Übergeben der Daten der Suchanfrage
$query->setUser($user);
$query->setVisibility('private-'.$magicCookie);
$query->setSingleEvents(true);
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setSortOrder('ascending');
$query->setMaxResults(365);
$query->setStartMin($start_date);
$query->setStartMax($end_date);

// Die Suchanfrage ausführen
$event_list = $gdataCal->getCalendarEventFeed($query);

foreach ($event_list as $event)
{
	// title
	$arrEvent_Titel[]	=	$event->title;

	// Auslesen der Startzeit
	$Date_Time = $event->when[0]->startTime;

	// Zerlegen der Startzeit
	if(strpos($Date_Time, "T")>0)
	{
		$arrDate_Time 			= 	explode("T", $Date_Time);
		$arrEvent_Time[] 		=  $arrDate_Time[0];
	}
	else
	{
	   $arrEvent_Time[] 		=  $Date_Time;
	}

}

$browser = calender_year($arrEvent_Time);
SetValue(CreateVariableByName($IPS_SELF, "Jahreskalender", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

/**
 * Returns a HTTP client object with the appropriate headers for communicating
 * with Google using the ClientLogin credentials supplied.
 *
 * @param  string $user The username, in e-mail address format, to authenticate
 * @param  string $pass The password for the user specified
 * @return Zend_Http_Client
 */
function getClientLoginHttpClient($user, $pass)
{
  $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;

  $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  return $client;
}

function calender_year($arrEvent_Time)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Jahreskalender erstellt.
Dieser Kalender enthält alle Termine aus der
Ferengi-Master Terminverwaltung in Form eines Farbumschlag.
Der aktuelle Tag wird an hand eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$rawCount_Month = 0;
$year         = date('Y');
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe der Termine
$Style_Appointment   = 'bgcolor="#800080"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F9F1C9';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen des Jahreskalenders beginnend mit der Monatsaufteilung
$Jahreskalender = '<table border="0" summary="Jahreskalender" ><tr>';

//durchlaufen der einzelnen Monate
foreach($arr_Month as $key => $Month)
{
    //erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
    $Jahreskalender .='<td><table border="1" summary="Kalender '.$Month.'">
   <tr>
       <th colspan="7" '.$Style_MonthHeader.'>'.$Month.'</th>
   </tr>
   <tr>'.$DayHeader.'</tr>';

    //berechnen des aktuellen Monats
    $month = $key+1;
    //wie viele Tage hat dieser Monat
   $total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
   //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
    $day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
    //Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
    if($day_offset < 0)
    {
      $day_offset = 6;
    }

    //initialisieren des Tageszählers
   $Day_Count = 1;

    //ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
    for($week = 0; $week < 6; $week++)
    {
        $Jahreskalender .='<tr>';

        //eine Woche hat immer noch 7 Tage
        for($day = 0; $day < 7; $day++)
        {
            //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
            if($day_offset > 0)
            {
                $Jahreskalender .='<td '.$Style_DayCell.'>*</td>';
            $day_offset -= 1;
            }
            else
            {
                //ausfüllen der Tage mit Tageszahlen
                if($Day_Count <= $total_days)
                {
                    //Der aktuelle Tag wird eingefärbt
                    if($month == $act_month and $Day_Count == $act_day)
                    {
                        $Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //Tage mit einem Termin werden eingefärbt
        						 $StartDay      =  $Day_Count;
								 if(strlen($StartDay)< 2)		$StartDay      =  "0".$StartDay;

	                      $StartMonth    =  $month;
								 if(strlen($StartMonth)< 2)		$StartMonth    =  "0".$StartMonth;

								 $Appointment   		=  False;
	                      $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

	                      foreach ($arrEvent_Time as $Event_Time)
								 {
									 If($Event_Time == $Appointment_Time)   $Appointment   		=  True;
								 }

  	                     if($Appointment)
                        {
                            $Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                        }
                        else
                        {
                            //alle anderen Tagen sind ohne färbung
                            $Jahreskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                        }
                    }
                    $Day_Count += 1;
                }
                else
                {
                    //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                    $Jahreskalender .='<td '.$Style_DayCell.'>*</td>';
                }

            }
        }
        //Ende der Wochenreihe
        $Jahreskalender .='</tr>';
    }
    //Ende des Monats
    $Jahreskalender .='</table></td>';

    //aufaddieren der Monate in einer Reihe
   $rawCount_Month += 1;
   //nach 4 Monaten wird eine neue Monatsreihe begonnen
    if($rawCount_Month == 4)
    {
        $Jahreskalender .='</tr><tr>';
      $rawCount_Month = 0;
    }
}
//Beenden des Jahreskalenders
$Jahreskalender .= '</tr></table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Jahreskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>


Der Kalender ist in der Variablen „Jahreskalender“ und kann so angezeigt werden.

Genau was ich gesucht habe.

Ich kriegs nur nicht zu laufen: Meldung: „could not connect to calendar“.
$user und $pass sind die mit denen ich mich in google einloggen kann. Hier nimmt er es anscheinend aber nicht?

was mache ich falsch?:confused:

Hast Du alles aus Beitrag #7 gemacht?

Vorgehensweise:

  • php_openssl.rar runterladen und entpacken.

  • Die php_openssl.dll in „IP-Symcon\ext“ kopieren.

  • In die php.ini diese Zeile einfügen:
    Zitat:
    extension = php_openssl.dll
    Achtung! Bitte genau diese Datei nehmen.

  • Die php.ini abspeichern.

  • Den IP-Symcon Dienst stoppen.

  • Den IP-Symcon Dienst starten.

  • Die Datei Zend.zip runterladen und entpacken.

  • Den kompletten „Zend“-Ordner in „IP-Symcon\scripts“ kopieren.

Herzlichen Dank dafür. Hoffe ich habe bald mal Zeit das alles auszuprobieren. Und der Jahreskalender ist auch klasse :slight_smile:

gruß
goran

Ich denke schon…

kann das ggf. an 2.5 liegen (hab die beta schon drauf) ?