如何用PHP提取GrassBlade存储的SCORM测验答案并转为JSON格式?
解决方案
一、能否直接从SCORM文件提取用户测验数据?
不行。SCORM是内容打包格式,里面只包含课程/测验的结构、交互逻辑等静态内容,用户完成测验后的结果数据(得分、对错、完成状态等)不会存储在SCORM文件里,而是在用户完成学习后,通过xAPI协议同步到GrassBlade LRS(云端或本地WordPress表)中。所以必须从LRS或WordPress数据库中提取用户的测验结果。
二、可行的数据提取方案
1. 直接读取WordPress本地数据库表
GrassBlade把完成数据存在prefix_grassblade_completions表(prefix是你的WordPress数据库前缀,比如wp_),可以用PHP直接连接数据库查询数据:
<?php // 数据库连接信息 $db_host = 'localhost'; $db_name = 'your_wordpress_db'; $db_user = 'db_username'; $db_pass = 'db_password'; $table_prefix = 'wp_'; // 替换成你的实际前缀 // 连接数据库 try { $pdo = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8mb4", $db_user, $db_pass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 查询用户测验结果,根据需求调整字段和条件 $stmt = $pdo->prepare("SELECT user_id, content_id, score, completion_status, completed_at FROM {$table_prefix}grassblade_completions WHERE type = 'quiz'"); $stmt->execute(); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); // 输出JSON格式数据 header('Content-Type: application/json'); echo json_encode($results, JSON_PRETTY_PRINT); } catch(PDOException $e) { die("数据库连接失败: " . $e->getMessage()); } ?>
- 注意:要确保数据库账号有该表的只读权限,避免安全风险;如果需要关联LearnDash课程信息,可以联合查询
learndash_user_activity等表。
2. 通过GrassBlade LRS API(带认证)调用数据
GrassBlade LRS遵循xAPI标准,支持Basic Auth认证,你可以在LRS后台找到API密钥和密码,然后用PHP CURL发起请求:
<?php // GrassBlade LRS API信息 $lrs_url = 'https://your-grassblade-lrs-url/xapi/statements'; $api_key = 'your_lrs_api_key'; $api_secret = 'your_lrs_api_secret'; // 生成Basic Auth凭证 $auth = base64_encode("$api_key:$api_secret"); // 发起CURL请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $lrs_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Basic ' . $auth, 'Content-Type: application/json', 'Accept: application/json' ]); // 可以添加查询参数过滤测验相关语句,比如筛选完成类评估活动 curl_setopt($ch, CURLOPT_URL, $lrs_url . '?filter[verb][id]=http://adlnet.gov/expapi/verbs/completed&filter[activityType][id]=http://adlnet.gov/expapi/activities/assessment'); $response = curl_exec($ch); curl_close($ch); // 解析并输出JSON结果 header('Content-Type: application/json'); echo $response; ?>
- 调整查询参数可以精准过滤测验相关的xAPI语句,比如通过
verb(完成、得分)或activityType(评估)来筛选;如果需要特定用户或课程的数据,添加对应的filter[agent][mbox]或filter[activity][id]参数即可。
三、关于zAPI插件端点
既然官方支持团队确认无法外部调用,建议放弃该方案,优先使用上述两种方法。
内容的提问来源于stack exchange,提问作者Philip Mc lennan
相关产品推荐
相关产品推荐

