quickstart.php - Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen
<?PHP
session_start();
if (php_sapi_name() != 'cli') { throw new Exception('This application must be run on the command line.'); }
mb_internal_encoding("UTF-8");
/*
* quickstart für den Event-Kalender - quickstart.php - Übernahme von Google Calendar events (utf-8)
* © RaHa
* Teile des Scripts sind copyrigth by google.com und github.com
* !!!!!!!!!!
* Speichern im Ordner google_calendar_get_events!
* !!!!!!!!!!
* Mit dem modifizierten Script quickstart.php werden Events aus dem Google Calendar gelesen und in den Event-Kalender eingetragen
* Dieses Script läuft unter der Kommandozeile und Aufruf aus der crontab!.
* Ich wünsche viel Spass!
* Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
* ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
* Weitere Informationen finden Sie in der GNU General Public License.
* Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html
* Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
*
* Sie können Änderungen vornehmen oder individuell anpassen.
* Achtung: Fehlerhafte Angaben können Probleme verursachen!
* Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
*
* DIESES SCRIPT ÜBERNIMMT WICHTIGE INFORMATIONEN AUS GOOGLE CALENDAR - GGF. WEITERE DATEN in Beschreibung übernehmen!
*/
/* API laden - Wert an eigene Umgebung anpassen */
require_once '/var/www/vhosts/domain/domain.tld/google_calendar_get_events/vendor/autoload.php';
/* OAuth-Client-ID Credentials JSON-Datei $credentials_file - Wert an eigene Umgebung anpassen */
$credentials_file = YOUR CREDENTIAL FILE!
/**
* Returns an authorized API client.
* @return Google_Client the authorized client object
*/
function getClient()
{
global $credentials_file;
$client = new Google_Client();
$client->setApplicationName('Google Calendar API PHP Quickstart');
$client->setScopes(Google_Service_Calendar::CALENDAR_READONLY);
$client->setAuthConfig($credentials_file);
$client->setAccessType('offline');
$client->setPrompt('select_account consent');
// Load previously authorized token from a file, if it exists.
// The file token.json stores the user's access and refresh tokens, and is
// created automatically when the authorization flow completes for the first
// time.
$tokenPath = 'token.json';
if (file_exists($tokenPath)) {
$accessToken = json_decode(file_get_contents($tokenPath), true);
$client->setAccessToken($accessToken);
}
// If there is no previous token or it's expired.
if ($client->isAccessTokenExpired()) {
// Refresh the token if possible, else fetch a new one.
if ($client->getRefreshToken()) {
$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
print "Fehler bei Google Test Cloud - token.json loeschen, quickstart.php in CLI starten und Authorisierung durchfuehren!!\n\n";
} else {
// Request authorization from the user.
print "Fehler Access Token - quickstart.php in CLI starten und Authorisierung durchfuehren!!\n\n";
$authUrl = $client->createAuthUrl();
printf("Open the following link in your browser:\n%s\n", $authUrl);
print 'Enter verification code: ';
$authCode = trim(fgets(STDIN));
// Exchange authorization code for an access token.
$accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
$client->setAccessToken($accessToken);
// Check to see if there was an error.
if (array_key_exists('error', $accessToken)) {
throw new Exception(join(', ', $accessToken));
}
}
// Save the token to a file.
if (!file_exists(dirname($tokenPath))) {
mkdir(dirname($tokenPath), 0700, true);
}
file_put_contents($tokenPath, json_encode($client->getAccessToken()));
}
return $client;
}
/*
die Verifizierung ist erfolgt, das notwendige Token (token.json) ist vorhanden
jetzt können wir die Events aus dem Google Calendar lesen und in den Event-Kalender schreiben
*/
/* Name Administrator oder ein anderer vorhandener Nutzer */
$eventkalender_name = "RaHa";
print "eventkalender_name: ".$eventkalender_name."\n";
/* $KATEGORIEN[$PRIORITAET[16]]= "GOOGLE" */
$eventkalender_prioritaet_default="16";
$eventkalender_kategorie="GOOGLE";
/* Gruppe Event-Kalender */
$eventkalender_gruppe=date("YmdHis").'0'.mt_rand(10, 99);
/* BBCodes Umwandlung */
$google_bbcodes = array("<b>", "</b>", "<i>", "</i>", "<s>", "</s>", "<q>", "</q>", "<u>", "</u>", "<ins>", "</ins>", "<del>", "</del>", "<mark>", "</mark>", "<code>", "</code>", "<samp>", "</samp>", "<add>", "</add>", "<quote>", "</quote>", "<p>", "</p>", "<div>", "</div>", "<img=>", "</img>", "<sub>", "</sub>", "<sup>", "</sup>", "<ol>", "</ol>", "<li>", "</li>", "<ul>", "</ul>");
$event_kalender_bbcodes = array("[b]", "[/b]", "[i]", "[/i]", "[s]", "[/s]", "[q]", "[/q]", "[u]", "[/u]", "[ins]", "[/ins]", "[del]", "[/del]", "[mark]", "[/mark]", "[code]", "[/code]", "[samp]", "[/samp]", "[add]", "[/add]", "[quote]", "[/quote]", "[p]", "[/p]", "[div]", "[/div]", "[img=]", "[/img]", "[sub]", "[/sub]", "[sup]", "[/sup]", "[olist]", "[/olist]", "[li]", "[/li]", "[list]", "[/list]");
/*
In diesem Beispiel Script gehen wir so vor, dass alle Datensätze mit der Kategorie GOOGLE und entsprechend dem like %$timeselect% in Gruppe aus dem Event-Kalender gelöscht werden.
Dann werden aus dem Google Calendar alle Events von $timeselect ($timemin, $timemax) gelesen und neu in den Event-Kalender eintragen.
*/
/* kommt timeselect über Aufruf dann prüfen und Parameter setzen, sonst Vorgaben nehmen */
if (isset($argv[1])) {
print "argv: ".$argv[1]."\n";
$timeselect=$argv[1];
/* gültig sind YYYY oder YYYY-MM, sonst aktuelles YYYY vorgeben */
if (!preg_match("/(^[0-9]{4}$)|(^[0-9]{4}-[0-9]{2}$)/", $timeselect)) { $timeselect=date("Y"); }
print "timeselect: ".$timeselect."\n";
} else {
// aktuelles Jahr
$timeselect=date("Y");
// aktueller Monat
// $timeselect=date("Y-m");
}
if (strlen($timeselect)==4){
// anlegen der notwendigen Zeitvariablen - Abfrage Jahr
$timemin=$timeselect.'-01-01T00:00:00+00:00';
$timemax=$timeselect.'-12-31T23:59:59+00:00';
$eventkalender_gruppe=$timeselect.date("mdHis").'0'.mt_rand(10, 99);
} else {
// anlegen der notwendigen Zeitvariablen - Abfrage Monat
$year=substr($timeselect,0,4);
$month=substr($timeselect,-2);
$day=date("t",mktime(0,0,0,$month,1,$year));
$timemin=$year.'-'.$month.'-01T00:00:00+00:00';
$timemax=$year.'-'.$month.'-'.$day.'T23:59:59+00:00';
$eventkalender_gruppe=$year.$month.date("dHis").'0'.mt_rand(10, 99);
print "year: ".$year."\n";
print "month: ".$month."\n";
print "day: ".$day."\n";
}
print "timemin: ".$timemin."\n";
print "timemax: ".$timemax."\n";
print "timeselect: ".$timeselect."\n";
print "eventkalender_gruppe: ".$eventkalender_gruppe."\n";
/* Verbindungsdaten zur Datenbank - Wert an eigene Umgebung anpassen */
require_once("/var/www/vhosts/domain/domain.tld/dbinfo.inc.php");
/* Datensätze mit kategorie = $eventkalender_kategorie und gruppe = like %$timeselect% löschen */
$sql = "DELETE from ".$TABLE_PREFIX."_kalender where kategorie = '".$eventkalender_kategorie."' and `gruppe` like '%".str_replace("-", "", $timeselect)."%'";
try { $db->exec($sql); } catch(PDOException $e) { echo "Ungültige Datenbankabfrage! - Fehler: " . $e->getMessage()."\n"; exit; }
print "SQL: ".$sql."\n\n";
/* Get the API client and construct the service object. */
$client= getClient();
$service = new Google_Service_Calendar($client);
/* Events vom Kalender mit der $calendarId holen */
$calendarId = 'YOUR CALENDAR ID';
$optParams = array(
'maxResults' => 10000,
'orderBy' => 'startTime',
'singleEvents' => true,
'timeMin' => $timemin,
'timeMax' => $timemax,
);
$events = $service->events->listEvents($calendarId, $optParams);
if (empty($events)) {
print "Keine Events gefunden.\n";
} else {
print "Gefundene Events:\n";
while(true){
foreach ($events->getItems() as $event) {
// print_r($event);
/* Zuordnung GOOGLE CALENDAR EVENT Feld zu Event-Kalender Feld */
$eventkalender_start = $event->start->dateTime;
if (empty($eventkalender_start)) {
/* dann Ganzertag */
$eventkalender_start = $event->start->date;
$eventkalender_start .= " 00:00:01";
$eventkalender_volltag=1;
} else {
$eventkalender_start = str_replace("T", " ", $eventkalender_start);
$eventkalender_start = substr($eventkalender_start, 0 , strpos($eventkalender_start, "+"));
$eventkalender_volltag=0;
}
print "start: ".$eventkalender_start."\n";
$eventkalender_ende = $event->end->dateTime;
if (empty($eventkalender_ende)) {
/* dann Ganzertag */
$eventkalender_ende = $event->start->date;
$eventkalender_ende .= " 00:00:00";
$eventkalender_volltag=1;
} else {
$eventkalender_ende = str_replace("T", " ", $eventkalender_ende);
$eventkalender_ende = substr($eventkalender_ende, 0 , strpos($eventkalender_ende, "+"));
$eventkalender_volltag=0;
}
print "ende: ".$eventkalender_ende."\n";
print "volltag: ".$eventkalender_volltag."\n";
$eventkalender_event = $event->summary;
$eventkalender_event = str_replace("'", "´", $eventkalender_event);
print "event: ".$eventkalender_event."\n";
$eventkalender_beschreibung = $event->description;
$eventkalender_beschreibung = str_replace("<br>",chr(10), $eventkalender_beschreibung);
$eventkalender_beschreibung = str_replace("'", "´", $eventkalender_beschreibung);
while (strpos($eventkalender_beschreibung, "<a href=") > -1 ) {
$pos = strpos($eventkalender_beschreibung, "<a href=");
$apos = strpos($eventkalender_beschreibung, ">", $pos);
$epos = strpos($eventkalender_beschreibung, "</a>", $apos);
$sub = $eventkalender_beschreibung;
$eventkalender_beschreibung = substr($sub, 0, $pos).substr($sub, $pos+9, ($apos-1)-($pos+9)).' ['.substr($sub, $apos+1, $epos-($apos+1)).'] '.substr($sub, $epos+4);
}
$eventkalender_beschreibung = str_replace($google_bbcodes, $event_kalender_bbcodes, $eventkalender_beschreibung);
$eventkalender_beschreibung = str_replace(" ", " ", $eventkalender_beschreibung);
if (isset($event["attendees"]["0"]["email"])) { $attendees = $event["attendees"]["0"]["email"]; } else { $attendees =""; }
if(!empty($attendees)) {
$eventkalender_beschreibung .= '\n\nGäste eingeladen: '.$attendees;
for ($i = 1; ; $i++) {
if (empty($event["attendees"][$i]["email"])) { break; }
$eventkalender_beschreibung .= ', '. $event["attendees"][$i]["email"];
}
$eventkalender_beschreibung .= '\n';
}
if (isset($event["attachments"]["0"]["fileUrl"])) { $attachments = $event["attachments"]["0"]["fileUrl"]; } else { $attachments=""; }
if(!empty($attachments)) {
$eventkalender_beschreibung .= '\n\nAnhang: \n'.$attachments.'\n';
for ($i = 1; ; $i++) {
if (empty($event["attachments"][$i]["fileUrl"])) { break; }
$eventkalender_beschreibung .= $event["attachments"][$i]["fileUrl"].'\n';
}
$eventkalender_beschreibung .= '\n';
}
print "beschreibung: ".$eventkalender_beschreibung."\n";
$eventkalender_adresse = $event->location;
$eventkalender_adresse = str_replace("'", "´", $eventkalender_adresse);
print "adresse: ".$eventkalender_adresse."\n";
if (isset($event["colorId"])) { $google_isfarbe = strval($event["colorId"]); } else { $google_isfarbe =""; }
print "google_isfarbe: ".$google_isfarbe."\n";
$eventkalender_prioritaet = $eventkalender_prioritaet_default;
if(!empty($google_isfarbe)) {
/* Farbumwandlung */
/* Google */
/* TOMATE = 11 | FLAMINGO = 4 | MANDARINE = 6 | BANANE = 5 | SALBEI = 2 | BASILIKUM = 10 | PFAU = 7 | HEIDELBEERE = 9 | LAVENDEL = | WEINTRAUBE = 3 | GRAFIT = 8 */
/* Event-Kalener */
/* 0 = "Transparent | 1 = Rot| 2 = Gold | 3 = Grün | 4 = Blau | 5 = Orange | 6 = Violet | 7 = Himmelblau | 8 = Rosa | 9 = Cyan | 10 = Braun | 11 = Grau | 12 = Stahlblau */
/* 13 = Seegrün | 14 = Salomon | 15 = Violetrot | 16 = Purple | 17 = Khaki | 18 = Waldgrün | 19 = Türkis | 20 = Blaugrau | 21 = Terracotta | 22 = Mittelblau | 23 = Olive */
/* 24 = Blassgold | 25 = Blassviolet | 26 = Lichtblau | 27 = Schulferien */
/* $eventkalender_prioritaet=str_replace(array, array, $google_isfarbe) funktioniert hier nicht, deshalb die while-Schleife */
while(true) {
if ($google_isfarbe == "11") { $eventkalender_prioritaet = "1"; break; }
if ($google_isfarbe == "4") { $eventkalender_prioritaet = "21"; break; }
if ($google_isfarbe == "6") { $eventkalender_prioritaet = "5"; break; }
if ($google_isfarbe == "5") { $eventkalender_prioritaet = "2"; break; }
if ($google_isfarbe == "2") { $eventkalender_prioritaet = "3"; break; }
if ($google_isfarbe == "10") { $eventkalender_prioritaet = "18"; break; }
if ($google_isfarbe == "7") { $eventkalender_prioritaet = "4"; break; }
if ($google_isfarbe == "9") { $eventkalender_prioritaet = "22"; break; }
if ($google_isfarbe == "3") { $eventkalender_prioritaet = "6"; break; }
if ($google_isfarbe == "8") { $eventkalender_prioritaet = "11"; break; }
break;
}
}
print "prioritaet: ".$eventkalender_prioritaet."\n";
print "kategorie: ".$eventkalender_kategorie."\n";
print "gruppe: ".$eventkalender_gruppe."\n";
/* Werte in Event-Kalender schreiben */
$sql = "INSERT INTO ".$TABLE_PREFIX."_kalender ( start, ende, volltag, name, event, beschreibung, adresse, prioritaet, kategorie, gruppe) VALUES ('".$eventkalender_start."', '".$eventkalender_ende."', '".$eventkalender_volltag."', '".$eventkalender_name."', '".$eventkalender_event."', '".$eventkalender_beschreibung."', '".$eventkalender_adresse."', '".$eventkalender_prioritaet."', '".$eventkalender_kategorie."', '".$eventkalender_gruppe."');";
print "SQL: ".$sql."\n";
try { $db->exec($sql); } catch(PDOException $e) { echo "Ungültige Datenbankabfrage! - Fehler: " . $e->getMessage()."\n"; exit;}
} // end for
$pageToken = $events->getNextPageToken();
if ($pageToken) {
$optParams = array('pageToken' => $pageToken);
$events = $service->events->listEvents($calendarId, $optParams);
} else { break; }
} //end while
} // end if
?>
quickstart.sh – Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen
# quickstart crontab start
cd /var/www/vhosts/domain/domain.tld/google_calendar_get_events
php quickstart.php
quickstart_sh.php – Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen
<?PHP
/* Wert an eignene Umgebung anpassen */
echo '<br><br><br><a href="https://domain.tld/" target="_self" alt="" title=""><button class="button button1">Zurück zum Event-Kalender</button></a>';
echo '<h1>GOOGLE CALENDAR GET EVENTS</h1>';
$flag = 0;
unset($output);
$command='/bin/sh quickstart.sh';
exec($command,$output,$flag);
echo '<pre>';
print_r($output);
echo '</pre>';
/* Wert an eignene Umgebung anpassen */
echo '<br><br><br><a href="https://domain.tld/" target="_self" alt="" title=""><button class="button button1">Zurück zum Event-Kalender</button></a>';
?>
in index.php/demo.php einfügen/ersetzen – Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen
<link rel="stylesheet" href="kalenderstyle.css">
<script>
function getgooglecalender(){
window.location.href = "https://domain.tld/google_calendar_get_events/quickstart_sh.php";
}
</script>
<script type="text/javascript" src="kalenderscript.js"></script>
</head>
<body>
<button type="button" onclick="getgooglecalender();">GOOGLE CALENDAR GET EVENTS</button>
<div id="kalender"></div>
dbinfo.inc.php – Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen