Akses Limesurvey API dari PHP

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 !

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.