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
AutoIt
#include <Array.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
local $oReceived, $SessionKey, $SurveyID
global $csvFileList
$Folderpath = "path to csv"
$URL = "https://limeserveyhost/index.php/admin/remotecontrol"
$user = "user"
$pwd = "pass"
;---- Survey ID's array --------------------------
local $Survey_idArray[4]
$Survey_idArray[0] = "umfrage1|997463" ;"umfrage"
$Survey_idArray[1] = "umfrage2|478789" ;"umfrage"
$Survey_idArray[2] = "umfrage3|469244" ;"umfrage"
$Survey_idArray[3] = "umfrage4|762911" ;"umfrage"
$Survey_idArray[3] = "API|795263" ;"Test API"
; ------------------------------------------------
$hGUI = GUICreate("LimeSurvey Remote",380, 80)
$btn_get_session_key = GUICtrlCreateButton("get_session_key", 30, 25, 100, 25)
$btn_add_participants = GUICtrlCreateButton("add_participants", 140, 25, 100, 25)
$btn_mail_participants = GUICtrlCreateButton("mail_participants", 250, 25, 100, 25)
; Display the GUI.
GUISetState(@SW_SHOW, $hGUI)
; Loop until the user exits.
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $btn_get_session_key
_get_session_key()
MsgBox(0,"Session Key",$SessionKey)
Case $btn_add_participants
_list_csv_files()
;_ArrayDisplay($csvFileList)
_add_participants()
Case $btn_mail_participants
;mail_participants()
EndSwitch
WEnd
; Delete the previous GUI and all controls.
GUIDelete($hGUI)
Exit
Func _add_participants() ; add participants to lime survey ID
For $f = 1 to UBound($csvFileList) -1
$portal = StringSplit($csvFileList[$f],"_")
;_ArrayDisplay($portal)
;MsgBox(0,"",$portal[2]); Portal
For $s_id = 0 To 3 ; $Survey_idArray - oben definiert
;MsgBox(0,"",$SurveyID[$sid])
$SurveyID_Splitt = StringSplit($Survey_idArray[$s_id],"|")
;MsgBox(0,"",$SurveyID_Splitt[1])
IF $portal[2] = $SurveyID_Splitt[1] Then $SurveyID = $SurveyID_Splitt[2]
Next
;----csv read to array---
Local $CSVArray
_FileReadToArray($Folderpath & "\" & $csvFileList[$f], $CSVArray)
;_ArrayDisplay($CSVArray)
For $i = 2 to UBound($CSVArray) -1
$csv_splitt = StringSplit($CSVArray[$i],";")
;_ArrayDisplay($csv_splitt)
_list_participants($csv_splitt[1])
;ConsoleWrite($oReceived) ;Rückgabewert
$participants_Return = StringSplit($oReceived,",")
$participants_Return = StringSplit($participants_Return[2],",:")
;_ArrayDisplay($participants_Return)
$search_survey_participants = _ArraySearch($participants_Return, "No survey participants found.",0,0,0,1)
If $search_survey_participants = -1 Then
;MsgBox(0, $search_survey_participants, "bereits enthalten")
Else
$json_add_participants = ""
$json_add_participants = '{"method": "add_participants",' & _
'"params": {"sSessionKey": ' & $SessionKey & ',' & _
'"iSurveyID": ' & $SurveyID & ' ,' & _
'"aParticipantData": [{"attribute_1": "' & $csv_splitt[1] & '" ,' & _
'"attribute_2": "' & $csv_splitt[2] & '" ,' & _
'"firstname": "' & $csv_splitt[3] & '" ,' & _
'"lastname": "' & $csv_splitt[4] & '" ,' & _
'"email": "' & $csv_splitt[5] & '" ,' & _
'"token": "customToken"}],"bCreateToken": "false"},"id": 1}'
ConsoleWrite ($json_add_participants & @CRLF)
_POST_DATA($URL, $json_add_participants)
EndIf
Next
;MsgBox(0,"",$SurveyID)
_mail_participants($SurveyID)
Next
EndFunc
Func _mail_participants($SurveyID) ; send mail to participants
IF $SessionKey = "" Then
MsgBox(0,"",'please use "get session key" button')
Else
MsgBox(0,"","send mail to participants",1)
;Send Mail to Umfrageteilnehmer
$json_mail_participants = '{ "method": "mail_registered_participants", "params": [ ' & $SessionKey & ', "' & $SurveyID & '" ], "id": 1 }'
_POST_DATA($URL, $json_mail_participants)
ConsoleWrite ($json_mail_participants & @CRLF)
EndIf
EndFunc
Func _list_participants($attrib_1) ;lese Participants aus LimeSurvey mit Filter
IF $SessionKey = "" Then
MsgBox(0,"",'please use "get session key" button')
Else
$json_list_participants = '{"method": "list_participants",' & _
'"params": {"sSessionKey": ' & $SessionKey & ',' & _
'"iSurveyID": ' & $SurveyID & ' ,' & _
'"aAttributes": ["attribute_1"],' & _
'"aConditions": {"attribute_1" : "'&$attrib_1&'"}},' & _ ;Filter auf Attribute_1
'"id": 1 }'
;ConsoleWrite ($json_list_participants & @CRLF)
_POST_DATA($URL, $json_list_participants )
;ConsoleWrite($oReceived)
EndIf
EndFunc
Func _list_csv_files() ;list csv files to array
$csvFileList = _FileListToArray($Folderpath ,"*.csv",1)
If @error = 1 Then
MsgBox(0, "", "Path was invalid.")
Exit
EndIf
If @error = 4 Then
MsgBox(0, "", "No file(s) were found. Close Program")
Exit
EndIf
;_ArrayDisplay($csvFileList)
EndFunc
FUNC _get_session_key() ; get Lime Survey session key
$json_get_session_key = '{ "method": "get_session_key", "params": [ "' & $user & '", "' & $pwd & '" ], "id": 1 }'
_POST_DATA($URL, $json_get_session_key)
$session_key = StringSplit($oReceived,",")
;_ArrayDisplay($json_answer)
$session_key = StringSplit($session_key[2],",:")
;_ArrayDisplay($session_key)
$Search = _ArraySearch($session_key, "Invalid user name or password",0,0,0,1)
If @error = 6 Then
;MsgBox(0,"SessionKey",$json_session_key[2])
$SessionKey = $session_key[2]
Else
MsgBox(0, "", $session_key[$Search] & 'found in row: ' & $Search)
EndIf
EndFunc
FUNC _POST_DATA($URL, $JSON) ; Post with URL & JSON DATA
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("POST", $URL, False)
$oHTTP.SetRequestHeader("Content-Type", "application/json")
$oHTTP.SetRequestHeader("Cache-Control", "no-cache")
$oHTTP.Send($JSON)
$oReceived = $oHTTP.ResponseText
$oStatusCode = $oHTTP.Status
If $oStatusCode <> 200 Then
MsgBox(4096, "Error", $oStatusCode,2)
EndIf
;ConsoleWrite($oReceived)
EndFunc
Alles anzeigen
Falls jemand noch ideen hat das zu optimieren, gerne dazu etwas schreiben.
Gruß gmmg