Hallo alle zusammen.
Aus gegebenen Anlass habe ich hier ein Script, das die Termine aus mehreren Google-Kalendern liest,
nach Datum und Uhrzeit sortiert und in einer Variablen ausgibt. Diese Variable kann dann so im Webfront angezeigt werden.
Vorgehensweise:
- Aus dem Beitrag #7 die php_openssl.zip runterladen und entpacken.
- Die php_openssl.dll in „IP-Symcon\ext“ kopieren.
- Den IP-Symcon Dienst stoppen.
- Den IP-Symcon Dienst starten.
- Danach sollte IPS die Datei php_openssl.dll in der php.ini eingetragen haben.
- Aus dem Beitrag #7 die Datei Zend.zip runterladen und entpacken.
- Den kompletten „Zend“-Ordner in „IP-Symcon\scripts“ kopieren.
Ein neues Script anlegen und das rein kopieren.
<?
/*=============================================================
skrGoogleKalenderLesen - Martin Heinzel - 01.05.2012
Version: 1.0
Beschreibung:
Mit diesem Script werden die nächsten "X" Termine aus den Google Kalendern
gelesen.
Änderungen
----------
07.06.2012 von Version 0.1 -> 1.0
Beschreibung:
Erste Version des Scriptes. Geändert wurde:
- Es werden nun Start und Endzeit angegeben.
- Bei ganztägigen Terminen steht anstelle der Zeit der Text „Ganztägig“
- Vor dem Termin steht in eckigen Klammern der Kalender, aus dem der Termin ist.
Die Anzahl der angezeigten Zeichen des Kalendernamens kann eingestellt werden.
================================================================*/
//#################################### Bitte einstellen #####################################################################
$user = '0815blubber@googlemail.com'; //Google E-Mail
$pass = '12345'; //Passwort
$message_count = 10; //Anzahl der Meldungen
$whoCounts = 3; //Anzahl der dargestellten Zeichen des Kalenders
// Kalender-ID => MagicCookie
$calendar_login = array('0815blubber@googlemail.com' => 'e4d7b4567890f6adf49fb151a38d5d31',
'9fi4ch8npcftzhnjsbi0s3tkhs@group.calendar.google.com' => 'bbf5b3123dcb777a5a1fd9c0a432d834');
//###########################################################################################################################
// Variablen Deklaration --------------------------------------
// Variablen
//--------------
$StartTimes = array();
$EndTimes = array();
$Titles = 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
//==============
$start_date = date("Y-m-d"); // Event ab dem aktuellem Datum
$gdataCal = new Zend_Gdata_Calendar($client); // Eine neue Instanz der Kalender Klasse anlegen
$query = $gdataCal->newEventQuery(); // Eine neue Suchanfrage
// Die einzelnen Kalender abfragen
foreach ($calendar_login as $calendar_user => $magicCookie)
{
// Übergeben der Daten der Suchanfrage
$query->setUser($calendar_user);
$query->setVisibility('private-'.$magicCookie);
$query->setSingleEvents(true);
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setSortOrder('ascending');
$query->setMaxResults($message_count);
$query->setStartMin($start_date);
// Die Suchanfrage ausführen
$event_list = $gdataCal->getCalendarEventFeed($query);
// Das Ergebnis durchsuchen
foreach ($event_list as $event)
{
$who = utf8_decode($event->who[0]);
$who_substr = substr($who, 0, $whoCounts);
//Auslesen der Daten
$StartTimes[] = EventTime_to_TimeStamp($event->when[0]->startTime);
$EndTimes[] = EventTime_to_TimeStamp($event->when[0]->endTime);
$Titles[] = "[".$who_substr."] ".utf8_decode($event->title);
}
}
array_multisort($StartTimes,SORT_ASC,$Titles,$EndTimes); //Arrays sortieren
$count = count($StartTimes); //Anzahl der Termine
//Max Schleifenzählers
if($count <= $message_count){ $i = $count; }
else { $i = $message_count; }
$sz = 0; //Schleifenzähler
//Terminanzeige zusammenbauen
$event_display = ""; // Initialisieren der Anzeige
while($sz < $i)
{
//Abfrage ganztägiger Termin
if(Date("H:i:s",(int)$StartTimes[$sz]) === "00:00:00")
{
$event_display .= Date("d.m.Y",(int)$StartTimes[$sz])." --- Ganztägig --- ".$Titles[$sz]."
";
}
else
{
$event_display .= Date("d.m.Y H:i:s",(int)$StartTimes[$sz])." - ".Date("H:i:s",(int)$EndTimes[$sz])." ".$Titles[$sz]."
";
}
$sz++;
}
//echo $event_display;
SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~TextBox"), $event_display);
//------------------------- 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 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;
}
/**
* Returns a timestamp of the Google event Time
*
* @param string $eventTime The Google event Time in "2010-06-11T07:30:00.000-07:00"
* @return int Timestamp of the Google event Time
*/
function EventTime_to_TimeStamp($eventTime)
{
// Zerlegen der Startzeit
if(strpos($eventTime, "T")>0)
{
//Datum
$arrDate_Time = explode("T", $eventTime);
$Date = $arrDate_Time[0];
$arrDate = explode("-", $Date);
$term_jahr = (int)$arrDate[0];
$term_monat = (int)$arrDate[1];
$term_tag = (int)$arrDate[2];
//Uhrzeit
$arrTime = explode("+", $arrDate_Time[1]);
$Time = substr($arrTime[0], 0, 8);
$arrTimeVal = explode(":", $Time);
$term_Stunde = (int)$arrTimeVal[0];
$term_Minute = (int)$arrTimeVal[1];
$term_Sekunde = (int)$arrTimeVal[2];
}
else
{
//Datum
$arrDate = explode("-", $eventTime);
$term_jahr = (int)$arrDate[0];
$term_monat = (int)$arrDate[1];
$term_tag = (int)$arrDate[2];
//Uhrzeit
$term_Stunde = 0;
$term_Minute = 0;
$term_Sekunde = 0;
}
return mktime($term_Stunde, $term_Minute, $term_Sekunde, $term_monat, $term_tag, $term_jahr);
}
//--------------------- 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.
- In dem Script „$message_count“ anpassen. Das ist die Anzahl der Meldungen, die gelesen werden sollen.
- In dem Script „$whoCounts“ anpassen. Das ist die Anzahl der dargestellten Zeichen des Kalendernamens.
- In dem Script „$calendar_login“ anpassen. Diese Variable ist ein Array und kann beliebig erweitert werden.
Sie besteht aus den Pärchen Kalender-ID (key) und dazugehörigem MagicCookie (value).
Jeder angelegte Kalender in Google hat dieses Pärchen Kalender-ID und MagicCookie.
So komme ich an diese Daten.
Ihr müsst Euch in Google einloggen und zu Kalender gehen.
Die Kalender-ID findest Du in den Einstellungen deines Kalenders.
Kalender-ID:
MagicCookie:
Ihr müsst den MagicCookie ohne „private-“ nehmen!!
Nach dem ausführen des Scripts sollten die Termine in der Variable „Kalender“ stehen.
Wenn noch Fragen sind meldet Euch bitte.