Form: http://www.voidclass.com/PermaLink,guid,854ccf18-1516-4b81-9390-9187f4619d70.aspx
我有个习惯。喜欢在计算机上播放一段音乐或评书,然后躺在床上,在饱满听觉享受中进入梦香。
前一段时间我找到一个免费在线收听评书的网站。无论从内容还是速度上都比较满意,但是没有连续收听的功能。一段评书播放完了,我还没睡着呢。郁闷!! :(
于是着手解决这个网站连续播放的问题。
方法很简单,在播放器播放结束的时候,打开“下一页”超链接所指定的网址就可以进入下一段评书的播放了。
那么有三个问题需要解决:1) 捕获播放器播放结束事件;2) 获取“下一页”超链接所指定的地址;3) 将我的脚本程序插入到网页中,并执行。
第一个问题:该网站使用的是RealPlayer播放器,我在Google上找了一下,关于RealPlayer的资料大多是一些如何加密和控制播放器等等。还好最后在RealNetworks官方网站找到了有RealPlayer事件捕获的资料。(Embedded RealPlayer Extended Functionality Guide)
可使用如下代码实现:<OBJECT ID=RVOCX CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> <PARAM NAME="controls" VALUE="all"> <PARAM NAME="SRC" VALUE="http://www.company.com/sample.rpm"></OBJECT><P>Status Text:<input type="text" name="statusText"><br></P><SCRIPT language="VBS">Sub RVOCX_OnShowStatus(byVal text) statusText.Value=textEnd Sub</SCRIPT>
RealPlayer并没有直接提供一个播放结束事件,但是RealPlayer提供了OnPlayStateChange和OnStateChange。通过这两个事件可以实现播放结束的捕获。
OnPlayStateChange定义:OnPlayStateChange(int32 old_state, int32 new_state)参数说明:
Parameter ValuePlay State0Stopped1Contacting2Buffering3Playing4Seeking5Paused注意:在网页中嵌入RealPlayer有两种方法。可以使用RealPlayer Netscape插件或使用ActiveX控件。前者使用<EMBED>标记,后者使用<OBJECT>标记。当使用ActiveX控件时,old_state参数无效。如果需要在ActiveX控件编程方式下同时使用old_state和new_state两个参数,可以使用OnStateChange事件。OnStateChange定义:OnStateChange(int32 old_state, int32 new_state)参数说明:同上。注意:OnStateChange仅适用于ActiveX控件。
第二个问题:获得“下一页”的链接。不详细说明了,就是HTML分析。
第三个问题:将我写的脚本插入网页。可以通过IE提供的insertAdjacentHTML方法来实现。注意:在使用insertAdjacentHTML向网页中插入脚本时,一定要在<Script>元素中加入"DEFER"属性。(<SCRIPT DEFER LANGUAGE="VBS">)
Ok,所有的问题都解决了。新建一个WinForm项目,摆上一个WebBrowser,在OnDocumentComplete中写入代码。
Code:begin get & parse html get "next page" link // script <SCRIPT DEFER LANGUAGE="VBS"> Sub (playerid)_OnStateChange(old_state, new_state) if new_state = 0 & old_state = 3 then goto "next page" link End Sub </SCRIPT> get player object player.insertAdjacentHTML('afterEnd', script)end;
