Google Kalender Termine im WebFront anzeigen

Er hat verm. die email Adresse nicht eingetragen, die er für seinen Google Account braucht.
Verm. hat er nur die generierte Adresse für das Project genommen, also die lange.
Kann das sein?

$C["CALENDAR"]   = "Name des Kalenders zb. XXXXXXX@googlemail.com"; 

oder den Projektnamen nicht?

$client->setApplicationName("XXX");

Grüße,
Doc

Hallo alle zusammen,

ich habe das Script zum lesen von einem oder mehreren Kalender fertig.

Kann das mal jemand testen bei dem es schon läuft?

@Martin vielen dank für die info

@Doc
die Vermutung mit dem Projektnamen hatte ich auch schon, leider war es das auch nicht.
Ich habe es auch mit der Projektnummer versucht

Mit der Zustimmung sollte eigentlich auch alles ok sein.

Komisch ist das Googel Clientfehler meldet

Hallo alle zusammen.

Ich habe das Lesen Script für nur einen Kalender optimiert.

@Teas1512

Ich schau mal ob ich am Wochenende eine Anleitung schreibe.
Der Weg zum Ziel ist zugegebener weise etwas steinig!

Hi Martin

das wäre super wenn du noch mal ein paar Punkte zur Freigabe von Google api schrieben könntest.
Vieleicht mache ich doch noch irgentetwas falsch.

Der Weg zum Ziel ist zugegebener weise etwas steinig!

Aber es ist sehr erfreulich wenn es dann zum Schuss doch irgendwann klappt.
Vorallem mit der hilfe aus dem super Forum hier.

Gruss Stephan

Du verwendest also 2 verschiedene email Adressen in dem Script oder hast du es schon hin bekommen?
Poste doch mal dein kompl. Script und die aktuelle Fehlermeldung.

Grüße,
Doc

Hallo Doc,

ich Probiere mit den Orginal Scripte von Stele99 und von Schablone


<?

    $C["CLIENT-ID"]   = "455432008151-q04rbdr3ckadb9fkpaji59vta5n40lq4.apps.googleusercontent.com";
    $C["EMAIL"]       = "45543200815-q04rbdr3ckadb9fkpaji59vta5n40lq4@developer.gserviceaccount.com";
    $C["PRIVATEKEY"]  = "C:\IPS-Eigene_Dateien\IPS-Kalender-0815.p12";
    $C["CALENDAR"]   = "Mail@googlemail.com";

    $C["LINESEP"]    = "<br>
";

    require_once 'google-api-php-client/autoload.php';

    $client = new Google_Client();
    // Replace this with your application name.
    $client->setApplicationName("IPS");
    $service = new Google_Service_Calendar($client);

    $key = file_get_contents($C["PRIVATEKEY"]);
    $cred = new Google_Auth_AssertionCredentials(
                                                          $C["EMAIL"],
                                                         array('https://www.googleapis.com/auth/calendar.readonly'),
                                                          $key
                                                                );
    $client->setAssertionCredentials($cred);

    $cals = $service->calendarList->listCalendarList();

    // Convert recurring events to single events
    // Look for events in the next week - now to now+1week
    $params = array(
     'singleEvents' => TRUE,
     'timeMin' => (new DateTime())->format(DateTime::RFC3339),
     'timeMax' => (new DateTime())->add(new DateInterval('P1W'))->format(DateTime::RFC3339),
    );
    $events = $service->events->listEvents($C["CALENDAR"], $params);

 $caltxt ="";
    foreach ($events->getItems() as $event) {
     $eventDate = $event->getStart()->dateTime;
     $evDate = new DateTime($eventDate);
     $date = $evDate->getTimestamp();
     $caltxt .= (date("H:i", $date) != "00:00")?date("d.m.Y H:i", $date)." ":date("D d.m.Y", $date )." ";
     $caltxt .= utf8_decode($event->getSummary());
     $caltxt .= $C["LINESEP"];
    }

// jetzt was zb. in eine variable schreiben etc.

if($_IPS['SENDER'] == "Execute")
{
    echo "<pre>";
    echo $caltxt;
}
?>


<?

/*=============================================================
skrGoogleKalenderLesen - Martin Heinzel - 01.05.2012
Version: 2.0

Beschreibung:
Mit diesem Script werden die nächsten "X" Termine aus den Google Kalendern
gelesen.

Änderungen
----------

07.06.2012 von Version 0.1 -> 1.0

Beschreibung:

Erste Version des Scriptes. Geändert wurde:

-    Es werden nun Start und Endzeit angegeben.
-    Bei ganztägigen Terminen steht anstelle der Zeit der Text „Ganztägig“
-    Vor dem Termin steht in eckigen Klammern der Kalender, aus dem der Termin ist.
   Die Anzahl der angezeigten Zeichen des Kalendernamens kann eingestellt werden.

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

================================================================*/

//#################################### Bitte einstellen #####################################################################

