Check out the LimeSurvey source code on GitHub!
Welcome, Guest
Username: Password:
  • Page:
  • 1
  • 2

TOPIC: Ervaring met API?

Ervaring met API? 3 years 5 months ago #93670

  • miracle
  • miracle's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 2
  • Karma: 0
Iemand hier ervaring met de API van LimeSurvey. Ik heb het idee dat de documentatie niet klopt en daardoor krijg ik het niet werkend. Wie heeft dit wel werkend?
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93700

  • mdekker
  • mdekker's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 343
  • Thank you received: 68
  • Karma: 38
Welke versie van limesurvey gebruik je, en welke call lukt niet? Wat krijg je als resultaat? In het engelstalige forum, en volgens mij ook in de documentatie staat een voorbeeld. Ook in de limesurvey code zelf zit een werkend voorbeeld. Het enige dat je moet aanpassen is de usernaam/wachtwoord combinatie om verbinding te kunnen maken.

Er zijn recent een aantal kleine bugs opgelost in de remote control api, dus misschien helpt upgraden naar de nieuwste versie al.
---
Menno Dekker
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93973

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Kijk eens aan ik loop ook al tegen API problemen aan.

Ik gebruik versie 2.05 en om verbinding te maken met de API gebruik ik jQuery in combinatie met de jQuery plugin: jquery-jsonrpc (zie: github.com/datagraph/jquery-jsonrpc).

Voor de jquery-jsonrpc maak ik het volgende javascript aan:
$.jsonRPC.setup({
    endPoint: 'http://10.0.0.2/index.php/admin/remotecontrol/',
    namespace: ''
});
 
var params = {
    "username" : "admin",
    "password" : "test"
};
 
$.jsonRPC.request('get_session_key', {
    params: params,
    success: function(result) {
        console.log('GELUKT:');
        console.log(result);
 
    },
    error: function(result) {
        console.log("MISLUKT:");
        console.log(result);
    }
});

Na het runnen van de code krijg ik in mijn console:
MISLUKT:
Object { 
	"error"   : "Internal Server Error",
	"version" : "2.0"
}

Nu vermoed ik dat ik deze JSON terug krijg van de jQuery plugin.
Simpelweg omdat ik in Firebug kan zien dat ik geen response krijg van de API.


Wanneer ik brows naar:
http://10.0.0.2/index.php/admin/remotecontrol/test

Dan krijg ik netjes te zien:
"Invalid user name or password"


Enige tips trics of howto's zijn erg welkom :)
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93974

  • mdekker
  • mdekker's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 343
  • Thank you received: 68
  • Karma: 38
Geen 2.05 gebruiken, die is nog niet stabiel genoeg. In de laatste 2.0+ zou het moeten werken, al heb ik alleen ervaring met het aanroepen van de api vanuit php en niet vanuit jquery.

Naar verwachting komt binnenkort een beta van 2.05 uit, dan ben je meer dan welkom om alles wat je daarin tegenkomt te rapporteren in de Bugtracker. Voor nu dus even op 2.0 proberen.

Wat je ook kan proberen is de debug mode aan zetten in je config, daarmee krijg je misschien iets meer info over wat er mis gaat.
---
Menno Dekker
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93975

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Ah ik dacht dat ik 2.05 had, maar ik zie nu in de admin dit staan:

Version 2.00+ Build 130317


Dus dat lijkt me goed.


Ik heb inmiddels ook geprobeert om data binnen te trekken via de standaard jQuery $.ajax() functionaliteit, maar dat werkt ook niet.

Het is ook niet dat je een GET kan doen zoals:
http://10.0.0.2/index.php/admin/remotecontrol/get_session_key?username=admin&password=test

Dus dat het maakt het lastig. Ik ga er van uit dat het met Javascript zou moeten lukken.
Gezien JSON typisch bedoeld was voor Javascript ;)
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93986

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Ik heb debug aan gezet, maar verder geen responses daar op.
Ik heb direct maar een tail gezet op de errorlog van apache, maar daar komen ook geen fouten naar voren.
Last Edit: 3 years 5 months ago by FrAgFo0d.
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93987

  • mdekker
  • mdekker's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 343
  • Thank you received: 68
  • Karma: 38
Even snel gekeken, het moet een post zijn met content-type application/json en in de body moeten een method, params en een id gezet worden. Ik krijg het zo snel ook niet werkend.
---
Menno Dekker
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93989

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Thanks!

Ik had zelf dit in een POST:

id = 1
jsonrpc = "2.0"
method = "get_session_key"
params = { username: "admin",password: "test"}

Ik zal eens kijken of ik kan rommelen met de content-type.
De method had ik en de params ook. ;)
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93991

  • mdekker
  • mdekker's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 343
  • Thank you received: 68
  • Karma: 38
jQuery.ajax ({
url: "http://servernaam/index.php/admin/remotecontrol",
type: "POST",
data: JSON.stringify({method:"get_session_key",params:{username:"admin", password:"test"},id:1}),

contentType: "application/json",
success: function(){
//
}
});

dit werkte voor mij
---
Menno Dekker
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93994

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Thanks ik was heeel dichtbij :)

Ik had net:
 
