快速入门 - xbmc swift 1.0.1 中文翻译文档

快速入门

如果尚未安装xbmcswift2,请转至安装 页面。

xbmcswift2的目的是使插件编写者能够更快地开发和调试其插件。这是通过以下方式进行的:

  • 一个引导脚本,用于创建一个包含文件夹结构和所需文件的空插件。

  • 通过允许在命令行或XBMC中运行插件来对插件进行无缝测试。xbmcswift2处理xbmc python模块的模型,以确保您的插件将在XBMC外部(以受限方式)运行而无需任何代码更改。

  • 基本的URL路由代码,因此您可以专注于编写特定于插件的Web解析代码,而不必处理重复的样板和url解析。

  • 有用的功能和代码模式库,可增强插件的功能。


XBMC插件简介

在继续之前,您应该已经熟悉XBMC插件的常规文件结构和必需文件。如果不是,请花几分钟阅读有关XBMCWiki中的插件的信息。


创建插件骨架

xbmcswift2带有一个有用的控制台脚本,该脚本将为您创建一个插件框架,包括所有入门所需的文件夹和文件。只需运行xbmcswift2 create并回答一些问题即可个性化您的插件。

下面是一个示例会话:

$ xbmcswift2 create
xbmcswift2 - A micro-framework for creating XBMC plugins.
xbmc@jonathanbeluch.com
--
I'm going to ask you a few questions to get this project started.
What is your plugin name? : Hello XBMC
Enter your plugin id. [plugin.video.helloxbmc]:
Enter parent folder (where to create project) [/private/tmp]:
Enter provider name : Jonathan Beluch (jbel)
Projects successfully created in /private/tmp/plugin.video.helloxbmc.
Done.

你好XBMC

如果您导航到新创建的文件夹plugin.video.helloxbmc,则将找到与下面的完全相同的addon.py。

from xbmcswift2 import Plugin


plugin = Plugin()


@plugin.route('/')
def index():
 item = {
     'label': 'Hello XBMC!',
     'path': 'http://s3.amazonaws.com/KA-youtube- converted/JwO_25S_eWE.mp4/JwO_25S_eWE.mp4',
    'is_playable': True
}
return [item]


if __name__ == '__main__':
    plugin.run()

上面的代码是一个功能齐全的XBMC插件(并不是那么有用!)。那么代码是做什么的呢?

1.导入Plugin类之后,我们创建我们的插件实例。xbmcswift将解析addon.xml文件中正确的插件名称和ID。

2.我们在index函数上使用plugin.route装饰器。这会将URL路径“ /”绑定到索引函数。(“ /”是默认网址路径)。

注意:插件中必须始终存在url规则“ /”。这是首次运行插件时的默认路由。

3.索引函数创建带有某些键/值的单个字典。这就是使用xbmcswift2创建列表项的方式。至少大多数项目都具有path 和label。该is_playable标志告诉XBMC,这是一个媒体项目,而不是这点回一个插件的URL。

4.我们从索引函数返回一个列表,其中包含一个项目。对于典型的xbmcswift2视图,这是添加列表项的正确方法。

5.我们调用plugin.run()运行我们的插件。这行必须位于name防护中。如果不是,您的插件将无法在命令行上正确运行。


从运行命令行附加组件

xbmcswift2的亮点之一是能够从命令行运行插件。要做到这一点,确保你的工作目录是你的插件文件夹(你addon.xml文件所在)的根和执行xbmcswift2 运行:

$ xbmcswift2 run
2012-05-02 19:02:37,785 - DEBUG - [xbmcswift2] Adding url rule "/" named 
"index" pointing to function "index"
2012-05-02 19:02:37,798 - DEBUG - [xbmcswift2] Dispatching / to once
2012-05-02 19:02:37,798 - INFO - [xbmcswift2] Request for "/" matches rule 
for function "index"
----------------------
 #  Label       Path
----------------------
[0] Hello XBMC! (None)
----------------------

马上我们可以看到插件的输出。在CLI中运行时,xbmcswift2将日志消息打印到STDERR,因此您可以通过将2> / dev / null附加到上一个命令来隐藏它们 。在日志下方,我们可以看到列表项的简单显示,在本例中为单个项目。

有关在命令行上运行的详细说明,请参阅在命令行上运行xbmcswift2。


URL路由

使用xbmcswift2的另一个优点是其干净的URL路由代码。这意味着您不必编写自己的代码即可解析XBMC提供的URL,并将其路由到特定功能。xbmcswift2使用传递给route()装饰器的 路径将URL绑定到函数。例如,/ videos /的路由将导致plugin://plugin.video.helloxbmc/videos/的URL 调用装饰函数。

甚至可以将变量从URL传递给函数。您可能具有类似的功能,可以列出给定类别的视频:

@plugin.route('/categories/<category>/')
def show_videos(category):
    '''Display videos for the provided category'''
    # /categories/science/的传入URL将调用此函数,并且
    # 类别将具有“科学”值
    items = get_video_items(category)
    return plugin.finish(items)

