小说跟踪器

自己一直在看小说,又喜欢看免费的小说,
不喜欢小说APP,不喜欢收费,每次有更新需要自己手工去刷新,特别烦劳,所以萌发了自己做个小说跟踪器的想法。有更新能有提醒功能。

小说有小说网站的,也有BBS论坛的。BBS论坛的小说,一个分页可以有很多章节,
小说网站上的分卷,分章节。
对于小说网站上的,跟踪器不管事卷还是章节,都统一按章来处理。

剩下的就是页面解析和分页处理。
分页处理有点麻烦,有些网站的分页可以用顺序来处理,有些网站的分页不一定按顺序来处理,但分页的数据基本在页面上可以提取。
在此基础上,分页组件需要支持两种,一种是自增长,一种是解析页面,预先设定下一页ID。

页面解析,用的JSOUP开元LIB。
将页面TAG分解解析,生成一个对象。利用XML配置的形式添加不同的网站。
配置文件如下:
<mapping type="object">
<object name="book" entity="com.xbeer.xxx.xxx">
<property name="title"  htmltag="" type="String"></property>
<!-- name : property name,htmltag:tag in html ,type:object property type.-->
<property name="id"  htmltag="" type="String"></property>

<property name="chapters" type="List" htmltag="">
<object name="chapter" entity="com.xbeer.xxx.xxx">
<property name="content" htmltag=""></property>
<property name="time" htmltag="">
<handler language="javascript" function="do">
<![CDATA[
function do(input){return "";}
]]>
</handler>
</property>
</object>
</property>


</object>
</mapping>
HANDLER用来处理从页面标签提取的文本。比如日期等

分页:
<pagination ><!-- 分页  -->



<url>http://www.motie.com/book/32970_(?)</url>

<page-iterator type="node"><!-- 分页类型: seq按 顺序,由系统生成,node 需要解析页面才能生成 -->
<url>http://www.motie.com/book/32890/chapter"</url>
<page-para>1</page-para>

<htmltag>ul.add-new-class</htmltag>
<parser>com.xbeer.parser.jsoup.JsoupPageNumPoolParser</parser>

<handler language="javascript" function="doit"><!-- /book/32970_554167 -->
function doit(in1){var index = in1.indexOf("_");in1=in1.substring(index+1);
var index1 = in1.indexOf('"');in1=in1.substring(0,index1);return in1;}
</handler>

</page-iterator>
分页分两种,一种为顺序的,一种为需要在页面提取数据的。
分页的跳转需要支持多个元素跳转,设计了一个分页类
public class PageNum {


private String [] para;

public PageNum(String [] para){


this.para = para;

}

public String toString(String expr){// put para into expr and return

int len = this.para .length;

for(int i = 0;i < len ; i++)
{
expr = expr.replace("(?)", para[i]);

}

return expr;
}

public String toString(){

StringBuffer sb = new StringBuffer();

int len = this.para .length ;
for(int i = 0 ; i < len ; i++){

sb.append(para[i]+"|");
}

return sb.toString();

}

public boolean equals(PageNum num){

if(null == num || this.para == null || this.para == null ) return false;
int len1 = this.para.length ;
int len2 = num.para.length;

if( len1 != len2 )return false;

for(int i = 0 ;i < len1 ; i++){

if( ! para[i].equals(num.para[i])) return false;

}


return true;
}

public String [] getPara(){

return this.para;
}

para代表当前分页的参数
比如http://xxx.174.com/dasdf(?)_(?)_(?)代表了分页需要三个参数,三个参数中每个参数有可能为顺序的,有可能需要从页面提取的。
目前只实现了一个参数。多个参数的留待变态的网站开发。

目前需要完成自动登录,验证码识别。没弄过,

你可能感兴趣的:(JavaScript,html)