$Client_ID            =  "45543200815-q04rbdr3ckadb9fkpaji59vta5n40lq4.apps.googleusercontent.com";
$EMail                   =  "45543200815-q04rbdr3ckadb9fkpaji59vta5n40lq4@developer.gserviceaccount.com";
$key_file_location   =  IPS_GetKernelDir()."scripts\\certificates\\IPS-Kalender-0815.p12";
$calendar_login         =    array('Mail1@googlemail.com',);
 //                                  'Mail2@googlemail.com'

$message_count        = 10;                            //Anzahl der Meldungen
$whoCounts           = 3;                             //Anzahl der dargestellten Zeichen des Kalenders

//###########################################################################################################################


// Variablen Deklaration --------------------------------------

// Variablen
//--------------

$StartTimes       =  array();
$EndTimes           =  array();
$Titles              =  array();

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("IPS");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============

// Die einzelnen Kalender abfragen
foreach ($calendar_login as $Calender_ID)
{

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents'     => True,
                         'timeMin'             => (new DateTime())->format(DateTime::RFC3339),
                        'orderBy'             => 'startTime',
                        'maxResults'        => $message_count);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

    // Das Ergebnis durchsuchen
    foreach ($events->getItems() as $event)
    {
//       print_r($event);
        // Auslesen der Startzeit
        If($event->getStart()->dateTime <> "")
        {
           $Date_Time_Start      = $event->getStart()->dateTime;
           $Date_Time_End         = $event->getEnd()->dateTime;
        }
        else
        {
            $Date_Time_Start      = $event->getStart()->date;
           $Date_Time_End         = $event->getEnd()->date;
        }

      $StartTimes[]     = EventTime_to_TimeStamp($Date_Time_Start);
        $EndTimes[]     = EventTime_to_TimeStamp($Date_Time_End);
       $who           = utf8_decode($event->getOrganizer()->displayName);
       $who_substr    = substr($who, 0, $whoCounts);
        $Titles[]          = "[".$who_substr."] ".utf8_decode($event->getSummary());
    }
}

array_multisort($StartTimes,SORT_ASC,$Titles,$EndTimes);    //Arrays sortieren
$count   = count($StartTimes);                                    //Anzahl der Termine

//Max Schleifenzählers
if($count <= $message_count){    $i = $count; }
else                        {    $i = $message_count; }
$sz      = 0;                                                             //Schleifenzähler

//Terminanzeige zusammenbauen
$event_display = "";                                        // Initialisieren der Anzeige

while($sz < $i)
{
    //Abfrage ganztägiger Termin
    if(Date("H:i:s",(int)$StartTimes[$sz]) === "00:00:00")
    {
        $event_display .= Date("d.m.Y",(int)$StartTimes[$sz])." ---  Ganztägig  ---   ".$Titles[$sz]."
";
    }
    else
    {
        $event_display .= Date("d.m.Y H:i:s",(int)$StartTimes[$sz])." - ".Date("H:i:s",(int)$EndTimes[$sz])."   ".$Titles[$sz]."
";
    }
    $sz++;
}

//echo $event_display;
SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~TextBox"), $event_display);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

/**
 * Returns a timestamp of the Google event Time
 *
 * @param  string $eventTime The Google event Time in "2010-06-11T07:30:00.000-07:00"
 * @return int Timestamp of the Google event Time
 */
function EventTime_to_TimeStamp($eventTime)
{

        // Zerlegen der Startzeit
        if(strpos($eventTime, "T")>0)
        {
            //Datum
            $arrDate_Time     =     explode("T", $eventTime);
            $Date             =  $arrDate_Time[0];
            $arrDate         =  explode("-", $Date);
            $term_jahr     =  (int)$arrDate[0];
            $term_monat    =     (int)$arrDate[1];
            $term_tag      =  (int)$arrDate[2];

            //Uhrzeit
            $arrTime         =  explode("+", $arrDate_Time[1]);
            $Time          =  substr($arrTime[0], 0, 8);
            $arrTimeVal        =  explode(":", $Time);
            $term_Stunde   =  (int)$arrTimeVal[0];
            $term_Minute   =  (int)$arrTimeVal[1];
            $term_Sekunde  =  (int)$arrTimeVal[2];

        }
        else
        {
            //Datum
            $arrDate         =  explode("-", $eventTime);
            $term_jahr     =  (int)$arrDate[0];
            $term_monat    =     (int)$arrDate[1];
            $term_tag      =  (int)$arrDate[2];

            //Uhrzeit
            $term_Stunde   =  0;
            $term_Minute   =  0;
            $term_Sekunde  =  0;
        }

    return mktime($term_Stunde, $term_Minute, $term_Sekunde, $term_monat, $term_tag, $term_jahr);
}

//--------------------- Funktionen ENDE ----------------------
?>

bei beiden Scripts habe ich die aktuell die exakt die gleiche Fehlermeldung