当前,没有类型强制,因此从URL抽取的所有变量都是字符串。

现在,我们可以将传入的URL定向到特定的视图。但是,如何在代码中将列表项链接到其他视图呢?我们将修改Hello XBMC插件:

@plugin.route('/')
def index():
items = [
    {'label': 'Hola XBMC!', 'path': plugin.url_for('show_label', label='spanish')},
    {'label': 'Bonjour XBMC!', 'path': plugin.url_for('show_label', label='french')},
]
return items


@plugin.route('/labels/<label>/')
def show_label(label):
# 通常我们会使用标签来解析特定的网页,在这种情况下,我们只是
# 将其用于新的列表项标签以显示URL解析的工作方式。
items = [
    {'label': label},
]
return items

现在让我们以交互方式运行我们的插件以探索:

$ xbmcswift2 run interactive
2012-05-02 19:14:53,792 - DEBUG - [xbmcswift2] Adding url rule "/" named 
"index" pointing to function "index"
2012-05-02 19:14:53,792 - DEBUG - [xbmcswift2] Adding url rule 
"/labels/<label>/" named "show_label" pointing to function "show_label"
2012-05-02 19:14:53,793 - DEBUG - [xbmcswift2] Dispatching / to interactive
2012-05-02 19:14:53,794 - INFO - [xbmcswift2] Request for "/" matches rule for function "index"
-------------------------------------------------------------------
 #  Label         Path
-------------------------------------------------------------------
[0] Hola XBMC!    (plugin://plugin.video.helloxbmc/labels/spanish/)
[1] Bonjour XBMC! (plugin://plugin.video.helloxbmc/labels/french/)
-------------------------------------------------------------------
Choose an item or "q" to quit: 0

2012-05-02 19:14:59,854 - INFO - [xbmcswift2] Request for "/labels/spanish/" 
matches rule for function "show_label"
----------------------------------------------
#  Label   Path
----------------------------------------------
[0] ..      (plugin://plugin.video.helloxbmc/)
[1] spanish (None)
----------------------------------------------
Choose an item or "q" to quit: q

$ python addon.py interactive
--
[0] Hola XBMC! (plugin://plugin.video.helloxbmc/labels/spanish/)
[1] Bonjour XBMC! (plugin://plugin.video.helloxbmc/labels/french/)
Choose an item or "q" to quit: 0
--
[0] spanish (None)

我们在这里介绍了一些新主题。

  • 我们将交互作为位置参数传递给xbmcswift2 run 命令。这使我们能够与列表项进行交互,而不仅仅是将它们打印一次并退出。
  • 我们使用url_for()创建指向其他视图函数的url。这是视图函数创建链接到其他函数的列表项的方式。
  • 我们的函数show_label需要一个参数'label',因此我们将具有相同名称的关键字参数传递给url_for。
  • 要设置列表项的网址,我们在项目字典中设置“ path”关键字。
  • xbmcswift2显示一个列表项“ ..”,它类似于XBMC的“ ..”列表项。这使您可以返回到父目录。

要了解有关URL路由和其他可用选项的更多信息,请检出<API>或<patterns page>。


播放媒体

我们还没有介绍的最后一件事是如何播放实际的视频。默认情况下,返回的所有项目都是目录项目。这意味着它们充当了更多列表项的目录,并且其URL指向了插件。为了区分目录项目中的可播放媒体,我们在项目字典中将is_playable设置为True。

首先,让我们添加一个新视图来播放某些媒体:

@plugin.route('/videos/')
def show_videos():
items = [
    {'label': 'Calculus: Derivatives 1',
     'path': 'http://s3.amazonaws.com/KA-youtube-converted/ANyVpMS3HL4.mp4/ANyVpMS3HL4.mp4',
     'is_playable': True,
     }
]
return plugin.finish(items)

如您所见,path的URL值是指向视频资产的直接链接,我们没有调用 url_for。如果需要使用XBMC的setResolveUrl功能,请参阅plugins.set_resolved_url的模式部分。

现在,让我们更新show_label中的item字典以添加路径:

{'label': label, 'path': plugin.url_for('show_videos')},

现在,您将拥有功能齐全的XBMC插件,并带有嵌套菜单和可播放媒体。

再单独进行一节!


使用XBMC,xbmcgui,xbmcaddon

如果您需要xbmcswift2不支持的高级功能,则始终可以直接导入和调用任何xbmc模块。但是,如果您仍然希望能够从命令行运行插件,则应该从xbmcswift2导入xbmc模块。

 from xbmcswift2 import xbmc, xbmcgui

由于这些模块是用C编写的,因此仅在运行XBMC时可用。为了使插件能够在命令行上运行,xbmcswift2具有这些模块的模拟版本。


进一步说

这应该足以开始您的第一个简单XBMC插件。如果您想了解更多信息,请查看详细的教程并查看常见模式。


原文:https://xbmcswift2.readthedocs.io/en/latest/quickstart.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335