LimeSurvey Remote API json

  • Hallo Zusammen,

    ich versuche mich gerade an der Automatisierung von LimeSurvey (Umfragetool).

    Folgendes funktioniert bereits, ist aber noch nicht 100% frei von eventuellen fehlern. Habe zum testen erstmal eine einfache GUI erstellt, um die Befehle einzeln ansetzen zu können.

    get_session_key

    add_participants

    list_participants

    mail_registered_participants

    Hier das Script dazu

    Spoiler anzeigen

    Falls jemand noch ideen hat das zu optimieren, gerne dazu etwas schreiben.

    Gruß gmmg :)

  • gmmg 20. Juli 2022 um 14:48

    Hat den Titel des Themas von „LimeSurvey Remote API“ zu „LimeSurvey Remote API json“ geändert.
  • Wenn ich die Funktion "mail_registered_participants" nutze, kann es vorkommen, dass bereits alle Email Empfänger über LimeSurvey angeschrieben wurden.

    Hier kommt dann folgender Rückgabestring: {"id":1,"result":{"status":"Error: No candidate tokens"},"error":null}

    Ich hätte für die Logdatei, Auswertung usw. nun folgenden Teilstring. Wie kann ich das am Besten umsetzen ? Mit Stringsplitt geht das ja, aber das geht sicher noch eleganter.

    "Error: No candidate tokens"

    Des weiteren gibt es wohl ein Problem mit der Funktion Export_Responses über die Remote API.

    Hier bekomme ich, wenn ich die Zusatzfelder mit exportieren möchte kein Ergbnis der Umfrage mehr angezeigt. Ohne die Zusatzfelder kommen diese Ergebnisse.

    Hier ein Beipiel:

    Export ohne Zusatzfelder, die Ergebnisse sind gefüllt (gelb markiert)

    ----------------------------------------------------------------------------------------------------------------------------------

    "id";"submitdate";"lastpage";"startlanguage";"seed";"token";"startdate";"datestamp";"refurl";"G01Q01";"G01Q02";"G01Q03"

    "9";"2022-06-23 16:18:07";"1";"de";"1139653681";"XiL38ODU1PR1gGa";"2022-06-23 16:17:50";"2022-06-23 16:18:07";"";"5";"5";"5"

    "10";"2022-06-23 18:37:29";"1";"de";"163171948";"2vLLAR9HAHYgOCm";"2022-06-23 18:37:01";"2022-06-23 18:37:29";"";"5";"5";"5"

    Export mit Zusatzfeldern ("firstname";"lastname";"email";"attribute_1";"attribute_2"), die Ergebnisse sind leer (gelb markiert)

    ----------------------------------------------------------------------------------------------------------------------------------

    "id";"submitdate";"lastpage";"startlanguage";"seed";"token";"startdate";"datestamp";"refurl";"G01Q01";"G01Q02";"G01Q03";"firstname";"lastname";"email";"attribute_1";"attribute_2"

    "9";"2022-06-23 16:18:07";"1";"de";"1139653681";"XiL38ODU1PR1gGa";"2022-06-23 16:17:50";"2022-06-23 16:18:07";"";"";"";"";"Herbert";"Behr";"herbert.behr@xyz.de";"2540";"Herr"

    "10";"2022-06-23 18:37:29";"1";"de";"163171948";"2vLLAR9HAHYgOCm";"2022-06-23 18:37:01";"2022-06-23 18:37:29";"";"";"";"";"Heidi";"Schmauch";"schmauch.heidi@xyz.de";"2529";"Frau"

    Das Problem liegt mit Sicherheit an LimeSurvey, da der Export über die Weboberfläche ja klappt.

    Jetzt ist meine Idee, bis es da mal eine Lösung gibt, beide CSV zusammenzufügen.

    Das heißt ich Exportiere beide Dateien (einmal mit, einmal ohne Zusatzfelder) und hole mir entwerder aus der Datei ohne Zusatzfelder die 3 Ergbebnisse zu jeweiliger Zeile oder versuche die irgendwie anders zusammenzufügen.

    Als Ergebnis soll die CSV (Export mit Zusatzfeldern) die Werte von "G01Q01";"G01Q02";"G01Q03" enthalten.

    Hat da jemand eine Idee, wie ich das am Besten angehe?

    Danke

    Gruß gmmg

    Einmal editiert, zuletzt von gmmg (21. Juli 2022 um 09:22)

  • Das heißt ich Exportiere beide Dateien (einmal mit, einmal ohne Zusatzfelder) und hole mir entwerder aus der Datei ohne Zusatzfelder die 3 Ergbebnisse zu jeweiliger Zeile oder versuche die irgendwie anders zusammenzufügen.

    ohne Zusatzfeld

    "9";"2022-06-23 16:18:07";"1";"de";"1139653681";"XiL38ODU1PR1gGa";"2022-06-23 16:17:50";"2022-06-23 16:18:07";"";"5";"5";"5"

    mit Zusatzfeld

    "9";"2022-06-23 16:18:07";"1";"de";"1139653681";"XiL38ODU1PR1gGa";"2022-06-23 16:17:50";"2022-06-23 16:18:07";"";"";"";"" .........

    sind ja identisch bis (bei mit Zusatzfeld) zum Semikolon vor 'firstname', nur dass die Inhalte leer sind

    Ich würde so vorgehen:

    - bis zu diesem Semikolon ( #12, Position = StringInStr, occurence=12) in "mit Zusatzfeld" löschen

    - gesamten String "ohne Zusatzfeld" an dieser Position einfügen

  • BugFix

    Danke für deine Antwort.

    Genau, die sind identisch, nur das die Felder der Antworten des Survey fehlt, deshalb gehe ich auch davon aus, dass dies ein Fehler der Remote API schnittstelle ist.

    So richtig weiß ich noch nicht, wie ich das angehen soll, Ich habe ja im Endeffekt 2 CSV Dateien bzw. diese Datensätze in 2 Variablen.

    Gruß gmmg

  • bzw. diese Datensätze in 2 Variablen.

    Beide in je ein Array splitten - die Arrays haben dann dieselbe Größe.

    - In einer Schleife über Array_mit_Zusatz iterieren

    - je Item:

    - Inhalt bis "firstname" abschneiden

    - Item von Array_ohne_Zusatz (hat identischen Index an dieser Position) vor "firstitem" einfügen: $a_m_Zusatz[$i] = $a_o_Zusatz[$i] & "$a_m_Zusatz[$i] ab <firstname>" - das zusätzliche Semikolon dazwischen beachten

  • BugFix Habe den Export als CSV + das Zusammenfügen der 2 Exportdateien zu einer CSV Datei wie folgt gelöst.

    Scriptdatei siehe Post 1

    Gruß gmmg :)

    3 Mal editiert, zuletzt von gmmg (22. Juli 2022 um 13:04)

  • Um eine Fehlerabfrage einzubauen benötige ich etwas Hilfe beim Splitten/ bereinigen der folgenden Return Strings.

    ;{"id":1,"result":"ulKeUwSWS5V5zKcyohTHtB8XfIo~91OJ","error":null}

    ;{"id":1,"result":{"status":"Invalid user name or password"},"error":null}

    ;{"id":1,"result":{"status":"Sie haben die maximale Anzahl an Anmeldeversuchen erreicht. Bitte warten Sie 10 Minuten, bevor Sie es erneut versuchen."},"error":null}

    nach dem Splitten soll das Ergebis so sein:

    "ulKeUwSWS5V5zKcyohTHtB8XfIo~91OJ"

    "Invalid user name or password"

    "Sie haben die maximale Anzahl an Anmeldeversuchen erreicht. Bitte warten Sie 10 Minuten, bevor Sie es erneut versuchen."

    Kann man da mit Regex was machen oder muss ich das mit StringReplace umsetzen?

    Habe es jetzt so lösen können:

    $oReceived = StringReplace($oReceived, '{"id":1,"result":', "")

    $oReceived = StringReplace($oReceived, ',"error":null}', "")

    $oReceived = StringReplace($oReceived, '{"status":', "")

    $oReceived = StringReplace($oReceived, '}', "")



    Gruß gmmg

    4 Mal editiert, zuletzt von gmmg (22. Juli 2022 um 13:15)

  • Ist es das, was Du suchst?

  • Da du versuchst json zu verarbeiten, könnte es sinnvoll sein, wenn du dir die JSON-UDF mal anschaust:

    AspirinJunkie
    21. August 2017 um 18:19
  • Hallo BananaJoe, Kanashius

    Danke für die jeweiligen Infos und Beispiele.

    Ich werde mir das entsprechend ansehen und ggf. im Skript noch umsetzen.

    Aktuell läuft das Skript schon im Livebetrieb und verrichtet seinen Dienst ohne Probleme.

    Gruß gmmg :)

  • Habe das Script "Attachment" in Post 1 entsprechend angepasst:

    - SurveyID's + Surveynamen aus ini File

    - Survey Import/Export Pfade aus ini File

    - das RegEx von BananaJoe in der Funktion "get_session_key ergänzt

    Gruß gmmg