Ankündigung
Einklappen
Keine Ankündigung bisher.
Google Calendar - update für "neue" GoogleAPI
Einklappen
X
-
Bei mir steht bspw. 03.11.15 00:00 - 04.11.15 00:00. Habe aber nur einen Kalender drin. Ist das nur bei mehreren?
-
Hallo,
Habe in der Konfiguration mehrere Kalender angegeben (meiner, Frau, Feiertage). Soweit alles super. Jetzt ist mir aufgefallen wenn ich in meinem Kalendar einen ganztägigen Termin eintrage, z.b. Urlaub, Geburtstag, wird mir dieser in der Visu nicht angezeigt. Ändere ich den Termin z.b. auf 00:00 bis 23:59 ist er plötzlich sichtbar. Dies gilt auch für Termine über mehrere Tage.
Ist dies sonst noch jemanden aufgefallen?
Einen Kommentar schreiben:
-
ja in der config, per page. obs das jetzt ist glaube ich nicht. bei dir sieht es aus wie wenn er entweder 2mal einen header senden will oder irgendwo eine debugausgabe reinkreuzt.. einfach mal sicherstellen, dass das file das originalfile ist.
Einen Kommentar schreiben:
-
dake psilo,
evtl bin ich einen Schritt weiter, nun folgt diese Nachricht:
Wo machst Du das:Code:/var/www/smartvisu/lib/calendar/service$ php -q googleV3.php PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/smartvisu/lib/calendar/service/googleV3.php:1) in /var/www/smartvisu/lib/service.php on line 95 [{"title":"Calendar: Google","text":"Calendar primary read request failed!"}]
Auf der Config-Page? -Das bewirkt (noch) nichts.Zitat von psilo Beitrag anzeigenIch hab das @ encoded alias: "%40googlemail.com"
danke und Gruß,
Lio
Einen Kommentar schreiben:
-
Ich hab das @ encoded alias: "%40googlemail.com"
Bei Dir kommt aber ein klarer PHP Fehler raus. Das müsste man tiefer anschauen.
Liegen die Filers korrekt unter lib/calendar/service? Und liegt die includes.php da wo sie soll, also unter lib? Er geht ja 3 Directories rauf und dann wieder unter lib.. Ansonsten ggf. PHP Konfigurationssache?! Oder mal absolut includen.Zuletzt geändert von psilo; 18.10.2015, 13:04.
Einen Kommentar schreiben:
-
Hallo Zusammen,
konnte mich soweit durchhangel und scheitere nun aber bei googleV3.php.
Auf der Page gibt's den Fehler: "Calendar mailadresse@gmail.com read request failed!"
die CalenderID ist nur die reine mailadresse?!
Auf der Console gibt es mir diesen Code aus:
Zeile 13 im Script:Code:admin@smarthome:/usr/smarthome$ php -q /var/www/smartvisu/lib/calendar/service/googleV3.php PHP Warning: require_once(../../../lib/includes.php): failed to open stream: No such file or directory in /var/www/smartvisu/lib/calendar/service/googleV3.php on line 13 PHP Fatal error: require_once(): Failed opening required '../../../lib/includes.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/smartvisu/lib/calendar/service/googleV3.php on line 13
Wäre für eine Hilfe dankbar.Code:require_once '../../../lib/includes.php';
Danke und Grüße.
Lio
Einen Kommentar schreiben:
-
Hallo zusammen,
ich verzweifel auch langsam hier....
Die Tokens und Skripte sind alle generiert und konfiguriert, ich bekomme aber keinen Kalender im Smartvisu angezeigt.
Wenn ich mein Skript an der Konsole ausführe, bekomme ich lauter "php NOTICE Undefined index" und am Ende dann aber auch Daten aus meinem Kalender - d.h. die ganze Authentifizierung funktioniert, und irgendwo stimmt in meinen Skripten was nicht.
Update: Wenn ich das googleV3.php Browser aufrufe, bekomme ich direkt die Kalenderdaten in folgendem Format dargestellt, d.h. die Googleabfrage funktioniert!?
[{"pos":1,"start":"15-10-07 06:00:00","end":"15-10-07 06:15:00","title":"Tho: Auto Neuk\u00f6lln","content":"","where":"","link":"htt ps:\/\/www.google.com\/calendar\/event?eid=NWxuYT..............
Das sieht auf den ersten Blick richtig aus, oder?
Jetzt muss ich nur noch auflösen, warum die Darstellung nicht funktioniert - hat vielleicht jemand nen Tip bzgl typischer Fehlerquellen?
Danke und viele Grüße
Thorschtn
// Update: Augenscheinlich war ich zu ungeduldig. Die obige Ausgabe des googleV3.php ist korrekt. Ich weiss nicht, warum Smartvisu anfangs den Kalender nicht dargestellt hat (Caching war ausgestellt, RPI und Browser hatte ich auch bereits neu gestartet) - aber einen halben Tag später gings auf einmal, ohne, dass ich noch etwas dran ändern musste....Zuletzt geändert von thorschtn; 08.10.2015, 07:49.
Einen Kommentar schreiben:
-
Hallo Zusammen,
ich habe ein Problem mit der Darstellung des Googlekalenders in meiner Visu.
Ich bekomme die Termine nur angezeigt, wenn ich zuvor mittels Putty ins passende Verzeichnis wechsle und die Datei mit folgendem Befehl ausführe:
php -q googleV3.php dann zeigt es mir die Termine für eine gewisse Zeit an und verschwinden wieder, anschliessend muss ich wieder die Datei googleV3.php ausführen.
@ nEiMi
zu 1. ja muss mit dran
zu 2. da hab ich auch die erste Zeile genommen
habe auch mehrer Versuche gebraucht bis die Scripte alle funktionierten
Gruß
Einen Kommentar schreiben:
-
Hallo zusammen,
ich schaffs nicht mir dieses Refresh-Token zu generieren... beim 2ten Script bekommen ich immer folgenden Fehler:Habe dort wie im Thread erwähnt schon das echo $result eingefügtCode:"error" : "invalid_grant" }PHP Notice: Undefined property: stdClass::$refresh_token in /tmp/google_2.php on line 20
Vielleicht trage ich ja die falschen Sachen ein, daher 2 Fragen:
1. Muss bei der Client-ID das ".apps.googleusercontent.com" mit dran?
2. Wo finde ich die Redirect-URI? ich habs bisher mit "urn:ietf:wg
auth:2.0
ob" oder "http://localhost" probiert...
Vielleicht könnte ja jemand mal ein funktionierendes Beispiel(mit gefakten Daten) posten wie die beiden Scripte befüllt werden müssen....
Danke schonmal...
Einen Kommentar schreiben:
-
Funktioniert doch. Ich bin nicht sicher, was faul war.
Danke!
Einen Kommentar schreiben:
-
Hallo Alex,
leider hat das noch nicht geholfen:
Code:/var/www/html/visu/lib/calendar/service# php -q googleV3.php [{"title":"Calendar: Google","text":"Calendar primary read request failed!"}]
Kann man dem Skript noch Details herauslocken (Warum failed?)?
Habe es gerade noch einmal mit der älteren Version geprüft um Autentifizierungsprobleme auszuschließen. Damit funktioniert es weiterhin.
Gruß,
HendrikZuletzt geändert von henfri; 22.08.2015, 10:08.
Einen Kommentar schreiben:
-
Hallo zusammen,
in dem Post oben ist noch ein Fehler:
müsste sein:PHP-Code:$cache_content = json_decode($cache->read(), ture);
GrußPHP-Code:$cache_content = json_decode($cache->read(), true);
Alex
Einen Kommentar schreiben:
-
Hallo,
danke für die neue Version
leider funktioniert der Kalender (auch die vorherige) nicht mehr:
Hast du eine Idee?Code:php -q googleV3.php [{"title":"Calendar: Google","text":"Calendar primary read request failed!"}]root@homeserver:/var/www/html/visu/lib/calendar/ser vice
Gruß,
Hendrik
Einen Kommentar schreiben:
-
Hallo Thorsten
Es funktioniert nun alles bestens! php5-curl war auf dem Raspberry nicht installiert! Mein Screenshot in Post #92 war somit aktuell, es muss dort der Punkt "Sonstige" ausgewählt werden, es gibt keinen Punkt "Installierte Anwendung"; ggfs. in der Anleitung korrigieren.
Was noch eine Option wäre, dass eine Serie bloss als ein einziger Eintrag angezeigt wird, da eine Serie sonst die ganze Anzeige zumauert.
Danke für Deinen guten Support!
Dieter
Einen Kommentar schreiben:
-
Das Problem war die Raute "#" in der Kalender-ID. Diese musste escaped werden. Unten angefügt eine aktualisierte Version in der das Problem behoben sein sollte.Zitat von henfri Beitrag anzeigen...
Das einzige, was nicht funktioniert:
addressbook #contacts@group.v.calendar.google.com
@Dieter: Bei mir sah das auf jeden Fall anders aus. Leider kenne ich mich mit der Authentifizierung und den Google-Projekten nicht wirklich aus. Vielleicht hat Carsten noch eine Idee.
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 calenda
*/
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/'. urlencode($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();
?>Zuletzt geändert von CodeRed; 17.08.2015, 19:50.
Einen Kommentar schreiben:


Einen Kommentar schreiben: