[...] nutze ich inzwischen die API von Tankerkoenig --> https://creativecommons.tankerkoenig.de/
Versteh ich jetzt nicht, Du hast doch geschrieben, dass Du es bereits benutzt. Wieso brauchst Du dazu Zeit, das ist doch nur Copy und Paste.sobald ich etwas Zeit habe werde ich das posten, kein Thema
<?php
/***************************************************************************
* InfoFrame (image generator for digital picture frames)
* Copyright (C) 2009 Tobias Kolb
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/
***************************************************************************/
class CalendarPlugin implements IPlugin
{
private $dbconn = NULL;
private $config = NULL;
public function __construct($dbconn, $config) {
$this->dbconn = $dbconn;
$this->config = $config;
}
public function doUpdate() {
require_once '../zendfw/googleapi/autoload.php';
session_start();
$client_id = $this->config['client_id'];
$service_account_name = $this->config['account_name'];
try {
$client = new Google_Client();
$client->setApplicationName($this->config['project_name']);
$service = new Google_Service_Calendar($client);
}
catch (Exception $e) {
die ('Folgender Fehler trat auf: ' . $e->getMessage());
}
if (isset($_SESSION['service_token']))
$client->setAccessToken($_SESSION['service_token']);
$key = file_get_contents($this->config['key_file']);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/calendar'),
$key);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired())
$client->getAuth()->refreshTokenWithAssertion($cred);
$_SESSION['service_token'] = $client->getAccessToken();
//set startDate, endDate, eventParams
//set startDate, endDate, eventParams
$now = new DateTime('NOW');
$clone = clone $now;
$clone = date_modify($clone, '+1 month');
$startDate = date_format($now, DateTime::W3C);
$endDate = date_format($clone, DateTime::W3C);
$eventParams = array(
'timeMin' => $startDate,
'timeMax' => $endDate,
'singleEvents' => 'true');
//get Calendar Id´s
$calendarList = $service->calendarList->listCalendarList();
// Set begin of querys
$insertToken = "REPLACE INTO if_system (name, value) VALUES ";
$insertCalendarData = "INSERT INTO if_calendar (color,begin,end,title,location) VALUES ";
$deleteCalendarData = "DELETE FROM if_calendar WHERE ";
/******************** Update every given time without checking for SyncToken ************************/
$forceRefresh = $this->config['force_refresh'];
$updateCalendar = FALSE;
$query = "SELECT * FROM if_system WHERE name = 'CalendarUpdate'";
$result = mysql_query($query, $this->dbconn);
if (mysql_num_rows($result) > 0) {
$row = mysql_fetch_assoc($result);
if ( ($row['name'] == 'CalendarUpdate') && ((time() - $row['value']) >= ($forceRefresh*3600)) ) {
$updateCalendar = TRUE;
$query = "REPLACE INTO if_system (name,value) VALUES ('CalendarUpdate', '".time()."')";
mysql_query($query, $this->dbconn) or die('CalendarPlugin: '.mysql_error());
}
}else{
$updateCalendar = TRUE;
$query = "INSERT INTO if_system (name,value) VALUES ('CalendarUpdate', '".time()."')";
mysql_query($query, $this->dbconn) or die('CalendarPlugin: '.mysql_error());
}
/*********************************************************************************************************/
$i = 0;
while(TRUE) {
/***************** Loop through each Calendar, get id, and color **************************/
foreach ($calendarList->getItems() as $calendarListEntry) {
$calendarID = $calendarListEntry->getID();
$color = $calendarListEntry->getBackgroundColor();
/***************** Get SysncToken to skip this calender at next update if nothing has changed **********/
$events = $service->events->listEvents($calendarID, $eventParams);
//If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken
try{
$NextSyncToken = $events->getNextSyncToken();
}
catch (Exception $e) {
if (strripos($e->getMessage(), "410") !== FALSE){
$NextSyncToken = 'FEHLER';
}else{
die ('Folgender Fehler trat auf: ' . $e->getMessage());
}
}
$SyncToken = '';
//echo $NextSyncToken.PHP_EOL;
if ($updateCalendar == FALSE) {
$query = "SELECT value FROM if_system WHERE name = '".$calendarID."'";
$result = mysql_query($query, $this->dbconn);
if (mysql_num_rows($result) > 0) {
$row = mysql_fetch_assoc($result);
$SyncToken = $row['value'];
}
}
$insertToken .= "('".$calendarID."','".$NextSyncToken."'), ";
/***************** SysncToken check done *****************************************************/
/**************** if SyncToken changed perform update ******************************/
if ($NextSyncToken != $SyncToken) {
$i++;
$deleteCalendarData .= "color = '".$color."' OR ";
while(TRUE) {
/************************ Get content from each Calendar *****************/
foreach ($events->getItems() as $event) {
//print_r($event);
if (!empty($event['modelData']['start']['dateTime'])) {
$begin = date_format(date_create($event['modelData']['start']['dateTime']), 'Y-m-d H:i:s');
$end = date_format(date_create($event['modelData']['end']['dateTime']), 'Y-m-d H:i:s');
}else{
$begin = $event['modelData']['start']['date'];
$end = $event['modelData']['end']['date'];
}
$title = $event->getSummary();
$insertCalendarData .= "('".$color."','".$begin."','".$end."','".$title."',''), ";
}
$pageToken = $events->getNextPageToken();
if ($pageToken) {
$optParams = array('pageToken' => $pageToken);
$events = $service->events->listEvents($calendarListEntry->getID(), $optParams);
}else{
break;
}
}
} /********** if SysncToken changed perform update END **********/
} /*********** Loop through each Calendar, get id, and color END *************************/
$pageToken = $calendarList->getNextPageToken();
if ($pageToken) {
$optParams = array('pageToken' => $pageToken);
$calendarList = $service->calendarList->listCalendarList($optParams);
}else{
break;
}
}
/***************************** if SyncToken changed perform SQL-statement *********************/
if ( $i > 0 ) {
mysql_query($this->before_last('OR', $deleteCalendarData), $this->dbconn) or die('CalendarPlugin -> insertCalendarData: '.mysql_error());
mysql_query($this->before_last(',', $insertToken), $this->dbconn) or die('CalendarPlugin -> insertToken: '.mysql_error());
mysql_query($this->before_last(',', $insertCalendarData), $this->dbconn) or die('CalendarPlugin -> insertCalendarData: '.mysql_error());
}
}
public function doOutput($image, $style, $updateData, &$yoffset) {
if ($updateData)
$this->doUpdate();
$query = "SELECT * FROM `if_calendar` WHERE `end` > NOW() AND (`begin` <= ADDDATE(NOW(), INTERVAL ".$this->config['number_of_days']." DAY)) ORDER BY `begin` ASC";
$result = mysql_query($query, $this->dbconn);
if (mysql_num_rows($result) > 0) {
// define styles
$opt_header = array(
'width' => imagesx($image)-290,
'line_height' => 18,
'align' => ALIGN_LEFT
);
$opt_day = array(
'width' => imagesx($image)-290,
'height' => 14,
'line_height' => 14,
'align' => ALIGN_LEFT
);
$opt_entry = array(
'width' => imagesx($image)-290,
'height' => 12,
'line_height' => 12,
'align' => ALIGN_LEFT,
'word_wrap_hyphen' => '...',
'aggressive_word_wrap' => true,
);
// print header
imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], "Nächste Termine", $opt_header);
$icon = ImageCreateFromPNG ( 'resources/icons/clock.png' );
ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
$yoffset += 26;
// print calendar
$counter = 0;
$formatDate = "%d.%m.%Y";
$formatTime = "%H:%M";
$today = strftime( $formatDate );
$tomorrow = strftime( $formatDate, strtotime("+1 day", time() ) );
$currently_displayed_day = 0;
while ($row = mysql_fetch_assoc($result)) {
$counter++;
// if end of screen is reached and more than one items left -> cut off and show hint "x more appointments..."
$rest = (mysql_num_rows($result) - $counter) + 1;
if (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) {
$text = "... $rest weitere Termine";
imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_entry);
$yoffset += 20;
break;
}
// print day name
$begin_date = strftime( $formatDate, strtotime($row['begin']));
// if begin day is before today set begin to today
if (strtotime($begin_date) < strtotime($today))
$begin_date = $today;
// now if begin is after $currently_displayed_day update $currently_displayed_day
if (strtotime($begin_date) > $currently_displayed_day) {
// update currently_displayed_day
$currently_displayed_day = strtotime($begin_date);
// print day name
if( $begin_date == $today )
$dayname = "Heute";
else if( $begin_date == $tomorrow )
$dayname = "Morgen";
else
$dayname = strftime("%A, ".$formatDate, strtotime($begin_date));
imagettftextboxopt($image, 14, 0, 50, $yoffset+4, $style['textcolor'], $style['fontb'], $dayname, $opt_day);
$yoffset += 22;
}
// build appointment time text
$end_date = strftime( $formatDate, strtotime($row['end']));
$begin_time = strftime( $formatTime, strtotime($row['begin']));
$end_time = strftime( $formatTime, strtotime($row['end']));
$text = $row['title'];
if ($row['location'] != null)
$text = $text . ", " . $row['location'];
if (($begin_time == "00:00") && ($end_time == "00:00")) {
// all day event (substract 1 second to get the real end date at 23:59)
$end_date = strftime( $formatDate, strtotime($row['end'])-1);
// if all day event is longer than one day -> print end date
if (strtotime($end_date) != $currently_displayed_day)
$text = $text." (bis ".$end_date.")";
} else {
// normal event with start and end time
$text = $text." (".$begin_time." - ";
// if event ends not this day -> display end date additionally to time
if (strtotime($end_date) != $currently_displayed_day)
$text = $text.$end_date.", ";
$text = $text.$end_time.")";
}
// ------------------------------------------- M?llabfuhr----------------------------------------
if (($row['color']) == "#cd74e6") {
if (strpos($row['title'], 'Sperrmüll') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/tonne_blau.png' );
if (strpos($row['title'], 'Grüne Tonne') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/tonne_gruen.png' );
if (strpos($row['title'], 'Gelber Sack') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/gelber_sack.png' );
if (strpos($row['title'], 'Graue Tonne') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/tonne_schwarz.png' );
if (strpos($row['title'], 'Strauchgutabfuhr') !== false)
$icon = ImageCreateFromPNG ( 'resources/icons/strauch.png' );
ImageCopy($image, $icon, 23, $yoffset-6, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
} else{
// ------------------------------------------- Geburtstag ----------------------------------------
if (($row['color']) == "#a47ae2"){
$icon = ImageCreateFromPNG ( 'resources/icons/birth.png' );
ImageCopy($image, $icon, 23, $yoffset+0, 0, 0, imagesx($icon), imagesy($icon));
ImageDestroy($icon);
} else {
// determine button color
$colorArray = htmlColorToRgb($row['color']);
$color = ImageColorAllocate ($image, $colorArray[0], $colorArray[1], $colorArray[2]);
// print appointment text and button
drawGlassButton($image, $color, 32, $yoffset+;
}
}
imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
$yoffset += 18;
}
$yoffset += 26;
}
mysql_free_result($result);
}
private function before_last ($needle, $inthat) {
return substr($inthat, 0, $this->strrevpos($inthat, $needle));
}
private function strrevpos($instr, $needle) {
$rev_pos = strpos (strrev($instr), strrev($needle));
if ($rev_pos===false) return false;
else return strlen($instr) - $rev_pos - strlen($needle);
}
}
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
$loc = setlocale(LC_ALL, 'de_DE.UTF8', 'de_DE', 'de', 'ge');
date_default_timezone_set('Europe/Berlin');
session_start();
include_once("infoframe_db.php");
require_once '../zendfw/googleapi/autoload.php';
$client_id = 'xxxx'; //Client ID !!!!!!!!!!!!!!
$service_account_name = 'xxxxxx'; //Email Addresse !!!!!!!!!!!!!!!!!!!!
$key_file_location = '../zendfw/Infoframe xxxxxx.p12'; //pfad zu deinem key.p12 !!!!!!!!!!!!!!!!!!!!!!!!
if ($client_id == '' || !strlen($service_account_name) || !strlen($key_file_location)) {
echo missingServiceAccountDetailsWarning();
}
try {
$client = new Google_Client();
$client->setApplicationName("InfoframeCalendar"); // Projedktname aendern, falls nicht infoframe !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$service = new Google_Service_Calendar($client);
}
catch (Exception $e) {
die ('Folgender Fehler trat auf: ' . $e->getMessage());
}
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/calendar'),
$key
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();
//set startDate, endDate, eventParams
$now = new DateTime('NOW');
$clone = clone $now;
$clone = date_modify($clone, '+1 month');
$startDate = date_format($now, DateTime::W3C);
$endDate = date_format($clone, DateTime::W3C);
echo $startDate." - ".$endDate.PHP_EOL."<br>";
$eventParams = array(
'timeMin' => $startDate,
'timeMax' => $endDate,
'singleEvents' => 'true');
//get Calendar Id´s
$calendarList = $service->calendarList->listCalendarList();
echo $calendarList->getNextSyncToken().PHP_EOL."<br>" ;
// Set begin of querys
$insertToken = "REPLACE INTO if_system (name, value) VALUES ";
$insertCalendarData = "INSERT INTO if_calendar (color,begin,end,title,location) VALUES ";
$deleteCalendarData = "DELETE FROM if_calendar WHERE ";
/******************** Update every given time without checking for SyncToken ************************/
$updateInterval = 1;
$updateCalendar = FALSE;
$query = "SELECT * FROM if_system WHERE name = 'CalendarUpdate'";
$result = mysqli_query($dbconn, $query);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
if ( ($row['name'] == 'CalendarUpdate') && ((time() - $row['value']) >= ($updateInterval*10)) ) {
echo "<b>UpdateInterval: </b>".$row['name'].' - <b>letztes update: </b>'.date('Y-m-d H:i:s').' - <b>wenn 1.Zahl groesser als 2.Zahl: </b>'.(time()-$row['value']).' >= '.($updateInterval*10).PHP_EOL."<br>";
$updateCalendar = TRUE;
$query = "REPLACE INTO if_system (name,value) VALUES ('CalendarUpdate', '".time()."')";
$result = mysqli_query($dbconn, $query);
}
}else{
$updateCalendar = TRUE;
$query = "INSERT INTO if_system (name,value) VALUES ('CalendarUpdate', '".time()."')";
$result = mysqli_query($dbconn, $query);
}
/*********************************************************************************************************/
$i = 0;
while(TRUE) {
/***************** Loop through each Calendar, get id, and color **************************/
foreach ($calendarList->getItems() as $calendarListEntry) {
$calendarID = $calendarListEntry->getID();
$color = $calendarListEntry->getBackgroundColor();
echo "<br><b>Kalndername, Kalender_id fuer google suche: ".$calendarListEntry->getSummary()." - ".$calendarID." - ".$color.PHP_EOL."</b><br>" ;
/***************** Get SysncToken to skip this calender at next update if nothing has changed **********/
$events = $service->events->listEvents($calendarID, $eventParams);
//If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken
try{
$NextSyncToken = $events->getNextSyncToken();
}
catch (Exception $e) {
if (strripos($e->getMessage(), "410") !== FALSE){
$NextSyncToken = 'FEHLER';
}else{
die ('Folgender Fehler trat auf: ' . $e->getMessage());
}
}
$SyncToken = '';
echo "SyncToken: ".$NextSyncToken.PHP_EOL."<br>";
if ($updateCalendar == FALSE) {
$query = "SELECT value FROM if_system WHERE name = '".$calendarID."'";
$result = mysqli_query($dbconn, $query);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$SyncToken = $row['value'];
}
}
$insertToken .= "('".$calendarID."','".$NextSyncToken."'), ";
/***************** SysncToken check done *****************************************************/
/**************** if SyncToken changed perform update ******************************/
if ($NextSyncToken != $SyncToken) {
$i++;
$deleteCalendarData .= "color='".$color."' OR ";
while(TRUE) {
/************************ Get content from each Calendar *****************/
foreach ($events->getItems() as $event) {
//print_r($event);
if (!empty($event['modelData']['start']['dateTime'])) {
$begin = date_format(date_create($event['modelData']['start']['dateTime']), 'Y-m-d H:i:s');
$end = date_format(date_create($event['modelData']['end']['dateTime']), 'Y-m-d H:i:s');
}else{
$begin = $event['modelData']['start']['date'];
$end = $event['modelData']['end']['date'];
}
$title = $event->getSummary();
echo "Gefundene Kalender Events: ".$title." - ".$begin. " - ".$end.PHP_EOL."<br>";
$insertCalendarData .= "('".$color."','".$begin."','".$end."','".$title."',''), ";
}
$pageToken = $events->getNextPageToken();
if ($pageToken) {
echo "blubb: ".$pageToken.PHP.EOL;
$optParams = array('pageToken' => $pageToken);
$events = $service->events->listEvents($calendarListEntry->getID(), $optParams);
} else {
break;
}
}
} /********** if SysncToken changed perform update END **********/
} /*********** Loop through each Calendar, get id, and color END *************************/
$pageToken = $calendarList->getNextPageToken();
if ($pageToken) {
$optParams = array('pageToken' => $pageToken);
$calendarList = $service->calendarList->listCalendarList($optParams);
} else {
break;
}
}
/***************************** if SyncToken changed perform SQL-statement *********************/
if ( $i > 0 ) {
echo "<br><b>DELETE Events from if_Calendar: </b>".before_last('OR', $deleteCalendarData).PHP_EOL."<br>";
echo "<br><b>Insert Token in if_system: </b>".before_last(',', $insertToken).PHP_EOL."<br>";
echo "<br><b>Insert CalenderEvents in if_calendar: </b>".before_last(',', $insertCalendarData).PHP_EOL."<br>";
mysqli_query($dbconn, before_last('OR', $deleteCalendarData)) or die('CalendarPlugin -> insertCalendarData: '.mysqli_error());
mysqli_query($dbconn, before_last(',', $insertToken)) or die('CalendarPlugin -> insertCalendarData: '.mysqli_error());
mysqli_query($dbconn, before_last(',', $insertCalendarData)) or die('CalendarPlugin -> insertCalendarData: '.mysqli_error());
}
/******************* Functions to strip last ',' from query-string ***********************/
function before_last ($needle, $inthat) {
return substr($inthat, 0, strrevpos($inthat, $needle));
}
function strrevpos($instr, $needle) {
$rev_pos = strpos (strrev($instr), strrev($needle));
if ($rev_pos===false) return false;
else return strlen($instr) - $rev_pos - strlen($needle);
}
/******************************************************************************************/
?>
'directory' => sys_get_temp_dir() . '/Google_Client'
'directory' => sys_get_temp_dir() . 'tmp/Google_Client'