用于向Kolibri内容管理服务器添加内容的API

ricecooker的Python项目详细描述


ricecooker

ricecooker库是创建kolibri内容频道和 将它们上传到kolibri studio 是一个中心内容服务器,它kolibri 应用程序在导入内容时与之对话。

Kolibri内容管道如下图所示:

在这一点上,人们都会注意到"Kolibri的内容管道" src="https://warehouse-camo.cmh1.psfhosted.org/ef1eb7f7f7f7f7f7f9f7f7f7f7f7f7b7f7f1bd7e7d7346c92826/687474747470733222222222f7272726767676767676767747562756275757572657262626767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676楼6E74656E745F706970656C696E655F6469616772616D2E706E67" />

这个ricecooker框架是内容第一部分的"主要参与者" 管道,并在区域内突出显示管道的所有方面 上图中为蓝色。

在继续之前,我们先给出一些定义:

  • Kolibri通道是一种树状数据结构,由以下内容节点组成:
    • 主题节点(文件夹)
    • 内容类型:
      • 文档(pdfepub文件)
      • 音频(MP3文件)
      • 视频(mp4文件和字幕)
      • html5appzip文件(web内容的通用容器:html+js+css)
      • 练习
  • sushi chef是一个python脚本,它使用ricecooker库 从不同来源导入内容,将内容组织到Kolibri频道 并将频道上传至Kolibri工作室。

概述

使用以下快捷方式跳转到ricecooker的最相关部分 文档取决于您的角色:

安装

我们假设您在计算机上安装了python 3,并且熟悉 使用python代码的最佳实践(例如virtualenvpipenv)。 如果不是这样的话,你可以参考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的内部工作原理。
< H1> 历史

0.6.32(2019-08-01)

  • 更新文档以使用顶级标题
  • 删除了对Python3.4的支持
  • 删除了对"sous chef"工作流的支持

0.6.31(2019-07-01)

  • 处理更多字幕转换格式:srtttmlsccdfxp,以及sami

0.6.30(2019-05-01)

  • 更新的文档生成脚本,使ricecooker文档在读取文档时可用
  • 添加了更正用于对内容元数据进行批量编辑的命令行脚本
  • 添加了studioapiclient以支持crud(创建、读取、更新、删除)studio操作
  • 添加了pdf拆分助手方法(请参见ricecooker/utils/pdf.py

0.6.23(2018-11-08)

  • 更新了对最新版本的依赖关系
  • 增加了对epub文件的支持(epubfiles可以添加到documentnodes)
  • 添加了标签支持
  • studio_url的默认值更改为api.studio.learningequality.org
  • 为内容节点添加了aggregatorprovider字段
  • 练习中对图像处理的各种错误修复
  • 更改了使用self.filename检查文件格式的验证逻辑。允许的格式为self.allowed\u格式
  • 添加了支持youtube字幕文件语言的帮助函数来支持导入youtube子菜单
  • 增加了字幕转换功能
  • utils.downloader.download\u static\u assets中添加了static assets downloader helper方法
  • 将linecook chef函数添加到--generatecsv from directory structure
  • 修正了alwaysrandomize=true的错误
  • 文档:一般内容节点元数据指南
  • 文档:视频压缩在指令和帮助脚本中convertVideo.batconvertVideo.sh

0.6.17(2018-04-20)

  • 增加了对conentnodes上的role属性的支持(当前coach124;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
  • linecookchef类添加了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树创建通道的类
  • 添加了linecookchef类以支持基于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上的第一个版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在JavaSpring引导应用程序中合并两个对象?   java序列化与防止按钮、链接等被点击两次有关吗?   java CORBA序列:我可以用方法定义对象序列吗?   java没有SonarQube的Spring批处理项目的代码覆盖   java如何在eclipse中删除上述方法和属性的搜索引用链接   spring boot如何在java注释中使用泛型T类型?   java导入外部(未编译)groovy类,并将它们保留在jar之外   如何在int[]Java中找到所有值的总和?   Java在ArrayList中删除重复项的问题   Java更改菜单栏、项目背景和文本颜色   网络设置网络。使用Elasticsearch JAVA API将主机发布到客户端节点   Python到Java加密/解密,确保密码匹配?   java Faing在Ubuntu12.04上构建eucalyptus的困难   java使用org。阿帕奇。平民fileupload在mysql数据库中上传图像,但调用servlet会得到一个空白的白页