Ich arbeite an einem Skript, um eine Veranstaltung aus Google Kalender zu ziehen und auf eine Website zu stellen. Ziel ist es, die Öffnungszeiten meines Arbeitgebers (einer Universitätsbibliothek) auf unserer Website zu setzen. Grundsätzlich erstellen wir Ereignisse in Google Kalender mit den Betriebsstunden in der Zusammenfassung. Mein Ziel ist es, die relevanten Informationen programmatisch aus dem Kalender zu ziehen und in ein div-Tag auf unserer Homepage einzufügen.Google Kalender-API gibt keine neu erstellten Ereignisse zurück
Es war nicht schwer, das grundlegende PHP-Beispiel von Google zu modifizieren, um die erforderlichen Informationen zu erhalten. Leider hat der Controller-Code das Abrufen neu erstellter Ereignisse gestoppt. Es ist kein Berechtigungsproblem, da ich der Besitzer des Kalenders bin. Und bis zum gestrigen Nachmittag konnte ich neue Ereignisse erstellen und das Skript in meinem Browser ausdrucken lassen. Hier ist mein Code:
<?php
require __DIR__ . '/vendor/autoload.php';
define('APPLICATION_NAME', 'Library Hours Script');
define('CREDENTIALS_PATH', '~/path-to-credentials');
define('CLIENT_SECRET_PATH', __DIR__ . '/private key file');
// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/calendar-php-quickstart.json
define('SCOPES', implode(' ', array(
Google_Service_Calendar::CALENDAR_READONLY)
));
/**
* Returns an authorized API client.
* @return Google_Client the authorized client object
*/
$client_email = '[email protected]';
$private_key = file_get_contents('/path-to-private-key');
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
SCOPES,
$private_key
);
// Get the API client and construct the service object.
$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$service = new Google_Service_Calendar($client);
// Get the calendar ID. The script currently uses the "Regular Hours" calendar.
$calendarId = '[email protected]';
$optParams = array(
'maxResults' => 1,
'singleEvents' => TRUE,
'timeMin' => date('c'),
);
$results = $service->events->listEvents($calendarId, $optParams);
if (count($results->getItems()) == 0) {
print "<a href='http://www.deltastate.edu/academics/libraries/libraries-hours-of-operation/' target='_blank'>Click here for Library hours</a>.\n";
} else {
foreach ($results->getItems() as $event) {
$opHours = $event->getSummary();
$start = $event->start->dateTime;
if (empty($start)) {
$start = $event->start->date;
}
print($opHours . " " . $start . " " . date('c'));
}
}
Wesentlichen über den Code macht eine Anfrage an die Kalender-API für eine Liste von Ereignissen mit der maximalen Anzahl der Ergebnisse 1 ist, durch das aktuelle Datum gefiltert. Dann druckt das Startdatum und die Zusammenfassung auf dem Bildschirm.
Der API-Explorer gibt die gleichen Ergebnisse zurück wie bei der Ausführung des Skripts auf einem Webserver. Es zeigt nur Ereignisse in der Zukunft, die vor einiger Zeit erstellt wurden. Die Ereignisse, die ich gestern und heute für diese Woche erstellt habe, werden nicht zurückgegeben. Das Problem scheint nicht sehr verbreitet zu sein, aber niemand, der es gemeldet hat, hat eine Lösung gefunden. Jede Hilfe würde sehr geschätzt werden.