Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Exporter les réponses et les participants avec leurs attributs par l'API

  • MystiChan
  • MystiChan's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
2 years 3 months ago #224187 by MystiChan
Version de LimeSurvey : 3.27.32

Bonjour,

J'ai vu qu'il était possible d'exporter les réponses ainsi que les invitations avec les attributs qu'on a rajouté depuis l'interface graphique. Je souhaite faire pareil mais en utilisant l'API.

Pour ce faire j'utilise la route "list_participants" et "export_responses". J'utilise également du C# et je me suis basé sur le code disponible sur manual.limesurvey.org/RemoteControl_2_API

J'ai vu que la route "list_participants" peut prendre en paramètre les attributs que l'on souhaite ajouter à la réponse. Mais en les rajoutant (par leurs nom ou par "attribute_1" "attribute_2") ceux-ci n'apparaissent pas dans la réponse et ce peut importe si je mets la liste des attributs souhaité ou "True".

Est-ce que j'utilise les bonnes routes ?

Merci d'avance pour votre aide ! :D
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 3 months ago #224202 by DenisChenu
github.com/LimeSurvey/LimeSurvey/blob/2e...rol_handle.php#L2167

Tu as bien les colonnes attribute_1 ?
Selon le code : ca devrait fonctionner :
github.com/LimeSurvey/LimeSurvey/blob/2e...rol_handle.php#L2236

A envoyer en array ["attribute_1","attribute_2"]

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
  • MystiChan
  • MystiChan's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
2 years 3 months ago - 2 years 3 months ago #224214 by MystiChan
Bonjour,

Je suis sûre que le nom "attribute_1" est bon. J'ai été dans les participants du questionnaire et j'ai vérifié les attributs. Dans la colonne "Champ de l’attribut" il est bien noté "attribute_1".

Avec un débugger j'ai vérifié que la liste est bien envoyée et elle l'est. (["attribute_1","attribute_2"])

Je vous avoue que ca fait plusieurs jours que je suis bloquée dessus. C'est comme si la donnée n'existait pas. mais pourtant dans l'interface je peux les récupérer !
Last edit: 2 years 3 months ago by MystiChan. Reason: faute de frappe
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 3 months ago #224221 by DenisChenu
C'est réellement étonnant

Vu que tu développe : moyen de modifier le code LimeSurvey pour mieux comprendre ?

Un gros coup de
return $aBasicDestinationFields;
github.com/LimeSurvey/LimeSurvey/blob/e4...rol_handle.php#L2067

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
  • MystiChan
  • MystiChan's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
2 years 3 months ago #224279 by MystiChan
Je n'ai pas accès à quoi que ce soit sur le serveur ou se situe Limesurvey. On m'a juste fourni un compte avec les droits d'admin pour que je puisse appeler l'API.

Pour plus d'information sur mon code, voici ma fonction pour récupérer et sauvegarder dans un fichier les participants
Code:
public void GetParticipantJsonFile(string surveyKey)
{
    var attribute = new string[] { "attribute_1", "attribute_2" };
 
    this.Client.ClearParameters();
    this.Client.Method = "list_participants";
    this.Client.Parameters.Add("ssessionkey", this.SessionKey);
    this.Client.Parameters.Add("isurveyid", surveyKey);
    this.Client.Parameters.Add("aAttributes", JArray.FromObject(attribute));
    this.Client.Parameters.Add("bUnused", false);
    this.Client.Post();
 
    //save in file
    File.WriteAllBytes(@"C:\Users\xxxx\Desktop\test.json", this.Client.Response.GetFileBlob());
}

Et celui qui permet d'appeler l'API
Code:
public JsonRPCResponse Post()
{
    JObject jobject = new JObject();
    jobject.Add(new JProperty("jsonrpc", "2.0"));
    jobject.Add(new JProperty("id", ++id));
    jobject.Add(new JProperty("method", Method));
    jobject.Add(new JProperty("params", Parameters));
 
    string PostData = JsonConvert.SerializeObject(jobject);
    UTF8Encoding encoding = new UTF8Encoding();
    byte[] bytes = encoding.GetBytes(PostData);
 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
    request.Method = "POST";
    request.ContentType = "application/json";
    request.KeepAlive = true;
    request.ContentLength = bytes.Length;
 
    Stream writeStream = request.GetRequestStream();
    writeStream.Write(bytes, 0, bytes.Length);
    writeStream.Close();
 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8);
 
    Response = new JsonRPCResponse();
    Response = JsonConvert.DeserializeObject<JsonRPCResponse>(readStream.ReadToEnd());
    Response.StatusCode = response.StatusCode;
 
    return Response;
}

Je me retrouve donc avec une requête de ce type
Code:
{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "list_participants",
    "params": {
        "ssessionkey": "xxx",
        "isurveyid": "xxx",
        "aAttributes": [
            "attribute_1",
            "attribute_2"
        ],
        "bUnused": false
    }
}

et comme résultat une liste d'object comme celui-ci
Code:
{
    "tid": "xxx",
    "token": "xxx",
    "participant_info": {
        "firstname": "xxxx",
        "lastname": "xxx",
        "email": "xxx@xxx.x"
    }
}
 
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 3 months ago #224283 by DenisChenu
JSON RPC 1 : www.jsonrpc.org/specification_v1

Donc attribut par ordre :   
Code:
    this.Client.Parameters.Add("ssessionkey", this.SessionKey);
    this.Client.Parameters.Add("isurveyid", surveyKey);
    this.Client.Parameters.Add("istart", 0);
    this.Client.Parameters.Add("ilimit", 10);
    this.Client.Parameters.Add("bUnused", false);
    this.Client.Parameters.Add("aAttributes", JArray.FromObject(attribute));

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
  • MystiChan
  • MystiChan's Avatar Topic Author
  • Offline
  • New Member
  • New Member
More
2 years 3 months ago #224336 by MystiChan
Je n'étais absolument pas au courant de ça ! j'aurais appris quelque chose :)

Merci pour l'aide ca marche beaucoup mieux !
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 3 months ago #224338 by DenisChenu
Je viens de vérifier, et je peux l'écrire : RTFM ;D
manual.limesurvey.org/RemoteControl_2_API#List_of_functions

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
Moderators: Nickko

Lime-years ahead

Online-surveys for every purse and purpose