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).
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' null, // Completed responses: null = semua, 'Y', 'N', 'I' 'short', // Format heading: 'short' / 'full' / 'code' ]); $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]); ?>
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 !