【更新 v0.6】分享一个抓取字幕的Chrome小插件(支持edX, Coursera, 学堂在线, FutureLearn) | MOOC学院
【更新 v0.6】分享一个抓取字幕的Chrome小插件(支持edX, Coursera, 学堂在线, FutureLearn)
【通知】现在Chrome只允许使用通过store***的扩展,所以之前手动***的,如果被chrome禁用,请删除后再去商店在线***即可。【报错】报错请附上在e站上课的时候发现字幕都是在视频的旁边单独辟开一块滚动显示。个人感觉体验很不好啊●_● 对比度太大会闪到眼睛。还有的课会提供一个srt下载链接,但是视频区域没有CC选项。所以听力苦手只好把视频和老师提供的transcrip.srt下载下来,用播放器看。后来发现有的课不提供字幕下载的链接。于是请帮我抓源码。没想到?明同学顺手做了个chrome插件,专门提取e站字幕的。这样他就不用一直提供售后服务了~ 后来在小伙伴们的要求下陆续增加了学堂在线以及coursera字幕抓取的功能。分享给和我有一样怪癖的小伙伴们~ 适用于Chrome和基于Chromium开发的浏览器。 ***Version 0.6 在线***:
使用Ⅰ、edX & 学堂在线***完成之后在e站或者学堂在线上看课程视频的时候就会发现,在视频title的旁边会出现一个SUBTITLE DOWNLOAD 链接,点击就可以下载插件生成的srt字幕文件了~如果该页面没有视频或者视频没有提供字幕,点击链接后会弹出空文件的提示。如果视频title旁未出现下载链接,请刷新页面。如下图↓对于视频中出现不同语言的字幕,如下图↓请先在CC选项中选择自己需要的那个语言,比如Chinese,等视频右边区域中开始显示中文字幕时,再点击SUBTITLE DOWNLOAD链接进行下载。如果还需要英文字幕,在CC选项中点击English进行切换,待右边区域开始显示英文字幕,再点击SUBTITLE DOWNLOAD链接进行下载即可。无需刷新页面或者重新登录等。Ⅱ、Coursera该功能可以免插件实现,具体操作详见。***插件后,C站视频如果有中文字幕会在Video Lectures页面给出中文字幕的下载链接,例如: (截图如下↓)在英文srt字幕下载图标的旁边,出现一个【中】字链接,点击即可下载该视频对应的中文字幕。如下图↓不管是免插件下载还是使用插件下载的中文字幕,在播放时大多会遇到乱码的情况,具体解决方法已在帖子中给出,往下翻,或者使用Ctrl+F搜索【中文字幕乱码】。Ⅲ、FutureLearn***完成后,在有字幕的视频页面下方的下载区域中,会出现字幕链接,如下↓点击后跳转到一个文本页面,全选复制并粘贴到记事本中,保存。在播放器中手动加载txt格式字幕即可。 归档---------------------【释出 Version 0.1】-----------------------支持edX字幕抓取---------------------【更新 Version 0.2】-----------------------新版本对没有CC选项的视频页面做了优化,对抓取到的空文件,点击下载时会弹出无字幕警告,同时支持学堂在线字幕抓取---------------------【更新 Version 0.3】-----------------------新版本修复学堂在线抓取不完全的bug。并在Chrome Webstore上线---------------------【更新 Version 0.4】-----------------------新版本修复字幕前后时间点一致的BUG---------------------【更新 Version 0.5】-----------------------新版本增加Coursera字幕抓取---------------------【更新 Version 0.5】-----------------------新版本支持FutureLearn字幕抓取 ----------------------------【中文字幕乱码】------------------------------关于中文字幕如果碰上乱码 (一般在Windows系统中常见) ,目前有两种解决方式:Ⅰ)请使用支持UTF-8字幕格式的播放器播放测试可行的播放器如下↓① MPC下载地址:、备注:② MPlayer下载地址:、③ VLC Media Player下载地址:、、、、备注:选项中设置字幕编码格式为UTF-8并设置字体为非中文名称的中文字体(PMingLiU, DFKai-SB, Microsoft JhengHei, MingLiU_HKSCS)即可正常显示字体。Ⅱ)用记事本打开字幕另存成ANSI编码格式。再用播放器手动加载txt格式字幕。如下图↓ ------------------------------【源码公开】--------------------------------源码公开托管在Github,
引用 的话:我想问这个,但是找不到下载字幕的地方....麻烦帮我看下 你是想要下法语的字幕么? coursera 其实只是做了中文的字幕下载,其它语言的检测还没有加上,而这个课程我看了下,暂时没有中文字幕的。不过这个课程也是挺好玩的,居然一个字幕的下载链接都没给…你可以按照
这里给出的方法把语言后缀改成 fr 即可下载你需要的字幕了。例如: 这个字幕对应的就是
课程字幕了(对的,我就是想让你看到那个 39 对应课程的 ID ~)
亲,我在下载时出现Chrome网上应用店暂时无法加载该应用,我下不了也进不去,能给支招吗,麻烦了
引用 的话: 你是想要下法语的字幕么? coursera 其实只是做了中文的字幕下载,其它语言的检测还没有加上,而这个课程我看了下,暂时没有中文字幕的。不过这个课程也是挺好玩的,居然一个字幕的下载链接都没给…你可...谢谢我试试~
引用 的话:亲,我在下载时出现Chrome网上应用店暂时无法加载该应用,我下不了也进不去,能给支招吗,麻烦了你再试试能不能进吧。以前可以手动***的,后来chrome禁了。
引用 的话:不需要用下载工具的哈。直接把链接复制粘贴到浏览器地址栏,然后把en改为zh,之后回车,浏览器就开始下载了~你可以试试这两个链接,我试了可以用的。实在不行的话,我去问问能不能把这个功能加到插件里头~ht...就是改也很麻烦啊。。。这视频这么多
引用 的话: 你是想要下法语的字幕么? coursera 其实只是做了中文的字幕下载,其它语言的检测还没有加上,而这个课程我看了下,暂时没有中文字幕的。不过这个课程也是挺好玩的,居然一个字幕的下载链接都没给…你可...谢谢~
引用 的话:就是改也很麻烦啊。。。这视频这么多中英字幕插件可以下,其他语言的需要手动改链接。
引用 的话:你再试试能不能进吧。以前可以手动***的,后来chrome禁了。ok,谢谢
那个插件无法在线***,如何破
引用 的话:那个插件无法在线***,如何破多刷几次吧,chrome store比较抽。但是现在也没办法手动装,只能在线装~
一直没有装上去,刚才又找到一个办法,在chrome装一个插件下载,就是有点不方便,嘻嘻
引用 的话:一直没有装上去,刚才又找到一个办法,在chrome装一个插件下载,就是有点不方便,嘻嘻怎么操作的~~~给其他人做个参考
引用 的话:学堂君才不会告诉你 上的字幕可以直接复制呢!就是右侧那一坨~!请问是怎样复制的呀,
请问下字幕下载后在记事本的格式,有没方法可以去掉中间的数字只留下文字呢?
引用 的话:请问下字幕下载后在记事本的格式,有没方法可以去掉中间的数字只留下文字呢?你说的是时间轴吧。那个没办法的,手动删一下吧~
引用 的话:你说的是时间轴吧。那个没办法的,手动删一下吧~ 好的,谢谢啦!
这个太棒了!楼主造福社会!
学堂在线改版后字幕无法下载了,求更新,另外能不能把火狐也适配了(opera也行),毕竟国内访问google商店还是很困难的
引用 的话:学堂在线改版后字幕无法下载了,求更新,另外能不能把火狐也适配了(opera也行),毕竟国内访问google商店还是很困难的顺便把中国大学MOOC也给适配了吧,尽管这个网站大都没有字幕,但有的课是英文的,有字幕,所以求把中国大学MOOC也适配了
进不去商店啊!怎么办
紧急。。紧急
学堂在线的字幕插件0.6.1已经无法下载,提示:请求更新
引用 的话:学堂在线的字幕插件0.6.1已经无法下载,提示:请求更新同求
感谢,十分有用的插件
露珠好用心。如果能抓取中国大学MOOC的字幕就好了
邮箱接收不到更改密码连接trackbacks-0
这篇是简单插件开发,下篇聊天记录插件。
开发环境:
System:Windows
WebBrowser:IE6+、Firefox3+
JavaEE Server:tomcat5.0.2.8、tomcat6
IDE:eclipse、MyEclipse 8
开发依赖库:
Jdk1.6、jasper-compiler.jar、jasper-runtime.jar、openfire.jar、servlet.jar
Email:hoojo_
在开始之前,如果你不知道怎么使用openfire,***openfire服务器,建议你看这篇文章:
一、准备工作
1、 下载相关jar包和openfire源码
Openfire源码下载:
其他的jar包你可以去tomcat中的lib目录找到或者其他的地方也有(在下面的步骤会提到),这里就赘述了。
2、 新建一个自己的java project工程,添加的jar包如下:
将jasper-compiler.jar、jasper-runtime.jar、servlet.jar添加到新建的工程中。如果没有jar先不要急,看下面的步骤:
下载后的openfire源码目录是这样的
如果你有ant工具可以用dos命令行的方式,直接运行build目录中的ant脚本,运行脚本后,你会发现有一个target的目录。该目录如下:
在lib目录中可以找到我们需要的jar文件了,将openfire.jar也添加到你的工程中。
如果你没有***ant你可以用MyEclipse,将openfire源码中的build、documentation、resources目录复制到一个Java Project中,然后在MyEclipse中运行src中的build.xml ant脚本就会出现和上面一样的文件目录。
建议将你的MyEclipse中的openfire源码工程目录设置成这样的
其中,src/plugins/tree是我自己写的插件,现在暂时可以无视。而target就是我们需要的,里面存放了openfire的配置和需要的jar包。Work是工作目录,是一个完整的openfire服务器。如果你还没有下载openfire服务器的话,可以用这个服务器。
3、 了解openfire源码中的插件
我们找一个插件目录看看,主要看看里面的结构,目录结构很重要。因为我们将写好的插件打成jar包后,打包的jar的目录有一定规范结构,不能随便建立其他目录。
这是一个userservice的插件,在src/java中是我们的插件源代码;web目录中则是前端的页面,其中web-custom.xml是配置当前插件UserServiceServlet配置;changelog.html是修改日志;logo_small.gif是插件图标;plugin.xml是我们配置插件的文件,这个很重要(在这里先提示下); 二、开发简单插件
工程现在的目录机构如下
1、 建立自己的插件类,SamplePlugin.java,里面简单的写点内容。
package com.hoo.server.&import java.io.Fimport org.jivesoftware.openfire.XMPPSimport org.jivesoftware.openfire.container.Pimport org.jivesoftware.openfire.container.PluginM&/** * &b&function:&/b& openfire server plugin sample * @author hoojo * @createDate
下午05:48:22 * @file SamplePlugin.java * @package com.hoo.server.plugin * @project OpenfirePlugin * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_ * @version 1.0 */public class SamplePlugin implements Plugin {&
private XMPPS
@Override
public void initializePlugin(PluginManager manager, File pluginDirectory) {
server = XMPPServer.getInstance();
System.out.println("初始化…… ***插件!");
System.out.println(server.getServerInfo());
@Override
public void destroyPlugin() {
System.out.println("服务器停止,销毁插件!");
比较简单,如果你将插件***在openfire服务器上的时候,启动服务器一个可以看到初始化的内容,关闭服务器可以看到销毁的内容。
2、 配置插件
&?xml version="1.0" encoding="UTF-8"?&&plugin&&!-- Main plugin class
这里是最重要滴,就是你的插件的全路径--&&class&com.hoo.server.plugin.SamplePlugin&/class&&&!-- Plugin meta-data --&&name&SimplePlugin&/name&&description&This is the my sample plugin.&/description&&author&hoojo&/author&&&version&1.0&/version&&date&28/02/2013&/date&&url&http://localhost:9090/openfire/plugins.jsp&/url&&minServerVersion&3.4.1&/minServerVersion&&licenseType&gpl&/licenseType&&&adminconsole&
&/adminconsole&&/plugin&
注意上面的class的配置,那个配置是最为重要的,配置的是插件的全路径;name是插件的名称,***后的插件名称;author是插件作者;lincenseType是协议;adminconsole是配置插件关联的页面的;稍后再讲!
3、 可部署的插件包jar的目录结构
这个很重要,目录结构将决定你插件 发布的成败。
在编写命令之前,我们可以看看openfire服务器中已经***的插件的jar包的目录结构,到时候我们也要打包成那样的结构才行的。必须打包成这样的目录结构,否则哼哼……后果很严重的!声明!
在我机器中的openfire服务器中,插件目录在C:\Program Files\openfire\plugins,里面有一个search.jar插件。提示:当你将一个可以***的jar***在openfire后,会被openfire解压成目录结构。就向JavaEE中的war包发布的应用服务器中的效果一样的。
打成可部署的插件jar包(相当于发布的应用服务器的目录结构)的search.jar目录结构如下:
首先看看文件命名,search.jar就是我们打包的插件的名称,而国际化的配置文件就是以插件名称开头_118n.properties或插件名称开头_118n_language.properties;而lib目录中的是插件的src目录的class打成的jar包;带有*-jspc.jar是web目录下的jsp编译成servlet后的class打成的包文件,都是以插件名称开头;WEB-INF/web.xml配置的是*-jspc.jar中的class文件;web/images是图片文件,需要用到的图片都放置在这个目录即可;plugin.xml文件名固定的,里面是配置插件的xml内容。
其中,118n国际化文件,它主要是我们在插件中的jsp和Java程序中的国际化配置。Web目录存放jsp、图片、web.xml内容;lib目录是存放插件的src目录的java代码编译后打包的jar,以及jsp编译成servlet的class打包后的jar;其他的文件都是根目录的;
对照上面插件包的jar,我们看看实际开发中的目录结构:
稍提醒下,如果你的插件中包含servlet,那你需要将它配置在web目录下的WEB-INF/web-custom.xml目录中;这个在以后会经常用到的,比如你提供一个接口给外部程序调用的情况下。目录结构参考:
UserServiceServlet配置在web-custom.xml目录中。
4、 编写ant命令,打可部署jar包。如果你不懂ant命令也没关系,你总知道java的基本常用的dos命令。只不过ant就是将dos转换成一个可重复多次调用的命令行。
在工程的根目录中新建一个build目录,新建
&project name="Webapp Precompilation" default="openfire-plugins" basedir="."&
&property file="build.properties" /&
&!-- java servlet相关文件编译jar存放位置 --&
&property name="java.jar.dir" value="${webapp.path}/java-dist"/&
&!-- jsp servlet编译后jar存放位置 --&
&property name="jsp.jar.dir" value="${webapp.path}/jsp-dist/lib"/&
&!-- 定义java servlet和jsp servlet的jar包名称 --&
&property name="java.jar" value="${java.jar.dir}/plugin-${plugin.name}.jar"/&
&property name="jsp.jar" value="${jsp.jar.dir}/plugin-${plugin.name}-jsp.jar"/&
&!-- jsp servlet配置到web.xml中 --&
&property name="plugin.web.xml" value="${webapp.path}/jsp-dist/web.xml"/&
&!-- 编译jsp 并生成相关jar、xml文件 --&
&target name="jspc"&
&taskdef classname="org.apache.jasper.JspC" name="jasper2"&
&classpath id="jspc.classpath"&
&pathelement location="${java.home}/../lib/tools.jar" /&
&fileset dir="${tomcat.home}/bin"&
&include name="*.jar" /&
&/fileset&
&fileset dir="${tomcat.home}/server/lib"&
&include name="*.jar" /&
&/fileset&
&fileset dir="${tomcat.home}/common/lib"&
&include name="*.jar" /&
&/fileset&
&fileset dir="D:/Workspace/openfire/build/lib"&
&include name="**/*.jar" /&
&/fileset--&
&/classpath&
&/taskdef&
&!-- 编译jsp-&servlet class --&
&jasper2 javaEncoding="UTF-8" validateXml="false"
uriroot="${plugin.path}/web"
outputDir="${webapp.path}/jsp-dist/src"
package="com.hoo.openfire.plugin.${plugin.name}" /&
&!-- 编译后的servlet class 配置到web.xml文件中 --&
validateXml="false"
uriroot="${plugin.path}/web"
outputDir="${webapp.path}/jsp-dist/src"
package="com.hoo.openfire.plugin.${plugin.name}"
webXml="${plugin.web.xml}"/&
&!-- 编译jsp 并将其打jar包 --&
&target name="compile"&&
&mkdir dir="${webapp.path}/jsp-dist/classes" /&
&mkdir dir="${webapp.path}/jsp-dist/lib" /&
&mkdir dir="${webapp.path}/jsp-dist/src" /&
&javac destdir="${webapp.path}/jsp-dist/classes" optimize="off"
encoding="UTF-8" debug="on" failonerror="false"
srcdir="${webapp.path}/jsp-dist/src" excludes="**/*.smap"&
&classpath&
&pathelement location="${webapp.path}/jsp-dist/classes" /&
&fileset dir="${webapp.path}/jsp-dist/lib"&
&include name="*.jar" /&
&/fileset&
&pathelement location="${tomcat.home}/common/classes" /&
&fileset dir="${tomcat.home}/common/lib"&
&include name="*.jar" /&
&/fileset&
&pathelement location="${tomcat.home}/shared/classes" /&
&fileset dir="${tomcat.home}/shared/lib"&
&include name="*.jar" /&
&/fileset&
&fileset dir="${tomcat.home}/bin"&
&include name="*.jar" /&
&/fileset&
&/classpath&
&include name="**" /&
&exclude name="tags/**" /&
&jar jarfile="${jsp.jar}" basedir="${webapp.path}/jsp-dist/classes" /&
&/target&&
&!-- 将java servlet打包成jar --&
&target name="java-jar"&
&mkdir dir="${java.jar.dir}"/&
&jar jarfile="${java.jar}"&
&fileset dir="${webapp.path}/bin" includes="**/*.class"/&
&!-- 生成可部署的插件包 --&
&target name="plug-jar"&
&!-- 插件插件包相关lib、 web目录 --&
&mkdir dir="${webapp.path}/${plugin.name}/lib"/&
&mkdir dir="${webapp.path}/${plugin.name}/web/WEB-INF"/&&
&!-- 复制jsp servlet的jar和java servlet的相关jar包到插件包的lib目录下 --&
© file="${java.jar}" todir="${webapp.path}/${plugin.name}/lib"/&
© file="${jsp.jar}" todir="${webapp.path}/${plugin.name}/lib"/&&
&!-- 将相关的图片、帮助文档、修改日志等文件复制到插件目录下 --&
© todir="${webapp.path}/${plugin.name}"&
&fileset dir="${plugin.path}" includes="*.*"/&
© todir="${webapp.path}/${plugin.name}/web"&
&fileset dir="${plugin.path}/web"&
&include name="*"/&
&include name="**/*.*"/&
&exclude name="**/*.xml"/&
&exclude name="**/*.jsp"/&
&/fileset&
&!-- jsp servlet的web复制到插件目录下 --&
© file="${plugin.web.xml}" todir="${webapp.path}/${plugin.name}/web/WEB-INF"/&
© todir="${webapp.path}/${plugin.name}/web"&
&fileset dir="${plugin.path}/web" includes="**/*.xml"/&
&!-- 将国际化相关资源文件复制到插件目录下
© file="${webapp.path}/bin/i18n" todir="${webapp.path}/${plugin.name}"/&
&!-- 产生可部署插件包 --&
&jar jarfile="${webapp.path}/${plugin.name}.jar"&
&fileset dir="${webapp.path}/${plugin.name}" includes="**/**"/&
&!-- 生成没有Web资源的可部署插件包 --&
&target name="java-plug-jar"&
&!-- 插件插件包相关lib、 web目录 --&
&mkdir dir="${webapp.path}/${plugin.name}/lib"/&&
&!-- 复制java servlet的相关jar包到插件包的lib目录下 --&
© file="${java.jar}" todir="${webapp.path}/${plugin.name}/lib"/&&
&!-- 将相关的图片、帮助文档、修改日志等文件复制到插件目录下 --&
© todir="${webapp.path}/${plugin.name}"&
&fileset dir="${plugin.path}" includes="*.*"/&
&!-- 产生可部署插件包 --&
&jar jarfile="${webapp.path}/${plugin.name}.jar"&
&fileset dir="${webapp.path}/${plugin.name}" includes="**/**"/&
&!-- 清理生成的文件 --&
&target name="clean"&
&delete file="${webapp.path}/${plugin.name}.jar"/&
&delete dir="${webapp.path}/${plugin.name}"/&
&delete dir="${webapp.path}/jsp-dist"/&
&delete dir="${webapp.path}/java-dist"/&
&target name="all" depends="clean,jspc,compile"/&&
&target name="openfire-plugin" depends="jspc,java-jar"/&&
&target name="openfire-plugins" depends="all,java-jar,plug-jar"/&
&target name="openfire-plugin-java" depends="clean,java-jar,java-plug-jar"/&&/project&
build.properties文件内容
#tomcat hometomcat.home=D:/tomcat-5.0.28/tomcat-5.0.28webapp.path=D:/Workspace/OpenfirePlugin&plugin.name=sampleplugin.path=D\:/Workspace/OpenfirePlugin/src/plugins/sample
注意:这里我没有编写编译java代码到class的步骤,我是直接使用MyEclipse自动编译的bin/class的。如果你没有用MyEclipse或Eclipse,那么你需要将src中的Java代码编译class。
这里需要配置tomcat的目录,我这里是5.0.28的版本。我用tomcat6有些问题,这里主要是用tomcat中的lib库,帮助我们编译jsp。还需要配置你当前工程的所在目录,也就是工程在Eclipse中的目录位置。最后你需要配置插件的名称和插件在工程中的所在目录,这个是在打包的时候,需要将其他的html、image、xml等资源导入的jar内。
因为这里的插件是不带jsp的,所以我们执行clean、java-jar、java-plugin-jar。也就是openfire-plugin-java这个命令即可。执行命令后,你可以看到工作空间的工程目录下多了目录和文件。见图:
java-dist目录里面的就是src/plugin/sample目录中的java代码打成的jar包。具体你可以用zip打开看看。
sample就是我们的插件目录,和sample.jar中的内容是一模一样的。
sample.jar就是将sample目录打成jar包。
5、 发布插件
发布插件有2种方式
第一种:直接将插件放置在openfire服务器的plugins目录下。我的是在:C:\Program Files\openfire\plugins目录。重起openfire后你可以看到控制台输出我们插件中输出的内容,并且在C:\Program Files\openfire\plugins目录中可以看到该目录下多了一个sample的目录(openfire可以自动解压jar包)。
当你在关闭服务器的瞬间,也会打印销毁插件的消息。
第二种:在openfire启动的情况下,访问页面,点击页面下方的upload plugin完成插件上传操作。
插件按照成功后,访问页面你就可以看到***好的插件了。
至此,不带jsp页面的简单插件就编写部署成功了。
三、开发带jsp、PluginServlet的插件
有些插件是单纯的继承Plugin或Handler什么的,但有些是需要jsp页面和Servlet的。下面我们就来开发带jsp和servlet的插件。
在之前的目录下添加文件,目录结构如下:
1、 首先建立一个SampleServlet的文件,内容如下
package com.hoo.server.&import java.io.IOEimport java.io.PrintWimport javax.servlet.ServletEimport javax.servlet.http.HttpSimport javax.servlet.http.HttpServletRimport javax.servlet.http.HttpServletR&/** * &b&function:&/b& sample servlet * @author hoojo * @createDate
下午04:15:20 * @file SampleServlet.java * @package com.hoo.server.plugin * @project OpenfirePlugin * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_ * @version 1.0 */public class SampleServlet extends HttpServlet {
private static final long serialVersionUID = -6926869L;&
@Override
public void init() throws ServletException {
super.init();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doGet(request, response);
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
System.out.println("请求SampleServlet GET Method");
out.print("请求SampleServlet GET Method");
out.flush();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doPost(request, response);
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
System.out.println("请求SampleServlet GET Method");
out.print("请求SampleServlet POST Method");
out.flush();
@Override
public void destroy() {
super.destroy();
2、 在当前插件根目录添加web目录,在目录下建立WEB-INF目录,添加web-custom.xml文件(文件名应该是固定的)。在里面配置我们的servlet。
&?xml version="1.0" encoding="ISO-8859-1"?&&!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "/dtd/web-app_2_3.dtd"&&web-app&
&servlet-class&com.hoo.server.plugin.SampleServlet&/servlet-class&
&servlet-name&SampleServlet&/servlet-name&
&/servlet&
&servlet-mapping&
&servlet-name&SampleServlet&/servlet-name&
&url-pattern&/servlet&/url-pattern&
&/servlet-mapping&&/web-app&
当插件发布后你可以通过用: 就可以访问到这个servlet了。但我发现我们只需用配置。
注意:这里的是固定的,至少plugins是固定的。所有的插件都在plugins目录下访问的。如果你想知道为什么,你可以看看openfire源码下的web.xml,具体目录路径在/openfire/src/web/WEB-INF/web.xml。里面有一个PluginServlet是过来plugin的配置的。
3、 在web目录下添加jsp文件,文件名是插件名称-自定义名称.jsp(建议规范命名)
&%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&&html&
&title&hello world: 你好openfire&/title&
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&meta name="pageID" content="sample-service"/&
&h3&hello world jsp!! &a href="/plugins/sample/servlet"&SampleServlet&/a&&/h3&
&div class="jive-contentBoxHeader"&jive-contentBoxHeader&/div&
&div class="jive-contentBox"&jive-contentBox&/div&
&div class="jive-table"&
&table cellpadding="0" cellspacing="0" border="0" width="100%"&
&th&&sss&/th&
&th nowrap&a&/th&
&th nowrap&b&/th&
&td align="center"&asdf&/td&
&td align="center"&asdf&/td&
&td align="center"&asdf&/td&
&tr class="jive-even"&
&td align="center"&asdf&/td&
&td align="center"&asdf&/td&
&td align="center"&asdf&/td&
&tr class="jive-odd"&
&td align="center"&asdf&/td&
&td align="center"&asdf&/td&
&td align="center"&asdf&/td&
&/body&&/html&
其中最重要的一点就是:&meta name="pageID" content="sample-service"/&这个pageID。这里的是固定的,后面的content对应我们plugin.xml的内容(等下看看plguin.xml的配置)。然后可以适当的看下里面table的 属性和样式,因为很多时候会在jsp中显示内容,且用table布局的。
4、 改下之前的plugin.xml的配置,配置组件在openfire 管理员控制台的哪个地方显示,以及显示的页面。
&?xml version="1.0" encoding="UTF-8"?&&plugin&
&!-- Main plugin class
这里是最重要滴,就是你的插件的全路径--&
&class&com.hoo.server.plugin.SamplePlugin&/class&&
&!-- Plugin meta-data --&
&name&SimplePlugin&/name&
&description&This is the my sample plugin.&/description&
&author&hoojo&/author&&
&version&1.0&/version&
&date&28/02/2013&/date&
&url&http://localhost:9090/openfire/plugins.jsp&/url&
&minServerVersion&3.4.1&/minServerVersion&
&licenseType&gpl&/licenseType&&
&adminconsole&
&tab id="tab-server"&
&sidebar id="sidebar-server-settings"&
&item id="sample-service" name="Sample Service" url="sample-service.jsp"
description="Click is trigger sample plugin" /&
&/sidebar&
&/adminconsole&&/plugin&
这里主要就是adminconsole这里面的配置。首先tab-server应该是在管理员控制台页面的服务器菜单中显示;sidebar中的的id配置固定这样写即可;item中的id(sample-service)对应的就是上面的sample-service.jsp的&meta name="pageID" content="sample-service"/&的content内容;item的url对应的是我们写的jsp页面;name是插件的菜单名称。也就是说在管理员控制台页面中的服务器菜单下增加一个sample service的菜单,打开的页面是sample-service.jsp页面。
5、 运行ant脚本,打包发布插件。在上一章节有完整ant脚本的,运行build.xml中的这个openfire-plugins命令即可打包。然后将打好包的sample.jar发布到openfire的plugins目录下即可。
打包后的jar插件目录结构如下:
启动openfire后,在openfire管理员控制台页面的服务器-&服务器设置中就可以看到Sample Service插件了。
点击Sample Servlet就可以看到openfire控制台打印请求的文字信息。
& ok,至此开发自己的openfire插件基本上就是这样的,网上这方面的资料很少,我也是官方的插件源码和网上提供的小部分资料才整出来的。本来在去年(2012)就应该发布这篇文章的,不料那个时候每天都很忙。加班、上线什么的,所以这篇文章才在今日发表。
下篇文章就是开发openfire的聊天记录插件,到时欢迎大家阅读。请随时关注我的动态哦!
如果你觉得本文不错,请点一下浏览器右下角的“顶”。谢谢!^_^
阅读(9003)
&re: 跟我一步一步开发自己的Openfire插件[未登录]
JXADF插件化开源开发平台,相当不错,可以参考,&&&&&&
hoojo 所有文章遵循,要求署名、非商业、保持一致。在满足的基础上可以转载,但请以超链接形式注明出处。
242526272812345689101112131415161718192021222324252627283031123456
随笔分类(210)
随笔档案(60)
积分与排名
阅读排行榜
评论排行榜