Export to GitHub

moonplayer - PluginTutorial.wiki


插件编写指南

Moon Player插件使用python语言编写。具体示例可以参考Moon Player自带的插件(在/usr/share/moonplayer/plugins下)。这里用解析新浪视频的插件为例简单介绍Moon Player插件的编写方法。

```

!/usr/bin/python

from utils.utils import list_links import re import moonplayer

Search videos

def search(kw, page): kw = kw.replace(' ', '+') url = 'http://video.sina.com.cn/search/index.php?m1=f&k='+ kw + '&page=' + str(page) moonplayer.get_url(url, search_cb, None)

def search_cb(content, data): links = list_links(content, 'http://video.sina.com.cn/v/b/') moonplayer.show_list(links)

Parse videos

video_re = re.compile(r'http://video.sina.com.cn/v/b/(\d+)-\d+.html') def parse(url, options): match = video_re.match(url) if match: url = 'http://v.iask.com/v_play.php?vid=' + group(1) moonplayer.get_url(url, parse_cb, options) else: moonplayer.warn('Wrong url')

name_re = re.compile(r'http://.+?)]') def parse_cb(content, options): url_match = url_re.search(content) name_match = name_re.search(content) if name_match and url_match: name = name_match.group(1) + '.hlv' url = url_match.group(1) if options & moonplayer.OPT_DOWNLOAD: moonplayer.download([name, url]) else: moonplayer.play([name, url]) else: moonplayer.warn('Fail') ```

开始

from utils.utils import list_links import re import moonplayer 第一行导入了/plugins/utils/下定义的一个函数,用于列出搜索结果页中的超链接。 第二行导入python的正则表达式库。

search 函数

def search(kw, page): kw = kw.replace(' ', '+') url = 'http://video.sina.com.cn/search/index.php?m1=f&k='+ kw + '&page=' + str(page) moonplayer.get_url(url, search_cb, None) 当funPlayer中的搜索(Go)按钮被按下后会调用这个函数。参数kw是搜索的关键词,是一个UTF-8编码的字符串;参数page是页码数,是一个整数,由1开始。

第四行调用get_url函数得到下载页。函数原型如下: def get_url(url, callback_func, second_arg) 这是funPlayer内部的一个函数,url为要下载的网页的地址,callback_func为下载完成后调用的回调函数,second_arg为传入回调函数的第二个参数,这里用不到,所以传入了None。

回调函数

def search_cb(content, data): links = list_links(content, 'http://video.sina.com.cn/v/b/') moonplayer.show_list(links) content为下载的页面,是一个字符串,data就是刚才传入的None。 第三行使用show_list函数显示搜索结果。它接受一个List,并且必须这样排列:[name1, url1, name2, url2, name3, url3...] 第一行调用了刚才导入的list_links函数,它可列出content中以'http://video.sina.com.cn/v/b/'开头的超链接,并返回符合要求的List。

parse 函数

video_re = re.compile(r'http://video.sina.com.cn/v/b/(\d+)-\d+.html') def parse(url, options): match = video_re.match(url) if match: url = 'http://v.iask.com/v_play.php?vid=' + group(1) moonplayer.get_url(url, parse_cb, options) else: moonplayer.warn('Wrong url') 这个函数在双击搜索结果或者点击“下载”按钮时会被调用,用以解析视频地址。第一个参数表示视频播放页面的URL,第二个参数为解析选项,这里把它传递给回调函数。 如果需要弹出警告窗口,可以使用warn函数,它接受一个UTF-8的字符串。

关于options:指定了解析视频的选项,目前有以下三个值,可以通过“&”运算符取得: ``` moonplayer.OPT_QL_SUPER #超清视频 moonplayer.OPT_QL_HIGH #高清视频 moonplayer.OPT_DOWNLOAD #下载视频

例如,要判断解析何种清晰度的视频, 可以这样:

if options & moonplayer.OPT_QL_SUPER: dosomething... elif options & moonplayer.OPT_QL_HIGH: dosomething... else: dosomething... ```

parse_cb 回调函数

name_re = re.compile(r'<vname><!\[CDATA\[(.+?)]') url_re = re.compile(r'(http://.+?)]') def parse_cb(content, options): url_match = url_re.search(content) name_match = name_re.search(content) if name_match and url_match: name = name_match.group(1) + '.hlv' url = url_match.group(1) if options & moonplayer.OPT_DOWNLOAD: moonplayer.download([name, url]) else: moonplayer.play([name, url]) else: moonplayer.warn('Fail') 第九行判断用户是否点击了“下载”按钮。如果是,调用download函数下载视频;否则,调用play函数播放视频。它们都接受一个List,同样是[name1, url1, name2, url2...]的格式。 如果不能一步完成解析,可以继续在回调函数里调用get_url。

其他

其他moonplayer api: def moonplayer.warn(msg) #显示警告信息 def moonplayer.question(msg) #显示提问对话框,返回布尔值 def moonplayer.show_album(list) #同show_list,用于显示专辑 def moonplayer.set_list_item_color(i, color) #设置项目颜色 还有一些可选择实现的函数 def search_album(keyword, page) 同search,在按下专辑(album)按钮时调用,用于搜索专辑。

最后

把文件保存为plugin_xxx.py,放到~/.moonplayer/plugins下,就可以使用啦!