Hallo Zusammen
anbei das Script was aktuell bei mir läuft. Wobei das Script nicht von mir persönlich ist.
Habe das Script hier im Forum gefunden und umgebaut bzw. angepasst.
<?
/*=============================================================
skrGoogleKalenderLesen - Martin Heinzel - 01.05.2012
Version: 2.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.
27.11.2014 von Version 1.0 -> 2.0
Beschreibung:
Script wurde angepasst auf die Google Kalender API V3
================================================================*/
//#################################### Bitte einstellen #####################################################################
$Client_ID = "4654213511-q04rbdr3ckadb9fkpaji59vta5n40lq4.apps.googleusercontent.com";
$EMail = "455465464864021-q04rbdr3ckadb9fkpaji59vta5n40lq4@developer.gserviceaccount.com";
$key_file_location = IPS_GetKernelDir()."scripts\\certificates\\IPS-Kalender-9de3f4b5ae3c.p12";
$calendar_login = array('E-MAil@googlemail.com',);
$message_count = 16; //Anzahl der Meldungen
$whoCounts = 3; //Anzahl der dargestellten Zeichen des Kalenders
//Hier die Farbe für die ShortCuts angeben
$SC_Farbe[1] = "gray";
$SC_Farbe[2] = "#00AD00";
$SC_Farbe[3] = "darkred";
$SC_Farbe[4] = "lightblue";
//Hier den Style wählen
$blinkToday = false; // (true/false) blinken des heutigen Kalendereintrages An/Aus
/******** Farbnamen, RGB-Formatierung, Hex-Zahlen möglich *********/
$StyleText[1] = "white"; // Textfarbe Datum
$StyleText[2] = "gray"; // Textfarbe Wochentag
/*** xx-small, x-small, small, normal, large, x-large, xx-large ***/
/************** oder Angabe in pt - z.B. "12pt" *******************/
$StyleText[3] = "large"; // Textgröße Datum
$StyleText[4] = "normal"; // Textgröße Wochentag
$StyleText[5] = "normal"; // Textgröße Eintrag
//###########################################################################################################################
// Variablen Deklaration --------------------------------------
// Variablen
//--------------
$StartTimes = array();
$EndTimes = array();
$Titles = array();
//-------------------------------------------------------------
//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';
//--------------------------- Main ----------------------------
// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("IPS");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);
// Wochentage auf Deutsch
$tag[0] = "Sonntag";
$tag[1] = "Montag";
$tag[2] = "Dienstag";
$tag[3] = "Mittwoch";
$tag[4] = "Donnerstag";
$tag[5] = "Freitag";
$tag[6] = "Samstag";
$deco = "";
if($blinkToday)$deco = "blink";
$calDataTxt = "<table style='border-spacing:0px; width:100%'>"; // Starte Tabellenansicht
$check_date = "";
// Event lesen
//==============
// Die einzelnen Kalender abfragen
foreach ($calendar_login as $Calender_ID)
{
// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' => True,
'timeMin' => (new DateTime())->format(DateTime::RFC3339),
'orderBy' => 'startTime',
'maxResults' => $message_count);
// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);
// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
// print_r($event);
// Auslesen der Startzeit
If($event->getStart()->dateTime <> "")
{
$Date_Time_Start = $event->getStart()->dateTime;
$Date_Time_End = $event->getEnd()->dateTime;
}
else
{
$Date_Time_Start = $event->getStart()->date;
$Date_Time_End = $event->getEnd()->date;
}
$StartTimes[] = EventTime_to_TimeStamp($Date_Time_Start);
$EndTimes[] = EventTime_to_TimeStamp($Date_Time_End);
$who = utf8_decode($event->getOrganizer()->displayName);
$who_substr = substr($who, 0, $whoCounts);
$Titles[] = " ".utf8_decode($event->getSummary());
}
}
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
// Starte Tabellenansicht
$event_display = "<table style='border-spacing:0px; width:100%'>";
while($sz < $i)
{
$Startzeit = Date("H:i",(int)$StartTimes[$sz]);
$Endzeit= Date("H:i",(int)$EndTimes[$sz]);
$StartDatum = Date("d.m.Y",(int)$StartTimes[$sz]);
$EndDatum = Date("d.m.Y",(int)$EndTimes[$sz]);
$Beschreibung = $Titles[$sz];
if(Date("d.m.Y",(int)$EndTimes[$sz]) != date("d.m.Y", strtotime("yesterday"))){
If($check_date != "" and Date("d.m.Y",(int)$StartTimes[$sz]) != $check_date){
$event_display .= "</table></th></tr>";}
If(Date("d.m.Y",(int)$StartTimes[$sz]) != $check_date){
If(Date("d.m.Y",(int)$StartTimes[$sz]) == date("d.m.Y")){
$headerTxt = "Heute:<br>";}
elseif(Date("d.m.Y",(int)$StartTimes[$sz]) == date("d.m.Y", strtotime("+1 day"))){
$headerTxt = "Morgen:";
}else{
$headerTxt = Date("d.m.Y",(int)$StartTimes[$sz]);
}
// Tabelle Erstellen
$event_display .= "<tr><td style=' padding:4px;
backgroun-color:#213245;
background: -moz-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
background: -webkit-gradient(linear, left top, right top, color-stop(4%,rgba(31,50,79,0)), color-stop(100%,#213245));
background: -webkit-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
background: -o-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
background: -ms-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
background: linear-gradient(to right, rgba(31,50,79,0) 40%), #213245 100%;'>
<span style='color:".$StyleText[1].";font-weight:200;font-size:".$StyleText[3]."'>"
.$headerTxt.
"</span></td>
<td style='text-align:right; width:100px; padding:4px;background-color:#213245'>"
."<span style='color:".$StyleText[2].";font-weight:normal;font-size:".$StyleText[4]."'>"
.$tag[date("w", strtotime(Date("d.m.Y",(int)$StartTimes[$sz])))].
"<span>".
"</td>
</tr>
<tr>
<th colspan='2' style='text-align:left;padding-left:20px;padding-right:0px;padding-bottom:10px;padding-top:0px;'>
<table style='border-spacing:0px; width:100%;padding:5px; border:1px solid #1f3247;'>";
$check_date = Date("d.m.Y",(int)$StartTimes[$sz]);
$event_display .= SetEintrag($event_display);
}else {
$event_display .= SetEintrag($event_display);
}
}
$sz++; // Duchlauf hoch zählen
}
//echo $event_display;
SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~HTMLBox"), $event_display);
//------------------------- Main ENDE --------------------------
//------------------------ Funktionen -------------------------
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);
}
function SetEintrag($event_display)
{
global $tag, $SC_Farbe, $deco, $StyleText, $Startzeit, $StartDatum, $EndDatum, $EndTimes, $sz, $Beschreibung, $event_display, $Endzeit ;
if($Startzeit == "00:00"){
$Endday = (Date("d",(int)$EndTimes[$sz])-1);
$Endmonth = (Date("m",(int)$EndTimes[$sz]));
$Endyear = (Date("Y",(int)$EndTimes[$sz]));
$EndDatum_1 = Date ("d.m.Y", strtotime("$Endday-$Endmonth-$Endyear"));
// print "Startzeit: $StartDatum Endzeit: $EndDatum_1
";
if($StartDatum == $EndDatum_1
and $Startzeit == $Endzeit) {$Startzeit = "Ganztägig";} // Ganztägig
else {$Startzeit =" bis ".substr($tag[date("w", strtotime($EndDatum))],0,2).", ".$EndDatum;}
}else {$Startzeit .= " - ".Date("H:i",(int)$EndTimes[$sz])." Uhr";}
if($StartDatum == date("d.m.Y")){
$event_display .= "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";;color:".$SC_Farbe[4]."'>".$Beschreibung."</span></td>
<td style='text-align:right;'>
<span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";color:".$SC_Farbe[4]."'>".$Startzeit."</span></td></tr>";
}else{
$event_display .= "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[4]."'>".$Beschreibung."</span></td>
<td style='text-align:right'><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[4]."'>".$Startzeit."</span></td></tr>";}
}
IPS_LogMessage($_IPS['SELF'], "Googel Termine wurden abgerufen");
//--------------------- Funktionen ENDE ----------------------
?>
Gruß Stephan