Saya igin mengambil hasil survey di LimeSurvey. Bisa saja langsung query ke database. Namun ada satu hal yang agak rumit yaitu ketika kita langsung ambil di dari tabel misalnya lime_survey_638765 maka kita hanya mendapatkan keynya saja. Padahal dalam kasus tertentu kita membutuhkan valuenya.
Sebagai contoh misalnya ada pilihan rating 1 sampai 5, array(‘A1’=>1, ‘A2’=>2, ‘A3’=>3, ‘A4’=>4, ‘A5’=>5). Sebenarnya kalau key dan valuenya hanya seperti itu masih mudah, namun pembuatan key yang bisa semaunya membuat harus berhati-hati.
Pengambilan value cukup rumit kalau dilihat dari Database Scemanya. Maka cara yang paling mudah adalah mengambil data dari API.
API biasanya ada dalam alamat seperti ini, http://limesurvey6.test/index.php/admin/remotecontrol walaupun untuk mengeluarkannya kita perlu melakukan setting pada menu “configuration > global > interfaces”.

Lalu, bagaimana cara kita mengambilnya dari PHP? Berikut saya berikan contoh untuk mengambil data dari salah satu survey menggunakan PHP.
<?php
define('LS_API_URL', 'http://limesurvey6.test/index.php/admin/remotecontrol');
define('LS_USERNAME', 'admin');
define('LS_PASSWORD', 'password');
function ls_api_request($method, $params = [], $id = 1) {
$request = json_encode([
'method' => $method,
'params' => $params,
'id' => $id,
]);
$ch = curl_init(LS_API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 1. Login
$loginResult = ls_api_request('get_session_key', [LS_USERNAME, LS_PASSWORD]);
$sessionKey = $loginResult['result'];
if (!$sessionKey) {
die("Gagal login ke API");
}
// 2. Ambil responses dari survey ID 498572
$surveyId = 498572;
$responseResult = ls_api_request('export_responses', [
$sessionKey,
$surveyId,
'json', // Format export: 'json', 'csv', 'xml'
'id', // Bahasa, default 'en'
'complete', // Completed responses: 'complete','incomplete' or 'all'
'short', // Format heading: code / full
'long' // Format response sort / long
]);
$responseJson = $responseResult['result'];
$responseData = json_decode(base64_decode($responseJson) );
$responseData = $responseData->responses;
// print_r($responseData);
// 3. Tampilkan hanya field tertentu
foreach ($responseData as $row) {
echo "F1: " . ($row->submitdate ?? '-') . " | ";
echo "F2: " . ($row->startdate ?? '-') . "\n";
}
// 4. Logout
ls_api_request('release_session_key', [$sessionKey]);
?>
Berikut ini parameter export_responses
/**
* Export responses in base64 encoded string
*
* @access public
* @param string $sSessionKey Auth credentials
* @param int $iSurveyID ID of the Survey
* @param string $sDocumentType any format available by plugins (for example : pdf, csv, xls, doc, json)
* @param string $sLanguageCode (optional) The language to be used
* @param string $sCompletionStatus (optional) 'complete','incomplete' or 'all' - defaults to 'all'
* @param string $sHeadingType (optional) 'code','full' or 'abbreviated' Optional defaults to 'code'
* @param string $sResponseType (optional)'short' or 'long' Optional defaults to 'short'
* @param integer $iFromResponseID (optional) Frpm response id
* @param integer $iToResponseID (optional) To response id
* @param array $aFields (optional) Name the fields to export
* @param array $aAdditionalOptions (optional) Addition options for export, mainly 'convertY', 'convertN', 'nValue', 'yValue',
* @return array|string On success: Requested file as base 64-encoded string. On failure array with error information
**/
Lalu bagaimana mekanisme untuk mengambil data agar efisien. Caranya adalah tidak langsung mengakses dari aplikasi namun disimpan dulu dalam tabel lain agar tidak memberatkan limesurvey.

Selamat mencoba !

