Moodle API

De Cacauet Wiki
La revisió el 14:58, 3 maig 2017 per Enric (discussió | contribucions) (→‎Introducció)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Introducció[modifica]

El CMS Moodle disposa d'una API per accedir a les seves funcions internes i afegir funcionalitat com, per exemple, crear cursos automàticament des d'un script.

La API és accessible de diferents maneres (SOAP, REST, etc.) de les quals ens interessa REST.

Per activar-la haurem de seguir les passes (són unes quantes) que s'indica dintre del mateix moodle, a la secció:

Site Administration -> Plugins -> Web Services -> Overview

Un cop hagueu creat un rol i usuari amb els permisos adequats per a la API, finalment podeu seguir les passes descrites a la web per accedir a la API:

  • Demanar token
  • Executar funció

Explicat aquí:

https://docs.moodle.org/dev/Creating_a_web_service_client

Tot sembla senzill en un principi, però hi ha lio per passar els arguments. Seria d'agrair passar-los en JSON o similars, però es veu que la cosa no va així. Buscant per aquí i per allà he trobat aquestes explicacions amagades:

O sigui que els paràmetres s'han de passar en URLencode a l'estil:

.....&criteria[0][key]=email&criteria[0][value]=aname@somedomain


PHP[modifica]

He utilitzat aquests recursos:

Aquest codi m'ha funcionat amb Moodle 2.9:

<?php
require_once("curl.php");

$courses=array("courses" =>
            array(
                0=>array(
                    "fullname" => "CURS DE TEST2",
                    "shortname" => "test2",
                    "categoryid" => 4
                )
            )
        );

// prep url call
$token = "xxxyyyzzz";
$server = "https://el.meu.moodle.com/webservice/rest/server.php";
$getparams = "?wstoken=".$token."&wsfunction=core_course_create_courses";
$url = $server.$getparams;
$params = $courses;

// exec
$curl = new curl();
$resp = $curl->post($url, $params);
var_dump($resp);


Python[modifica]

Recursos:

import requests
import json

token = "xxxyyyzzz"
url = "https://el.meu.moodle.com/moodle/webservice/rest/server.php?wstoken=" + token + ""
# afegir aixo si vols resposta json
#url=url+"&moodlewsrestformat=json"

# dades minimes per crear un curs
data = {
	'wsfunction': 'core_course_create_courses',
	'courses[0][fullname]' : "CURS DE TEST 3",
	'courses[0][shortname]' : "test3",
	'courses[0][categoryid]' : 4
}

r = requests.post(url, params=data, verify=False)

print data
print r.text


Custom functions[modifica]

Això només cal si hem fet funcions personalitzades dins el moodle. Per la API estàndard no cal.

Típicament dóna un error.

Can not find data record in database table external_functions.

Es veu que passa quan creem una nova funció personalitzada a la API. Cal actualitzar unes taules, i això no passa automàticament.

Per forçar l'actualització de les funcions aquí suggereixen elevar la versió de version.php i així el moodle automàticament farà un upgrade.

http://stackoverflow.com/questions/38891022/moodle-custom-service-creation-issue

Un cop fet l'upgrade simulat, tindrem disponible la nova funció.