5

我目前是大学的学生,每天都在使用 Moodle。我想访问一些我可以使用的信息(例如,我正在学习的课程的信息、哪些作业到期以及何时等)

我对 Moodle 的 API 进行了一些研究,但似乎都是针对实际运行 Moodle(我的大学)的高级用户。

作为一名学生,有没有一种简单的方法可以获取信息?

我的应用程序使用 Node.js

4

1 回答 1

13

如果您的大学为移动应用启用了 Web 服务,您可以生成自己的 API 令牌并调用移动应用使用的 Web 服务。如果后者未启用,您必须与管理员联系以获得 Web 服务访问权限。

使用 moodle.org 进行演示

首先,让我们获取一个 API 令牌(替换$USERNAME为您的用户名和$PASSWORD密码):

$ curl -d username="$USERNAME" -d password="$PASSWORD" 'https://moodle.org/login/token.php?service=moodle_mobile_app'
{
  "token":"SNIPTOKEN",
  "privatetoken":"SNIPPRIVATE"
}

接下来,我们需要您的userid,它将在其他 Web 服务调用中使用。您可以userid通过调用 web 服务获取您的core_webservice_get_site_info。确保替换$TOKEN为您在上面获得的令牌。

$ curl -d wstoken="$TOKEN" -d wsfunction=core_webservice_get_site_info 'https://moodle.org/webservice/rest/server.php?moodlewsrestformat=json' | python -m json.tool | grep userid
"userid": 1451616,

现在您已经有了userid,我们可以请求您注册的课程。

$ curl -d wstoken="$TOKEN" -d wsfunction=core_enrol_get_users_courses -d userid=1451616 'https://moodle.org/webservice/rest/server.php?moodlewsrestformat=json' | python -m json.tool
[
    {
        ...snip...
        "fullname": "Moodle in English",
        "id": 5,
        ...snip...
    },
    {
        ...snip...
        "fullname": "Moodle en fran\u00e7ais",
        "id": 20,
        ...snip...
    },
    {
        ...snip...
        "fullname": "Moodle Certification",
        "id": 48,
        ...snip...
    }
]

回顾'

先决条件:

  • 必须启用移动应用网络服务
  • 必须启用REST协议
  • 您需要一个 API 令牌

查询:

  • YOURHOST/webservice/rest/server.php?moodlewsrestformat=json.
  • 请求必须是POST请求
  • 请求必须包含wstoken:您的令牌
  • 请求必须包含wsfunction:您正在调用的函数
  • 请求类型必须是:application/x-www-form-urlencoded

更多的

我已经大大简化了它的工作原理以及有哪些替代方案,但这应该可以帮助您入门。您可能有兴趣查看开发人员文档以获取有关可用 Web 服务的更多信息:

于 2017-06-22T07:27:20.340 回答