var params = {
    "method": "get_session_key",
    "params": {
        "username" : "admin",
        "password" : "test"
    },
    id: 1
};
/**/
$.ajax({
    url: "http://10.0.0.2/index.php/admin/remotecontrol",
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(params),
    error: function(data) {
        console.log('error');
        console.log(data);
    },
    success: function(data) {
        console.log('success');
        console.log(data);
    }
});

Met jouw hulp snapte ik dat ik natuurlijk niet de dataType er bij moest gaan gebruiken.
Dan doe je de contentType teniet.

Thanks :)


Overigens krijg ik nu wel een success, maar geen data terug.
Dus nu even kijken waar dat dan aan ligt.
Last Edit: 3 years 5 months ago by FrAgFo0d.
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #93995

  • mdekker
  • mdekker's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 343
  • Thank you received: 68
  • Karma: 38
Zou je een voorbeeldje in de documentatie willen zetten?
Bij mij werkte het met de charset erbij trouwens ook niet.
---
Menno Dekker
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #94000

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Ik ben nog een beetje n00b hier hoor ;)
Voorbeeldje in de documentatie?

Ik heb nu dit:
var params = {
    "method": "get_session_key",
    "params": {
        "username" : "admin",
        "password" : "test"
    },
    id: 1,
    jsonrpc: "2.0"
};
 
 
$.ajax({
    url: "http://LimeSurvey/index.php/admin/remotecontrol",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify(params),
    error: function(data) {
        console.log('error');
        console.log(data);
    },
    success: function(data) {
        console.log('success');
        console.log(data);
    }
});

Maar dit levert nog niets op. Althans wel een success geen data.

Ik bedenk mij ook dat als je de API vanaf buitenaf (dus client op andere server) wilt hebben
dat json dan niet eens werkt omdat je niet zomaar een API call mag doen op de server van buitenaf.


Maar laat me even weten wat je bij de documentatie wilt zien.
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #94008

  • mdekker
  • mdekker's Avatar
  • Offline
  • LimeSurvey Team
  • Posts: 343
  • Thank you received: 68
  • Karma: 38
dataType: 'json'

dan krijg je een beter resultaat
jQuery.ajax ({
url: "http:/server/index.php/admin/remotecontrol",
type: "POST", 
dataType: 'json',
data: JSON.stringify({method:"get_session_key",params:{username:"admin", password:"test"},id:1}),
contentType: "application/json",
complete: function (xhr, status) { 
                 data = $.parseJSON(xhr.responseText);  
                 $.each(data, function(index, val) {
    console.log(index + '=>' +  val);
});
} 
});
---
Menno Dekker
Last Edit: 3 years 5 months ago by mdekker.
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #94009

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Ik heb nog eens gekeken naar het voorbeeld van de Request Header in de API documentatie.
Request:
  HTTP headers:
    content-type=application/json
    connection=Keep-Alive
    host=mylimesurveyhost.com
    content-length=65
    user-agent=Apache-HttpClient/4.2.2 (java 1.5)
 
  Post body:
    {"method":"get_session_key","params":{"username":"admin","password":"mypassword"},"id":1}

En dit zijn mijn request headers:
    HTTP headers:
	Accept	*/*
	Accept-Encoding	gzip, deflate
	Accept-Language	en-US,en;q=0.5
	Content-Length	83
	Content-Type	application/json; charset=UTF-8
	Host	10.0.0.2
	Referer	http://10.0.0.2/
	User-Agent	Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0
	X-Requested-With	XMLHttpRequest
 
    Post body:
	{"method":"get_session_key","params":{"username":"admin","password":"test"},"id":1}

De Post Body is in ieder geval gelijk.
In de content type heb ik de charset er bij staan.
Ik heb geen connection=Keep-Alive er bij (wel in mijn response)
en mijn content-length is groter.

Ik zal in de pagina de meta tag voor de charset uit zetten, maar ik geloof niet dat het enig effect gaat hebben. Aangezien de server response geeft met Keep-alive aan lijkt dit me ook niet meteen een issue.
Dan als laatste heb ik de mogelijkheid dat de content-length groter is... wat ook niet het probleem mag zijn...

Wellicht gaat er toch iets mis aan de server kant zelf.
Ik heb JSON-RPC geinstalleerd, wellicht dat het daar toch op mis gaat?
The administrator has disabled public write access.

Ervaring met API? 3 years 5 months ago #94011

  • FrAgFo0d
  • FrAgFo0d's Avatar
  • Offline
  • Fresh Lemon
  • Posts: 17
  • Karma: 0
Met de dataType: "json" krijg ik van jQuery een error response terug.
dus de error: function() wordt dan aangesproken.

Ik kan de charset=UTF-8 niet weg slopen, waarschijnlijk staat dit hard op de server.


Ik bedoelde natuurlijk dat ik libXML geinstalleerd heb.
Ik loop de php.ini nog eens na, maar ik zou dan verwachten dat Debug meldingen zou geven.
Last Edit: 3 years 5 months ago by FrAgFo0d.
The administrator has disabled public write access.
  • Page:
  • 1
  • 2
Time to create page: 0.361 seconds
Imprint                   Data Protection Statement                  Revocation information and revocation form