Hallo…
ich verwende bei mir folgende Skripte:
- Eine kleine Funktionssammlung, die den Googlekalender ausliest. Die Basis stammt von hier (Accessing Google Calendar using the php API | mytechscraps). Die Funktion „ReadCalendar“ liefert ein Array zurück, welches man unkompliziert weiterverarbeiten kann.
$calname = Der Name des Googlekalenders … z.B. ‚xxxxxxxxx@group.calendar.google.com‘
$maxDays = die Anzahl der auszulesenden Tage (ab heute)
$shortCut = beliebige Zeichenkette (wird im Skript zwei beim Auslesen von mehreren Kalendern verwendet)
<?
function ReadCalendar($calName, $maxDays, $shortCut)
{
require_once "google-api-php-client-master/autoload.php";
// Service Account info
$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
$service_account_name = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx@developer.gserviceaccount.com';
$key_file_location = 'google-api-php-client-master/Google-IPS-Kalenderxxxxxxxxxxxxxxxxx.p12';
$client = new Google_Client();
$client->setApplicationName("TestKalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($service_account_name, array('https://www.googleapis.com/auth/calendar.readonly'), $key);
$client->setAssertionCredentials($cred);
// Convert recurring events to single events
// Look for events in the next week - now to now+1week
$params = array( 'singleEvents' => TRUE,
'timeMin' => (new DateTime())->format(DateTime::RFC3339),
'timeMax' => (new DateTime())->add(new DateInterval('P' .$maxDays .'D'))->format(DateTime::RFC3339),);
$events = $service->events->listEvents($calName, $params);
//print_r ($events->getItems());
$c=0;
foreach ($events->getItems() as $event)
{
$Ergebnis[$c]['StartDatum'] = fmt_gdate($event->getStart());
$Ergebnis[$c]['StartZeit'] = fmt_gtime($event->getStart());
$Ergebnis[$c]['EndeDatum'] = fmt_gdate($event->getEnd());
$Ergebnis[$c]['EndeZeit'] = fmt_gtime($event->getEnd());
$Ergebnis[$c]['Beschreibung'] = iconv('UTF-8', 'ISO-8859-1',$event->getSummary());
$Ergebnis[$c]['Ort'] = iconv('UTF-8', 'ISO-8859-1',$event->getLocation());
$Ergebnis[$c]['shortCut'] = $shortCut;
if($Ergebnis[$c]['StartZeit'] == "00:00" && $Ergebnis[$c]['EndeZeit'] == "00:00")
{
$Ergebnis[$c]['EndeDatum'] = date("d.m.Y", strtotime($Ergebnis[$c]['EndeDatum']."-1 day"));
}
$c++;
}
usort($Ergebnis, 'DateCompare');
return $Ergebnis;
}
function fmt_gdate( $gdate )
{
if ($val = $gdate->getDateTime())
{
return (new DateTime($val))->format( 'd.m.Y' );
}
else if ($val = $gdate->getDate())
{
return (new DateTime($val))->format( 'd.m.Y');
}
}
function fmt_gtime( $gdate )
{
if ($val = $gdate->getDateTime())
{
return (new DateTime($val))->format( 'H:i' );
}
else if ($val = $gdate->getDate())
{
return ('00:00');
}
}
function DateCompare($a, $b)
{
if ( strtotime($a['StartDatum']) == strtotime($b['StartDatum']) ) return 0;
if ( strtotime($a['StartDatum']) < strtotime($b['StartDatum']) ) return -1;
return 1;
}
?>
- Das „Anzeigeskript“:
Ich habe das Skript von crypto (#122) etwas modifiziert, so das es mit der obigen Kalenderfunktion zusammenarbeitet:
<?
require_once "Google_Kalender_Funktionen.ips.php";
// Hier die GoogleKalender eintragen
//Kalender 1
$Userid1='kalenderxxxx@gmail.com';
$Tage1=100;
$ShortCut1=1;
//Kalender 2
$Userid2='xxxxxxxxx@group.calendar.google.com';
$Tage2=300;
$ShortCut2=4;
//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 = true; // (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] = "small"; // Textgröße Datum
$StyleText[4] = "small"; // Textgröße Wochentag
$StyleText[5] = "small"; // Textgröße Eintrag
/****************** Ab hier wieder die Finger lassen **************/
// 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";
}
//******************************************************************************
$calc1=ReadCalendar($Userid1, $Tage1, $ShortCut1);
$calc2=ReadCalendar($Userid2, $Tage2, $ShortCut2);
$calcData=array_merge($calc1, $calc2);
//$calcData=$calc2;
usort($calcData, 'DateCompare');
//print_r($calcData);
$calDataTxt = "<table style='border-spacing:0px; width:100%'>"; // Starte Tabellenansicht
$check_date = "";
foreach($calcData as $thisData)
{
if($thisData['EndeDatum'] != date("d.m.Y", strtotime("yesterday")))
{
if($check_date != "" and $thisData['StartDatum'] != $check_date)
{
$calDataTxt .= "</table></th></tr>";
}
if($thisData['StartDatum'] != $check_date)
{
if($thisData['StartDatum'] == date("d.m.Y"))
{
$headerTxt = "Heute:";
}
elseif($thisData['StartDatum'] == date("d.m.Y", strtotime("+1 day")))
{
$headerTxt = "Morgen:";
}
else
{
$headerTxt = $thisData['StartDatum'];
}
$calDataTxt .= "<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($thisData['StartDatum']))].
"<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 = $thisData['StartDatum'];
$calDataTxt .= SetEintrag($thisData);
}
else
{
$calDataTxt .= SetEintrag($thisData);
}
}
}
$calDataTxt .= "</table></th></tr></table>"; // Tabelle schließen
SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~HTMLBox"), $calDataTxt);
/*********** Werte in eine Datei schreiben. Ich habe keine Verwendung dafür *******/
$calDataTxt = '';
foreach($calcData as $thisData) $calDataTxt .= $thisData['StartDatum'].'>'.$thisData['shortCut'].$thisData['Beschreibung']."
";
/*
$handle = fopen("C:/IP-Symcon/Termine.txt", "w");
fwrite($handle, $calDataTxt);
fclose($handle);
*/
if($IPS_SENDER == "Execute")
{
echo $calDataTxt;
}
//***************************************************************************************************
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;
}
function SetEintrag($thisData)
{
global $tag, $SC_Farbe, $deco, $StyleText;
if($thisData['StartZeit'] == "00:00")
{
if($thisData['StartDatum'] == $thisData['EndeDatum'])$thisData['StartZeit']="Ganztägig";
else $thisData['StartZeit']="bis ".substr($tag[date("w", strtotime($thisData['EndeDatum']))],0,2).", ".$thisData['EndeDatum'];
}
else $thisData['StartZeit'] .= " - ".$thisData['EndeZeit']." Uhr";
if($thisData['StartDatum'] == date("d.m.Y"))
{
return "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";;color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['Beschreibung']."</span></td>
<td style='text-align:right;'>
<span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['StartZeit']."</span></td></tr>";
}
else
{
return "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['Beschreibung']."</span></td>
<td style='text-align:right'><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[$thisData['shortCut']]."'>".$thisData['StartZeit']."</span></td></tr>";
}
}
?>
Beachte:
require_once „Google_Kalender_Funktionen.ips.php“; '== das Skript zu 1. !!!
Gruß
Swifty