快速入门
如果尚未安装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