用于向Kolibri内容管理服务器添加内容的API
ricecooker的Python项目详细描述
ricecooker
ricecooker库是创建kolibri内容频道和 将它们上传到kolibri studio 是一个中心内容服务器,它kolibri 应用程序在导入内容时与之对话。
Kolibri内容管道如下图所示:
在这一点上,人们都会注意到"Kolibri的内容管道" src="https://warehouse-camo.cmh1.psfhosted.org/ef1eb7f7f7f7f7f7f9f7f7f7f7f7f7b7f7f1bd7e7d7346c92826/687474747470733222222222f7272726767676767676767747562756275757572657262626767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676楼6E74656E745F706970656C696E655F6469616772616D2E706E67" />
这个ricecooker框架是内容第一部分的"主要参与者" 管道,并在区域内突出显示管道的所有方面 上图中为蓝色。
在继续之前,我们先给出一些定义:
- Kolibri通道是一种树状数据结构,由以下内容节点组成:
- 主题节点(文件夹)
- 内容类型:
- 文档(
pdf
和epub
文件) - 音频(
MP3
文件) - 视频(
mp4
文件和字幕) - html5app
zip
文件(web内容的通用容器:html+js+css) - 练习
- 文档(
- sushi chef是一个python脚本,它使用ricecooker库 从不同来源导入内容,将内容组织到Kolibri频道 并将频道上传至Kolibri工作室。
概述
使用以下快捷方式跳转到ricecooker的最相关部分 文档取决于您的角色:
内容专家和管理员可以阅读非技术部分 以了解内容在Kolibri平台中的工作方式。
- 最好的起点是Kolibri平台概述
- 阅读更多关于此处支持的内容类型的信息
- 内容管理员可以咨询此文档 有关如何准备"规格表"的信息,指导开发人员如何 将内容导入Kolibri生态系统。
- 特别感兴趣的非技术性工作流程是csv工作流 以电子表格形式传送元数据
厨师作者可以阅读本自述文件的其余部分,并开始使用
ricecooker
库遵循以下第一步:ricecooker开发人员应阅读厨师作者的所有文档, 也可以参考developer/文件夹中的文档 关于"幕后"工作的附加信息 支持Kolibri内容管道:
- 运行厨师脚本,也称为chefops
- 在后台程序模式下运行厨师脚本
- 管理内容管道,也称为"sushops"
安装
我们假设您在计算机上安装了python 3,并且熟悉
使用python代码的最佳实践(例如virtualenv
或pipenv
)。
如果不是这样的话,你可以参考kolibri开发者文档作为指导
设置python virtualenv
ricecooker库是一个标准的python库,通过pypi:
- 运行pip install ricecooker
然后,您可以在厨师脚本中使用
import ricecooker
。 ricecooker.utils
中的某些功能需要附加软件:- 确保安装了命令行工具ffmpeg
- 在抓取网页时运行javascript代码需要phantomjs浏览器。 您可以在厨师的工作目录中运行预先构建的npm install phantomjs。
有关更多详细信息和安装选项,请参见docs/installation.md
简单的厨师示例
这是一个sushi chef脚本,它使用ricecooker
库创建一个kolibri
频道中只有一个主题节点(文件夹),并在该文件夹中放置一个PDF内容节点。
#!/usr/bin/env python
from ricecooker.chefs import SushiChef
from ricecooker.classes.nodes import ChannelNode, TopicNode, DocumentNode
from ricecooker.classes.files import DocumentFile
from ricecooker.classes.licenses import get_license
class SimpleChef(SushiChef):
channel_info = {
'CHANNEL_TITLE': 'Potatoes info channel',
'CHANNEL_SOURCE_DOMAIN': '<domain.org>', # where you got the content (change me!!)
'CHANNEL_SOURCE_ID': '<unique id for channel>', # channel's unique id (change me!!)
'CHANNEL_LANGUAGE': 'en', # le_utils language code
'CHANNEL_THUMBNAIL': 'https://upload.wikimedia.org/wikipedia/commons/b/b7/A_Grande_Batata.jpg', # (optional)
'CHANNEL_DESCRIPTION': 'What is this channel about?', # (optional)
}
def construct_channel(self, **kwargs):
channel = self.get_channel(**kwargs)
potato_topic = TopicNode(title="Potatoes!", source_id="<potatos_id>")
channel.add_child(potato_topic)
doc_node = DocumentNode(
title='Growing potatoes',
description='An article about growing potatoes on your rooftop.',
source_id='pubs/mafri-potatoe',
license=get_license('CC BY', copyright_holder='University of Alberta'),
language='en',
files=[DocumentFile(path='https://www.gov.mb.ca/inr/pdf/pubs/mafri-potatoe.pdf',
language='en')],
)
potato_topic.add_child(doc_node)
return channel
if __name__ == '__main__':
"""
Run this script on the command line using:
python simple_chef.py -v --reset --token=YOURTOKENHERE9139139f3a23232
"""
simple_chef = SimpleChef()
simple_chef.main()
假设上面的代码片段保存为文件simple_chef.py
您可以通过传递适当的命令行参数来运行chef脚本:
python simple_chef.py -v --reset --token=YOURTOKENHERE9139139f3a23232
运行chef脚本时最重要的参数是使用 要传入可从配置文件的 设置页
标记-v
(verbose)和--reset
通常在开发中很有用。
确保chef脚本从头开始并显示
命令行上的有用调试信息。
要查看所有ricecooker
命令行选项,请运行python simple_chef.py-h
。
有关运行chef脚本的更多详细信息,请参见chefops页
如果运行厨师时出错,请确保已替换
yourtokehere9139139f3a23232
通过从studio获得的令牌。
还要确保您已经更改了channel\u info['channel\u source\u domain]的值
而不是使用默认值。
下一步
进一步阅读
- 阅读Kolibri Studio文档 了解有关Kolibri Studio功能的更多信息
- 阅读《Kolibri用户指南》了解 如何在您的机器上安装Kolibri(用于测试频道)
- 阅读Kolibri开发者文档 了解Kolibri的内部工作原理。
0.6.32(2019-08-01)
- 更新文档以使用顶级标题
- 删除了对Python3.4的支持
- 删除了对"sous chef"工作流的支持
0.6.31(2019-07-01)
- 处理更多字幕转换格式:
srt
,ttml
,scc
,dfxp
,以及sami
0.6.30(2019-05-01)
- 更新的文档生成脚本,使ricecooker文档在读取文档时可用
- 添加了
更正
用于对内容元数据进行批量编辑的命令行脚本 - 添加了
studioapi
client以支持crud(创建、读取、更新、删除)studio操作 - 添加了pdf拆分助手方法(请参见
ricecooker/utils/pdf.py
)
0.6.23(2018-11-08)
- 更新了对最新版本的依赖关系
- 增加了对epub文件的支持(
epubfile
s可以添加到documentnode
s) - 添加了标签支持
- 将
studio_url的默认值更改为
api.studio.learningequality.org
- 为内容节点添加了
aggregator
和provider
字段 - 练习中对图像处理的各种错误修复
- 更改了使用
self.filename
检查文件格式的验证逻辑。允许的格式为self.allowed\u格式
- 添加了支持youtube字幕文件语言的帮助函数来支持导入youtube子菜单
- 增加了字幕转换功能
- 在
utils.downloader.download\u static\u assets中添加了static assets downloader helper方法
- 将linecook chef函数添加到
--generate
csv from directory structure- 修正了always
randomize=true的错误
- 文档:一般内容节点元数据指南
- 文档:视频压缩在指令和帮助脚本中
convertVideo.bat
和convertVideo.sh
0.6.17(2018-04-20)
- 增加了对conentnodes上的
role
属性的支持(当前coach
124;learner
) - 更新PressureCooker依赖项(以捕获压缩错误)
- 文档改进,请参见https://github.com/learningequality/ricecooker/tree/master/docs" rel="nofollow">https://github.com/learningequality/ricecooker/tree/master/docs
0.6.15(2018-03-06)
- 增加了对非MP4视频文件的支持,使用FFMPEG自动转换。参见
git diff b1d15fa 87f2528
- 为
linecook
chef类添加了csv练习工作流支持 - 添加了--nomonitor cli参数以禁用sushibar功能
- 定义的新环境变量:
- phantomjs路径:将其设置为phantomjs二进制文件(而不是假设节点模块中有一个)
- studio_url(别名contentworkshop_url):设置为kolibri studio服务器上传文件的url
- 支持寿司厨师的各种修复方法
- 从
ricecooker/utils/html.py中删除
minimize 删除对css html的依赖,并完全支持py3.4。
0.6.9(2017-11-14)
- 将默认日志记录级别更改为--详细
- 通过
--cmdsock
(参见docs/daemonization.md)添加了对cronjobs脚本的支持 - 添加了用于在utils/html writer.py中创建html5zip文件的工具
- 在utils/downloader.py中添加了用于下载带有可选js支持的html的实用程序
- 添加了用于创建souschef存档的utils/path_builder.py和utils/data_writer.py (包含文件夹层次结构+channel.csv+content.csv中的文件的zip存档)
0.6.7(2017-10-04)
- 同级内容节点现在需要具有唯一的源ID
- 除公共域以外的所有许可证都需要
版权所有者
字段
0.6.7(2017-10-04)
- 同级内容节点现在需要具有唯一的源ID
- 除公共域以外的所有许可证都需要
版权所有者
字段
0.6.6(2017-09-29)
- 添加了用于从ricecooker json树创建通道的类
- 添加了
linecook
chef类以支持基于souschef的频道工作流
0.6.4(2017-08-31)
- 为
contentnode
添加了language
属性(内部repr中的字符串键。在le utils中定义) - 使
语言
成为channelnode的必需属性 - 默认情况下启用sushibar.learningequality.org进度监视 设置寿司吧。var控制报告进度的位置(例如http://localhost:8001 rel="nofollow">http://localhost:8001)
- 将Le Utils和PressureCooker依赖项更新为最新版本
0.6.2(2017-07-07)
- 澄清ricecooker仅限于python3(目前)
- 使用https://and wss://for suhibar reporting
0.6.0(2017-06-28)
- 远程进度报告和登录到Sushibar(MVP版本)
- 基于suchichef类的新api
- 在兼容模式下支持现有的旧API厨师
0.5.13(2017-06-15)
- 添加寿司店功能之前的最后一个稳定版本
- 重命名--不激活参数--stage
0.1.0(2016-09-30)
- pypi上的第一个版本。