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 !