Fatal error: Uncaught exception ‚Google_Service_Exception‘ with message ‚Error calling GET https://www.googleapis.com/calendar/v3/calendars/Mail%40googlemail.com/events?singleEvents=true&timeMin=2014-11-28T20%3A48%3A40%2B01%3A00&timeMax=2014-12-05T20%3A48%3A40%2B01%3A00: (404) Not Found‘ in C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php:83
Stack trace:
#0 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php(41): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Client.php(563): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#2 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Service\Resource.php(227): Google_Client->execute(Object(Google_Http_Request))
#3 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Service\Calendar.php(1561): Google_Service_Resource->call(‚list‘, Array, ’ in C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php on line 83
Abort Processing during Fatal-Error: Uncaught exception ‚Google_Service_Exception‘ with message ‚Error calling GET https://www.googleapis.com/calendar/v3/calendars/S.krebs1512%40googlemail.com/events?singleEvents=true&timeMin=2014-11-28T20%3A48%3A40%2B01%3A00&timeMax=2014-12-05T20%3A48%3A40%2B01%3A00: (404) Not Found‘ in C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php:83
Stack trace:
#0 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php(41): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Client.php(563): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#2 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Service\Resource.php(227): Google_Client->execute(Object(Google_Http_Request))
#3 C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Service\Calendar.php(1561): Google_Service_Resource->call(‚list‘, Array, ’
Error in Script C:\Program Files\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php on Line 83

An den Einstellungen von den zuvor geposteten Bildern hat sich nicht geändert.
Ich habe auch das API Projekt auch schon einmal gelöst und neu erstellt. Der Fehler bleibt der selbe.
Wenn ich noch irgendwelche Log oder Bilder von irgendwelchen Einstellung posten soll sagt mir bescheid.
Ich bin für jeden Tipp Dankbar.

Gruß Stephan

PS: Die ID’s sind alle verändert

Hallo…

habt Ihr in Eurem Script die richtige Kalender-ID eingetragen (siehe Bild1) und den Kalender freigegeben (siehe Bild 2)

Gruß

Swifty

Also es sieht für mich so aus, als ob er das Key-File oder die Google Scripte nicht findet?

Hast du darauf geachtet, dass Verzeichnis von der Google API (Download) und das Verzeichnis hier im Script etwas unterschiedlich war. Ich glaube bei Google hing noch ein „Master“ oder so dran.

Du verwendest zum Pfad zum Keyfile immer backslash „“, ich glaube das sollte besser slash „/“ sein. Evtl spielt das noch eine Rolle.

Grüße,
Doc

Ich gehe doch mal davon aus das dein „mail@googlemail.com“ in deinem Sript nur hier veröffentlich so drin steht und sonst deine richtige Adresse?

Doc

Hallo Zusammen

@Doc
ja, normal steht da die Richtige Mail drin.

Aber ich kann sagen das es jetzt läuft !!!:):):):):slight_smile:
Es war der Tipp von Swifty aus Bild 2. Adresse eingetragen und frei gegeben.
Da muss man erst mal drauf kommen das man in Kalender selbst noch eine Freigabe setzten muss.

Jetzt muss nur noch das alte design wieder rein und alles läuft wie gewohnt.

Prima und Danke noch mal an alle.

Gruß Stephan

OK, dachte das hättest du schon nach der guten Anleitung so durchgeführt.
Aber Hauptsache, es läuft nun.

Dann kommen jetzt ja bald noch ein paar gute weitere Scripte :wink:

Grüße Doc

Hallo alle zusammen.

Ich habe die Beschreibung fertig.
Kann das mal jemand prüfen und ggf korrigieren?

Hallo Martin,

die Anleitung ist super. Ich wüste ncht was man besser machen könnte.

Gruß Stephan

Erst mal danke dafür !

Bin aber gescheitert an

  1. Aus dem alten OpenSSL Paket (Version 0.9.8zc, https://www.openssl.org/)die Dateien ssleay32.dll und libeay32.dll in den IPS Ordner (alte umbenennen)

Der Link hat einen kleinen Fehler; aber selbst wenn man ihn korrigiert auf https://www.openssl.org/ finde ich die Dateien ssleay32.dll und libeay32.dll aus der Version 0.9.8zc nicht.
Ich hab mir von dort openssl-0.9.8zc.tar.gz geholt, finde darin aber keine fertigen DLLs

Bitte um nähere Beschreibung des möglichen Fundortes :slight_smile:

Viele Grüsse
Harald

Nemmt doch einfach das ZIP-File hier aus den Forum.
Da sind doch beide Dateien drin?
http://www.ip-symcon.de/service/dokumentation/installation/migration-v24-v25/
Doc

Kannst du mir/uns veraten, wie du die Termine in Variablen wegschreibst ?

Ich habe den Link in 14. korrigiert.

Unter dem Script erschein eine Variable mit dem Namen Kalender.
Da stehen deine Termine drin!!

Ich habe den HTML-Monatskalender fertig.