Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
@OsLee540i, @valleyman - seid Ihr sicher. daß die Calendar API auch aktiviert ist ?
Falls ja, könnt ihr Euch auch mal in Zeile 20 mit
Code:
echo $result;
Das Ergebnis des Aufrufs ausgeben lassen.
Und nur nochmal zur Sicherheit: am einfachsten auf der Maschine ausführen wo auch SmartVisu (und ggg. smarthome.py) läuft - da ist eigentlich alles vorhanden...
sollte eigentlich kein Problem sein, das wird gesteuert durch den Text im Termin.
Als Beispiel: Bei mir benutze ich folgende Einträge für die Tonnen (das ist jeweils Betreff und Inhalt eines Kalendereintrags):
1. In welcher Datei wird das eingetragen damit ich die Tonnen sehe.
2. Bei mir werden ganztägige Kalendereinträge falsch angezeigt.
Siehe Anhang.
Es gibt 3 Testeinträge. Die ersten beiden passen so und sind jeweils Einträge mit Uhrzeit.
Der 3 Eintrag (Salzburg) ist ein ganztägiger Termin von 19.12 - 21.12.
Richtig gereiht ist der Termin ja, aber das Datum bzw. die Uhrzeit was da angezeigt wird ist genaus welches vorliegt wenn man Smartvisu aufruft.
Ich komme mit der Anleitung von Post 1 genau bis zur Ausführung vom Google_2.php
Also die Google_2.php hab ich mit meinen sachen angepasst.
PHP-Code:
<?php
$url = 'https://accounts.google.com/o/oauth2/token';
$post_data = array(
'code' => '6/blablabla_blubblubblub.zahlenundbuchstaben', // insert the code here that was shown after calling the URL from google_1.php
'client_id' => 'zahlen-zahlenundbuchstaben.apps.googleusercontent.com', // insert your client ID here
'client_secret' => 'blabla-blubblub', // insert your client secret here
'redirect_uri' => 'urn:blub:bla:oauth:2.0:oob', //insert your redirect URI here (first line only)
'grant_type' => 'authorization_code',
);
$ch = curl_init();
wenn ich das im Chrome ausführe passiert einfach nichts, und über die Console kommt:
Trying to get property of non-objekt in google_2.php line 20
Ich hab das Prozedere jetzt schon 5 mal durch, hab auch schon die Client ID gelöscht und ne neue gemacht, dann natürlich mit den neuen Daten die google_1.php befüllt, aber das Ergebnis ist immer das selbe.
Der Key ist ja für das OAuth relevant, ich hab mir aber die API mal angesehen und dann die "googleV3" modifiziert so das es jetzt mit dem gewünschten Kalender funktioniert. (siehe: https://developers.google.com/google...ce/events/list)
Theoretisch könnte man halt auch das Feld weiter benutzen und die URL aus dem GET Request auf den Service rausholen, aber mir reichte das an der Stelle "quick & dirty". Alternativ noch zusätzlich das Calendar-Widget modifizieren, dass man mehrere verschiedene Kalender einbinden könnte. ;-)
/**
* This class reads a google calenda
*/
class calendar_google extends calendar
{
/**
* initialization of some parameters
*/
public function init($request)
{
parent::init($request);
}
/**
* Check if the cache-file exists
*/
public function run()
{
//---------------------------------------------------------------------
// let's define some parameters - they need to be fetched manually
//---------------------------------------------------------------------
$client_id = ''; // put your clientID here - from Google website
$client_secret = ''; // put your client Secret here - from Google WebSite
$redirect_uri = ''; // put you redirect URI here from Google Website - only first line !
$refresh_token = ''; // Put your google refresh token here - from other PHP script
$calendar_id = ''; // get it this way: http://googleappstroubleshootinghelp.blogspot.de/2012/09/how-to-find-calendar-id-of-google.html
//---------------------------------------------------------------------
// get access token first
$token_url = 'https://accounts.google.com/o/oauth2/token';
$post_data = array(
'client_secret' => $client_secret,
'grant_type' => 'refresh_token',
'refresh_token' => $refresh_token,
'client_id' => $client_id
);
$ch = curl_init();
//---------------------------------------------------------------------
// 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 " . $access_token)));
$resturl = 'https://www.googleapis.com/calendar/v3/calendars/'. $calendar_id . '/events?maxResults=5&singleEvents=true&orderBy=startTime&timeMin='.urlencode(date('c'));
$content = @file_get_contents($resturl, false, $context);
$this->debug($content);
if ($content !== false)
{
$result = json_decode($content,true);
// -----------------------------------------------------------------------------
// call the service
// ----------------------------------------------------------------------------
$service = new calendar_google(array_merge($_GET, $_POST));
echo $service->json();
erst mal vielen Dank für die Umsetzung, ich habe aber ein etwas merkwürdiges Verhalten festgestellt.
Ich habe in meinem Google Account mehrere Kalender definiert und habe mir die XML-URL vom "Müllkalender" herauskopiert.
Wenn ich die URL direkt im Browser aufrufe bekomme ich auch die richtigen Einträge im XML zurück.
Trage ich die URL in meine Smartvisu ein, so bekomme ich ganz andere Termine (aus anderen Kalendern) angezeigt.
Kann das jemand nachvollziehen, oder hab ich gerade einfach n Brett vorm Kopf warum das so sein könnte?
EDIT: ich glaube ich hab das Problem gefunden, momentan wird immer der "primary" Kalender abgerufen, und der ist natürlich nicht der den ich brauche.
Die URL im Smartvisu ist mit der V3 Lösung soweit ich das erkennen kann überflüssig
Zurück kommt eine URL, diese im Browser aufrufen. Es erscheint die berühmte Bestätigungsseite, hier bestätigen und Voila, es erscheint der Auhorization Code.
Wenn ich diese URL in den Browser eingebe kommt leider immer ein 401 oder 400 Fehler.
EDIT: Funkt schon. Falls das noch wer hat. Habe beim Punkt davor meine E-Mail nicht ausgewählt.
Weist du auch zufällig noch, wo ich das Datumsformat welches da angezeigt wird ändern kann? Ich möchte da gern 10. Dezember 2014 stehen haben und nicht 12/10/14
sollte eigentlich kein Problem sein, das wird gesteuert durch den Text im Termin.
Als Beispiel: Bei mir benutze ich folgende Einträge für die Tonnen (das ist jeweils Betreff und Inhalt eines Kalendereintrags):
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: