我正在尝试使用 Python 的请求库访问 Moodle 安装的 Web 服务。我有 API 的文档和一个用 php 编写的示例项目(我以前没有看过 php,它比我预期的要理解的要困难得多),但我真的很难正确格式化请求。该网站返回检测到的无效参数,因此我非常确定我的端点、授权令牌和服务器配置正在工作,只是数据的格式让我失望。
首先这里是错误...
<?xml version="1.0" encoding="UTF-8" ?>
<EXCEPTION class="invalid_parameter_exception">
<ERRORCODE>invalidparameter</ERRORCODE>
<MESSAGE>Invalid parameter value detected</MESSAGE>
</EXCEPTION>
Run Code Online (Sandbox Code Playgroud)
现在我的代码...
import requests
target = 'http://example.com/moodle/webservice/rest/server.php?'
moodle_create_token = 'xxx'
moodle_enrol_token = 'yyy'
url_payload = {
"wstoken":moodle_create_token,
"wsfunction":"core_user_create_users"
}
###not sure if I should just be passing this as a dict or some deeper more layered struct
payload = {
"username":"testuser",
"password":'testpass',
"firstname":'testf',
"lastname":'testl',
"email":"test@example.com",
"idnumber":"1234"
}
###not sure how to include the payload as the …Run Code Online (Sandbox Code Playgroud) 我正在使用CookComputing XML-RPC库来构建C#控制台客户端,以便在Moodle(一个开源学习管理系统)上执行API方法.服务器正在使用ZEND XML-RPC.
当我运行代码时,我得到一个TypeLoadException是Unhandled,引用这一行:
System.Object myResults = proxy.moodle_user_get_user_by_id(myUserIds);
Run Code Online (Sandbox Code Playgroud)
"重写成员时违反了继承安全规则:'CookComputing.XmlRpc.XmlRpcFaultException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'.重写方法的安全性可访问性必须与方法的安全性可访问性相匹配被覆盖."
我的客户端代码是:
...
using CookComputing.XmlRpc;
[XmlRpcUrl("http://moodle.ourcompany.com/webservice/xmlrpc/server.php?wstoken=somereallylongtokenstring")]
public interface IMoodleUserGetUsersById : IXmlRpcProxy
{
[XmlRpcMethod("moodle_user_get_users_by_id")]
System.Object moodle_user_get_user_by_id(int[] userIds);
}
namespace Moodle_test_api1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Testing XML-RPC Services for Moodle!");
IMoodleUserGetUsersById proxy = XmlRpcProxyGen.Create<IMoodleUserGetUsersById>();
int[] myUserIds = {11, 12};
System.Object myResults = proxy.moodle_user_get_user_by_id(myUserIds);
//Console.WriteLine("Trying Function: {0}:{1}", proxy.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
我想要使用的方法的API文档是:
moodle_user_get_users_by_id: Get users by id.
Arguments
---------
userids (Required)
General structure
list of (
int //user ID …Run Code Online (Sandbox Code Playgroud) 我想在我的服务器上安装moodle.我在public html文件夹中解压缩了moodle包.此moodle文件夹具有755访问权限集.然后我在同一个文件夹中创建了moodle数据文件夹,public_html并在其中使用777.然后我尝试运行安装,但我总是得到error: Data directory (/home/studentai/***/data) cannot be created by the installer.但我手动创建了它.那问题出在哪里?
我正在开发一个Android应用程序,它将使用Moodle提供的REST Web服务core_files_upload将内容上传到我的Moodle安装中的用户的私人文件中。core_files_upload采用以下参数:
contextid
component
filearea
itemid
filepath
filename
filecontent
Run Code Online (Sandbox Code Playgroud)
Moodle Web服务的文档不是很详细,因此我将Moodle论坛和Google搜索中的内容拼凑而成,但是我觉得自己已经走到了尽头。从示例中,我看到这些参数采用以下值:
contextid: int - not sure whether this is the userid
component: "user"
filearea: "private"
itemid: 0
filepath: "/"
filename: "filename.jpg"
filecontent: base64 encoding of file
Run Code Online (Sandbox Code Playgroud)
我将我的用户ID用作上下文ID-由于缺少文档,我不确定这是否正确。当我发布这个我收到错误:
{"exception":"moodle_exception","errorcode":"nofile","message":"File not specified"}
Run Code Online (Sandbox Code Playgroud)
我查看了在“ moodle / files / externallib.php”中定义了core_files_upload的位置,当文件内容不存在时会生成此错误消息。
我尝试过发布到测试脚本,并且可以基于base64编码在Moodle服务器上成功创建图像,例如:
<?php
file_put_contents('MyFile.jpg', base64_decode($_POST['filecontent']));
Run Code Online (Sandbox Code Playgroud)
谁能阐明为什么我无法成功上传到Moodle?
contextid是执行上载的用户的userid吗?
我读了moodles文档,它说如果数据根目录必须在网站的公共html文件夹中(请注意我不能在它之外创建它,因为我没有足够的权限,因为我使用的是免费帐户).然后你必须chmod到770并使用htaccess来保护它.现在我在我的域中创建moodle文件夹/ moodle /并且moodle上传文件夹是/ moodle-uploads/uploads /我在/moodle-uploads/.htaccess中设置了.htaccess,其内容是
order deny,allow
deny from all
Run Code Online (Sandbox Code Playgroud)
在http://docs.moodle.org/20/en/Creating_Moodle_site_data_directory上指定
但是当我运行自动安装程序脚本时,它仍然说数据根目录不安全
我正在开发一个moodle站点,我必须使用外部服务来验证用户身份.此SSO服务应该是唯一的身份验证形式.
外部服务的提供者要求我在他们的服务器上使用他们的登录表单,所以我必须禁用moodle登录表单.
我查看了各种身份验证插件,但它们似乎都没有完全按照我的要求去做.
到目前为止,我认为这就是我要做的事情:
这是我第一次与Moodle合作,所以我有几个问题:
我真的希望你能帮助我:)
有没有办法一次删除多个课程?我似乎只能一个接一个地做到这一点.
也许有更好的方法,但我还没有找到任何东西.
我需要找到Moodle中存储日志数据的位置.在Moodle数据库中有一个名为"log"的表,其中存储了日志数据.但是,我可以让Moodle报告显示绝对没有存储在此表中的日志记录数据.我正在使用Moodle版本2.7.8.
我通常使用wordpress,我可以随时下载演示数据,用演示数据测试一个功能齐全的网站wordpress(我用wordpress导入器导入xml文件).但在moodle中,我搜索了一个演示数据,以测试一个moodle网站,但我找不到它...那么我在哪里可以下载一个演示文件或数据库来测试和查看moodle如何在我自己的localhost中工作.
示例数据wordpress示例:
<?xml version="1.0" encoding="UTF-8"?>
<channel>
<item>
<title></title>
<link>http://themetrust.com/demos/work/?p=125</link>
<pubDate>Mon, 20 Dec 2010 16:09:14 +0000</pubDate>
<dc:creator><![CDATA[Henry]]></dc:creator>
<guid isPermaLink="false">http://themetrust.com/demos/work/?p=125</guid>
<description></description>
<content:encoded><![CDATA[ ]]></content:encoded>
<excerpt:encoded><![CDATA[]]></excerpt:encoded>
<wp:post_id>125</wp:post_id>
<wp:post_date>2010-12-20 16:09:14</wp:post_date>
<wp:post_date_gmt>2010-12-20 16:09:14</wp:post_date_gmt>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>open</wp:ping_status>
<wp:post_name>125</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_parent>0</wp:post_parent>
<wp:menu_order>4</wp:menu_order>
<wp:post_type>nav_menu_item</wp:post_type>
<wp:post_password></wp:post_password>
<wp:is_sticky>0</wp:is_sticky>
<wp:postmeta>
<wp:meta_key>_menu_item_classes</wp:meta_key>
<wp:meta_value><![CDATA[a:1:{i:0;s:0:"";}]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_menu_item_target</wp:meta_key>
<wp:meta_value><![CDATA[]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_menu_item_object</wp:meta_key>
<wp:meta_value><![CDATA[page]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_menu_item_object_id</wp:meta_key>
<wp:meta_value><![CDATA[113]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_menu_item_menu_item_parent</wp:meta_key>
<wp:meta_value><![CDATA[0]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_menu_item_type</wp:meta_key>
<wp:meta_value><![CDATA[post_type]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_menu_item_xfn</wp:meta_key>
<wp:meta_value><![CDATA[]]></wp:meta_value>
</wp:postmeta>
<wp:postmeta>
<wp:meta_key>_menu_item_url</wp:meta_key>
<wp:meta_value><![CDATA[]]></wp:meta_value>
</wp:postmeta>
</item>
</channel>
Run Code Online (Sandbox Code Playgroud)
谢谢 !
来自Moodle doc:
上下文是Moodle中可以分配角色的空间.
我知道上下文是用于管理Moodle对象的逻辑空间.
我开发了一个带有文件上传的自定义块插件,我使用它file_prepare_draft_area和file_save_draft_area_files函数.有一个$context必须传递的参数,我真的不知道我应该传递什么上下文?这意味着,我想,我应该在哪个逻辑空间中放置我的块插件上传的文件?在我看来,最合乎逻辑的是将上传的文件存储在与我的块插件相关的上下文中.
我试图使用context_block :: instance($ instanceid),但我不知道如何获取$ instanceid param.