Hallo,
vielen Dank, ich hab das jetzt hier auch soweit am laufen.
Das einzige, was nicht funktioniert:
addressbook#contacts@group.v.calendar.google.com
Das sind die Geburtstage. Funktioniert das bei euch?
@thorsten: Sonstige funktioniert bei mir.
Gruß,
Hendrik
Ankündigung
Einklappen
Keine Ankündigung bisher.
Google Calendar - update für "neue" GoogleAPI
Einklappen
X
-
Hallo Thorsten
In der Beilage die Ansicht zu den Esintellungsmöglichkeiten, welche ich erhalte. Die Option "Installierte Anwendung" fehlt dort..Angehängte Dateien
- Likes 1
Einen Kommentar schreiben:
-
Hallo Dieter,
bei Punkt 5 hatte ich die Auswahl-Möglichkeit neben "Webanwendung" und "Dienstkonto" auch die von Carsten beschriebene Auswahl "Installierte Anwendung", also genau so wie von Carsten beschrieben. Vielleicht kannst du nochmals prüfen, ob du an der richtigen Stelle warst.
Der Google-Standard-Kalender entspricht auch bei mir meiner Google-Mail-Adresse. Einfach diese in die URL eintragen. Solltest du weitere Kalender angelegt haben, so bekommen diese zufällig generierte Kalender-IDs, in der Form calendarid@group.calendar.google.com.
@henfri: wegen mir kann die Erweiterung gerne ins Repository übernommen werden, falls die Entwickler daran interessiert sind.
Gruß
Thorsten
Einen Kommentar schreiben:
-
Hallo
Im Schritt 5 steht "Wichtig: hier „Installierte Anwendung“ auswählen". Dieser Punkt existiert nicht. Soll mann dort "Sonstige* auswählen?
Und: Welcher "Name" ist auf der Config im Feld "URL" einzutippen? Muss das einfach der Name eines der Kalender sein, die man selbst erstellen kann?
Meine Kalender URL ist in der Form
"https://www.google.com/calendar/embed?src=name%40domain.com&ctz=Europe/Zurich", wobei "name%40domain" für meine Mailadresse steht. Ich erhalte keine andere Kalender-URL.
Danke für Eure Hilfe!
Gruss,
Dieter
Einen Kommentar schreiben:
-
Top, danke.
Spricht etwas dagegen, das ins Repository zu über nehmen?
Einen Kommentar schreiben:
-
Hallo CodeRed,
super, ganz herzlichen Dank dafür ! Gerade das Caching hatte mir auch noch gefehlt.
Bin grad im Urlaub und kann nicht testen, freu mich aber schon darauf !!
Viele Grüße - Carsten
Einen Kommentar schreiben:
-
Hallo zusammen,
zunächst einmal herzlichen Dank an Carsten für die Anpassung des Moduls an die neue API-Authentifizierung.
In den letzten Tagen habe ich das Modul noch um die unten aufgeführten Möglichkeiten erweitert, die ich euch nicht vorenthalten möchte.
Den bisher vorhandenen Code habe ich weitestgehend gleich belassen.
Caching
Cachen des Authentifizierungs-Tokens, sowie der Colors.
Alle Daten bleiben nur solange im Cache, wie das Token gültig ist. Nach Ablauf des Tokens werden alle Daten aus dem Cache gelöscht und neu geladen.
Um den Cache vorzeitig zu löschen, muss die Datei .../smartVISU/temp/calendar_google.json gelöscht werden.
Anzeige mehrerer Kalender
Sollen Events aus mehreren Kalendern dargestellt werden, so können in der Konfiguration die IDs der Kalender durch Komma getrennt angegeben werden. Die Termine werden dann mit den Farben des jeweiligen Kalenders dargestellt, falls nicht explizit eine Farbe definiert wurde.
Die Standardfarben der verfügbaren Kalender werden gecacht und erst mit dem Ablauf des Tokens neu geladen.
Es können nur Kalender angezeigt werden, auf die der verwendete Google-Account berechtigt wurde.
PHP-Code:<?php
/**
* -----------------------------------------------------------------------------
* @package smartVISU
* @author Martin Gleiß (basic version), Carsten Gotschlich (google API V3), Thorsten Moll (cache, multiple calendars)
* @copyright 2012
* @license GPL [http://www.gnu.de]
* -----------------------------------------------------------------------------
*/
// Note: for debugging purposes you can execute this script from commandline with php -q <scriptname>
require_once '../../../lib/includes.php';
require_once const_path_system.'calendar/calendar.php';
require_once const_path_system.'class_cache.php';
/**
* This class reads a google calendar
*/
class calendar_google extends calendar
{
const CLIENT_ID = ''; // put your clientID here - from Google website
const CLIENT_SECRET = ''; // put your client Secret here - from Google WebSitr
const REFRESH_TOKEN = ''; // Put your google refresh token here - from other PHP script
var $calendar_ids = array();
/**
* initialization of some parameters
*/
public function init($request)
{
parent::init($request);
if ($this->url == '')
$this->url = 'primary';
if ($this->count == 0)
$this->count = 10;
$this->calendar_ids = explode(',' , $this->url);
}
public function run()
{
$cache = new class_cache('calendar_google.json');
// check for cached data
if ($cache->hit(3600)) {
$cache_content = json_decode($cache->read(), ture);
if ($cache_content['accessTokenExpiry'] < time()) {
// if token is not valid anymore reload everything cached
unset($cache_content);
}
}
if (!isset($cache_content['accessToken'])) {
$token_url = 'https://accounts.google.com/o/oauth2/token';
$post_data = array(
'client_secret' => self::CLIENT_SECRET,
'grant_type' => 'refresh_token',
'refresh_token' => self::REFRESH_TOKEN,
'client_id' => self::CLIENT_ID
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$token_object = json_decode($result);
$cache_content['accessToken'] = $token_object->{'access_token'};
$cache_content['accessTokenExpiry'] = time() + $token_object->{'expires_in'} - 60;
}
//---------------------------------------------------------------------
// so now we have an access-token, let's use it to access the calendar
$context = stream_context_create(array('http' => array('method' => "GET", 'header' => "Authorization: OAuth " . $cache_content['accessToken'])));
// first let's retrieve the colors and cache them
if (!isset($cache_content['calendarColors'])) {
$resturl = 'https://www.googleapis.com/calendar/v3/colors';
$content = @file_get_contents($resturl, false, $context);
if ($content !== false)
{
$result = json_decode($content,true);
$cache_content['calendarColors'] = $result["event"];
//var_dump($cache_content['calendarColors']);
}
}
// then retrieve the users calendars available and cache them, too
// do only if more than one calendar specified
if (count($this->calendar_ids) > 1 && !isset($cache_content['calendarList'])) {
$resturl = 'https://www.googleapis.com/calendar/v3/users/me/calendarList';
$content = @file_get_contents($resturl, false, $context);
if ($content !== false) {
$result = json_decode($content);
$calendarList = array();
foreach ($result->{'items'} as $entry) {
$cal = array();
$cal["description"] = $entry->{'summary'};
$cal["backgroundColor"] = $entry->{'backgroundColor'};
$calendarList[$entry->{'id'}] = $cal;
}
$cache_content['calendarList'] = $calendarList;
//var_dump($cache_content['calendarList']);
}
}
// retrieve the calendar entries from each calendar
$events = array();
foreach ($this->calendar_ids as $calendarid) {
$resturl = 'https://www.googleapis.com/calendar/v3/calendars/'. $calendarid . '/events?maxResults='. $this->count .'&q=-%22%40visu+no%22&singleEvents=true&orderBy=startTime&timeMin='.urlencode(date('c'));
$content = @file_get_contents($resturl, false, $context);
$this->debug($content);
// for debugging purposes only
// echo $content;
// echo "###########";
if ($content !== false)
{
$result = json_decode($content,true);
foreach ($result["items"] as $entry)
{
$startstamp = (string)($entry["start"]["dateTime"]);
$endstamp = (string)($entry["end"]["dateTime"]);
if ($startstamp == '')
$startstamp = (string)($entry["start"]["date"]);
if ($endstamp == '')
$endstamp = (string)($entry["end"]["date"]);
$start = strtotime($startstamp);
$end = strtotime($endstamp);
$color = '';
if (((string)($entry["colorId"]))!='') {
$color=$cache_content['calendarColors'][(string)($entry["colorId"])]['background'];
}
else if (count($this->calendar_ids) > 1) {
$color=$cache_content['calendarList'][$calendarid]['backgroundColor'];
}
$events[$start] = array(
'start' => date('y-m-d', $start).' '.date('H:i:s', $start),
'end' => date('y-m-d', $end).' '.date('H:i:s', $end),
'title' => (string)($entry["summary"]),
'content' => (string)($entry["description"]),
'where' => (string)($entry["location"]),
'color' => $color,
'link' => (string)($entry["htmlLink"])
);
}
}
else
{
$this->error('Calendar: Google', 'Calendar '. $calendarid .' read request failed!');
}
}
// finally re-order the events comming potentially from different calendars
$i = 1;
ksort($events);
foreach($events as $event) {
$event['pos'] = $i++;
$this->data[] = $event;
if ($i > $this->count) break;
}
// at the end write back cache
$cache->write( json_encode($cache_content) );
}
}
// -----------------------------------------------------------------------------
// call the service
// ----------------------------------------------------------------------------
//
$service = new calendar_google(array_merge($_GET, $_POST));
echo $service->json();
?>
Einen Kommentar schreiben:
-
Hallo, sehe ich es recht, dass nur einer der Kalender eines Accounts unterstützt wird?
Einen Kommentar schreiben:
-
Hi,
ok habe es hin bekommen, musste nur die KalenderID in die URL einfügen danach ging es.
Gruß
Marco
Einen Kommentar schreiben:
-
Hallo,
super Arbeit !!!
Aber irgendwie mache ich etwas falsch beim konfigurieren :-( da bei mir keine Einträge angezeigt werden.
Oder kann man nur den ersten/primary Kalender anzeigen oder ich habe da was falsch konfiguriert.
System: GoogleV3
URL: Müllkalender (Kalendername in Google)
Gruß
Marco
Einen Kommentar schreiben:
-
Hallo Carsten,
besten Dank für die super Umsetzung und die genaue Beschreibung, Goggle Kalender funktioniert wieder, echt TOLL!!!
Gruß
Georg
Einen Kommentar schreiben:
-
Hallo,
nachdem ich jetzt mit meiner Visu schon ein gutes Stück voran gekommen bin, bin ich auf verschiedene Kalenderplugins gestoßen.
An der Google-Version gefällt mir besonders gut, dass man über die @icon- und @color-Tags gleich das Icon konfigurieren kann - allerdings benutze ich ownCloud in Verbindung mit dem CalDav-Plugin.
Gibt es eine Möglichkeit, den Parsercode für das andere Plugin umzuschreiben? Ich muss zugeben, dass ich nicht gefunden habe, wo tatsächlich dieses Parsing passiert. Ich habe verstanden, dass Google über JSON und CalDav über XML ausgelesen werden und vermute, dass durch die spezielle Codierung das Parsing ein Automatismus im JSON-Code ist -- sicher bin ich mir indes nicht.
Kann mir jemand einen Tip geben, wie ich das ggf. mit überschaubarem Aufwand umbauen kann (oder hat das schon jemand gemacht? :-) )
Gruß Sebastian
Einen Kommentar schreiben:
-
Herzlichen Dank schon einmal für Eure massive Vorarbeit!
Habe heute mit dem Thema Google Calendar V3 gestartet.
Leider harpert es bei mir am Ende. Das Feedback über die Console fürist meiner Einschätzung nach plausibel:Code:php -q googleV3.php
Allerdings gibt mir SmartVisu nach Auswahl der "googleV3" nur eine Fehlermeldung:Code:[FONT=courier new][{"pos":1,"start":"15-05-29 19:30:00","end":"15-05-29 21:00:00","title":"Test","content":"","where":"","color":"","link":"https:\/\/www.google.com\/calendar\/event?eid=ODVmMmZvdTliamgydWxsYmRpMDl2YTZ1ZnMgcmFkMgcmFk","starttime":"19:30","endtime":"21:00","period":"29.05.15 19:30 - 21:00","weekday":"Freitag","icon":"pages\/base\/pics\/trans.png"}][/FONT]Hat jemand eine Idee?Code:Calendar read request failed!
Viele Grüße,
Oliver
Einen Kommentar schreiben:
-
Herzlichen Dank auch vion mir - es funktioniert!
Leider bekomme ich es nicht hin, andere als meinen persönlichen Kalender abzurufen? Der von meiner Frau und z.B. die deutschen Feiertage (ein dritter der von Google bereit gestellt wird) sind zwar an den Tablets und Telefonen sichtbar, aber scheinbar nicht ohne weiteres über die API. Hat jemand einen Tipp?
Viele Grüße
Robert
Einen Kommentar schreiben:
-
Hab es auch soeben eingearbeitet und stelle fest: "Es funktioniert"
:-)
Vielen Dank nochmal
Einen Kommentar schreiben:


Einen Kommentar schreiben: