• Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen
    • Suche
    • Registrieren
    • Anmelden

    API via PHP getCalendarEvents -

    ChurchTools Schnittstellen
    4
    13
    2.1k
    Lade mehr Beiträge
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
    • S
      samdre
      zuletzt editiert von samdre

      Hallo Zusammen,
      leider komme ich mit dem API-Zugriff auf die Kalender nicht weiter (Der "öffentlicher Benutzer" darf alle Kalender ansehen):

      Meine Testausgabe (die nicht funktioniert):
      http://www.coc-ek.de/churchtools/calenderEvents.php

      // PHP START

      include_once('helper.php');

      // Get Calendar events. Make sure the calendar is available for public user
      // otherwise login before
      $url = 'https://coc-ek.churchtools.de/index.php?q=churchcal/ajax';
      $data = array('func' => 'getCalendarEvents',
      'category_ids' => [1,2,3],
      'from' => 0,
      'to' => '10');
      $result = sendRequest($url, $data);
      if ($result->status == "fail") {
      echo $result->data;
      return;
      }

      echo " Ausgabe: ";
      print_r($result->data);
      echo "";

      // PHP ENDE

      Beim Ausführen kommt immer "There is an error: Parameter func not defined!".

      Habe den PHP-Code von GitHub: https://github.com/churchtools/ctapidemo

      Wo finde ich die IDs der verschiedenen Kalender?

      Vielen Dank im Voraus!

      1 Antwort Letzte Antwort Antworten Zitieren 0
      • H
        hallo144
        zuletzt editiert von

        Hallo @samdre,

        das liegt daran, dass die API-Zugriffe nur noch über "coc-ek.church.tools funktionieren. Das wurde mal umgestellt, aber anscheinend im Beispiel-Code nicht nachgezogen.

        Im Beispiel-Code ist auch die Angabe der "category_ids" falsch (zumindest funktioniert es bei mir so nicht), richtig müssen die so angegeben werden

        'category_ids[]' = '1',
        'category_ids[]' = '2',
        'category_ids[]' = '3',
        

        Dieser Code sollte dann also funktionieren:

        include_once('helper.php');
        
        // Get Calendar events. Make sure the calendar is available for public user
        // otherwise login before
        $url = 'https://coc-ek.church.tools/index.php?q=churchcal/ajax';
        $data = array('func' => 'getCalendarEvents',
        'category_ids[]' => '1',
        'category_ids[]' => '2',
        'category_ids[]' => '3',
        'from' => 0,
        'to' => '10');
        $result = sendRequest($url, $data);
        if ($result->status == "fail") {
        echo $result->data;
        return;
        }
        
        echo " Ausgabe: ";
        print_r($result->data);
        echo "";
        

        Die Id eines Kalenders findest du z.B. in den Einstellungen für den jeweiligen Kalender oder man kann sie auch aus der ical-URL herauslesen.
        0_1517223947222_efbd0c39-21d6-410d-8b56-e5975a3a7472-image.png

        PS: Ich finde es deutlich einfacher, die API-Aufrufe erstmal mit Postman zu testen, es geht schneller und man sieht auch gleich, was man da zurückbekommt.
        0_1517223821537_bfcbd00c-6e9b-46d5-be7a-67902649c59e-image.png

        3.x Hosting und Selbsthosting, ich betreue mehrere Installationen

        1 Antwort Letzte Antwort Antworten Zitieren 0
        • S
          samdre
          zuletzt editiert von samdre

          Hallo @hallo144,

          1000-Dank für die ausführliche Antwort!

          Habe das Ganze jetzt mal mit Postman aufgerufen, dort funktioniert es wunderbar.
          Wenn ich es per PHP-Skript (siehe unten) aufrufe kommt folgender Fehler:

          There is an error: No category_ids given!

          // PHP START

          include_once('helper.php');

          // Get Calendar events. Make sure the calendar is available for public user
          // otherwise login before
          $url = 'https://coc-ek.church.tools/index.php?q=churchcal/ajax';
          $data = array('func' => 'getCalendarEvents',
          'category_ids[]' => '2',
          'from' => 0,
          'to' => '10');
          $result = sendRequest($url, $data);
          if ($result->status == "fail") {
          echo $result->data;
          return;
          }

          echo " Ausgabe: ";
          print_r($result->data);
          echo "";

          // PHP ENDE

          Meine angepasste Ausgabedatei: http://www.coc-ek.de/churchtools/calenderEvents.php

          Habe URL ("church.tools" statt "churchtools.de") und Übergabe der category_ids[] (einzeln) wie in deinem Beispiel angepasst.

          Muss in "helper.php" noch eine Anpassung vorgenommen werden? Ist eine besonderer Header für die PHP-Datei notwendig?

          Vielen Dank für Hilfe...

          H 1 Antwort Letzte Antwort Antworten Zitieren 0
          • H
            hallo144 @samdre
            zuletzt editiert von

            @samdre Also bei mir funktioniert dein Code.

            Die ganze Datei schaut bei mir so aus:

            < ?php //(< das Leerzeichen zwischen < und ? natürlich weglassen, dass Forum stellt das sonst nur nicht richtig da)
            include_once('helper.php');
            
            // Get Calendar events. Make sure the calendar is available for public user
            // otherwise login before
            $url = 'https://coc-ek.church.tools/index.php?q=churchcal/ajax';
            $data = array('func' => 'getCalendarEvents',
            'category_ids[]' => '2',
            'from' => 0,
            'to' => '10');
            $result = sendRequest($url, $data);
            if ($result->status == "fail") {
            echo $result->data;
            return;
            }
            
            echo " Ausgabe: ";
            print_r($result->data);
            echo "";
            ?>
            

            In der helper.php habe ich nur den öffnenden PHP Tag angepasst ("php" statt "<?"), da xampp das sonst nicht als php Code erkennt. Aber das ist bei dir nicht der Fehler.

            3.x Hosting und Selbsthosting, ich betreue mehrere Installationen

            S 1 Antwort Letzte Antwort Antworten Zitieren 0
            • S
              samdre @hallo144
              zuletzt editiert von

              @hallo144
              wenn ich das Skript lokal (xampp) ausführe funktioniert der Code auch. Nur, wenn ich ihn via Hostingpaket aufrufe (http://www.coc-ek.de/churchtools/calenderEvents.php) offensichtlich nicht... Oder kann es sein, dass die Server-IP/-URL geblockt wird?

              1 Antwort Letzte Antwort Antworten Zitieren 0
              • H
                hallo144
                zuletzt editiert von

                @samdre Interessant 😉
                Ich denke, dass ist ein Fall für den Support deines Hosting-Anbieters und vielleicht auch den Churchtools-Support.

                Ich habe es gerade mal auf den Webspace meiner Gemeinde geschoben und da geht es: http://herzogenaurach.feg.de/test/cal.php

                Wäre schön, wenn du mal berichtest, was da rausgekommen ist.

                3.x Hosting und Selbsthosting, ich betreue mehrere Installationen

                S 1 Antwort Letzte Antwort Antworten Zitieren 0
                • S
                  samdre @hallo144
                  zuletzt editiert von

                  @hallo144,
                  1000 Dank. Also, ich vermute, dass unser Hostingpaket durch meine Tests gesperrt wurde (zuviele Aufrufe?). Arbeite jetzt erstmal lokal weiter und berichte dann... Vielen Dank schonmal für die tolle Unterstützung.

                  1 Antwort Letzte Antwort Antworten Zitieren 0
                  • BenjaminSchwarzeB
                    BenjaminSchwarze
                    zuletzt editiert von

                    Da es bei Anderen funktioniert, muss es irgendwas mit dem Server zu tun haben. Welche PHP-Version benutzt eurer Provider? Das kann man z.B. auch in ChurchTools unter "über" nachlesen. Bei Hosting Kunden sieht das so aus:

                    0_1517248914109_0befec6e-0437-4f0f-b989-47b9e413bacb-image.png

                    S 1 Antwort Letzte Antwort Antworten Zitieren 0
                    • S
                      samdre @BenjaminSchwarze
                      zuletzt editiert von

                      @BenjaminSchwarze
                      @hallo144

                      Danke euch beiden!

                      Habe es Mittlerweile mit der Klasse "HTTPRequest" (Quelle: http://php.net/manual/de/function.fopen.php - 3. Kommentar) zum Laufen bekommen. Bei HostEurope scheint der API-Zugriff wie unter https://github.com/churchtools/ctapidemo NICHT zu funktionieren trotz PHP-allow_url_fopen = On. Leider hat mich das mehrere Stunden gekostet 😞

                      Ich übergebe folgende URL:
                      https://xxxxxx.church.tools/index.php?q=churchcal/ajax&func=getCalendarEvents&category_ids[]=1&category_ids[]=2&from=0&to=10

                      Usage:
                      // PHP START
                      $r = new HTTPRequest($url);
                      $data=$r->DownloadToString();
                      $result=json_decode($data);
                      // PHP ENDE

                      Hoffe, das hilft jmd anderem.

                      1 Antwort Letzte Antwort Antworten Zitieren 2
                      • H
                        hallo144
                        zuletzt editiert von

                        @samdre
                        Jetzt scheinst du aber alle Daten als get-Parameter zu übergeben.

                        Solange du über die API nur Daten abfragst, ist das erstmal nicht so kritisch, aber Änderungen solltest du so aber am besten nicht durchführen.

                        Und auf keinen Fall nen Login durchführen, email und Passwort stehen dann im Klartext im Server-Log und auch jeder auf der Strecke kann dann die Daten mitschneiden (trotz https), und kennt dann deine Zugangsdaten.

                        Über den Parameter resource $context müsstest du die Abfrage-Parameter aber auch als POST übergeben können.

                        3.x Hosting und Selbsthosting, ich betreue mehrere Installationen

                        1 Antwort Letzte Antwort Antworten Zitieren 0
                        • S
                          samdre
                          zuletzt editiert von

                          Habe jetzt nochmal alles erklärt und den Code zur Verfügung gestellt:
                          http://www.samdre.de/2018/02/05/churchtools-gemeindekalender-via-api-zugriff-holen-sortieren-und-darstellen/

                          1 Antwort Letzte Antwort Antworten Zitieren 1
                          • L
                            LMMB
                            zuletzt editiert von

                            Hallo @samdre
                            Leider funktioniert der Link zu deiner Website nicht mehr. Könntest du uns hier trotzdem deinen Code noch zugänglich machen und zur Verfügung stellen? 🙂

                            S 1 Antwort Letzte Antwort Antworten Zitieren 0
                            • S
                              samdre @LMMB
                              zuletzt editiert von samdre

                              @lmmb
                              Danke für deinen Hinweis. Der Code ist leider nicht mehr aktuell. Die API wurde angepasst (nur noch POST-Zugriffe), habe aber eine funktionierende Version erstellt, die ich zur Verfügung stellen kann. Schreib mir einfach eine Nachricht an info[~ä#t]dredesign.de (Betreff: ChurchCal), dann können alles abstimmen.

                              1 Antwort Letzte Antwort Antworten Zitieren 0
                              • Erster Beitrag
                                Letzter Beitrag