线点科技垂直搜索产品
(Javascript开发说明)
北京线点科技有限公司
二零零六年一月
一、开发环境简介
北京线点科技有限公司垂直搜索产品构建环境为JBuilder 2006,操作系统为Windows,使用的JDK版本为JDK1.5,为了避免在开发过程中出现不一致的CLASS小版本号码不一致,建议在二次开发过程中使用JDK1.5。在使用本公司产品过程中如果出现提示CLASS版本不一致的错误提示信息,请联系本公司相关人员。JDK1.5以下版本暂不支持。
本产品默认的部署上下文环境为/,推荐使用根目录作为本产品的运行目录。
本公司垂直搜索产品javascript开发接口构建于Rhino,Rhino支持Javascript部分功能,如:赋值、运算、判断语句、循环语句等,不支持和浏览器相关的对象及其操作。
二、数据库功能
本产品数据库默认的数据库支持的数据库主要包括:mysql、oracle、postgres、sysbase、db2、ms sql server,默认使用的数据库为mysql 5.0,数据库编码为UTF-8。
本产品包含独立的数据库管理功能,但不提供数据维护接口,也不推荐从外部访问本产品数据库数据。2007版数据维护功能参考用户使用手册。
三、Javascript开发说明
本产品对javascript为方便二次开发,增加了10个内置对象,分别为:crawl、list1、list2、list3、list4、list5、log、url、service、returnValue
crawl(最后一个字符是L的小写) 类:com.xdtech.platform.core.script.ScriptCrawlTool
crawl开放的方法主要有三个。
方法一:public java.lang.String getContent(java.lang.String inputURL , java.lang.String encoding) 传入的参数是目标数据的URL和目标数据页面编码,编码可选的值包含GB2312/GBK/UTF-8等。使用说明:
在数据采集àURL发生器 ,创建一个javascript脚本,完整类名为:com.xdtech.platform.core.script.BSFScriptManage,详细说明参见用户手册。在脚本代码中填写如下内容:
var content = crawl.getContent("http://www.xd-tech.com.cn","GBK") ;
则在执行完毕之后变量 content的值为http://www.xd-tech.com.cn首页的内容
方法二:public java.util.List getURL(java.lang.String content , java.lang.String regex) 传入的参数是目标数据页字符串和解析的正则表达式,注意,对目标数据页的解析只返回正则表达式的第一个有效分组,例如:有正则表达式 ([\W]*?)+\..([\d]{5}) ,则在进行解析以后返回的数据只获得第一个([\W]*?)分组,而忽略第二个([\d]{5})分组。使用说明(接上例):
crawl.getURL(content , "<A class=zc href=\"([\\S\\s]*?)\"");
此行代码返回一个java.util.ArrayList对象,包含对content内容使用<A class=zc href=\"([\\S\\s]*?)\"正则表达式解析获得的分组内容
方法三:public java.util.List getURL(java.lang.String content , java.lang.String regex , java.lang.String startIndexRegex , java.lang.String endIndexRegex) 传入的参数是目标数据页字符串、解析正则表达式、截断数据页的开始截断正则表达式、截断数据页的结束正则表达式。使用说明:
crawl.getURL(content
, "<A class=zc href=\"([\\S\\s]*?)\"",”010
此行代码返回一个java.util.ArrayList对象,包含对content部分内容使用<A class=zc href=\"([\\S\\s]*?)\"正则表达式解析获得的分组内容,content部分是指从”010
url接口:com.xdtech.platform.plugin.url.InnerURL
url开放的方法主要的有一个:
方法一:public void setUrl(String s);
传入的参数是url 地址,如果不是服务器端将会抛错。
使用示例:
url.setUrl(”http://www.xd-tech.com.cn”);
Service接口: com.xdtech.platform.dao.IBase
service开放的方法主要的有一个:
方法一: public void saveIObject(InnerURL obj);
传入的参数obj必须是InnerURL类型对象.
使用示例:
url.setUrl(”http://www.xd-tech.com.cn”);
service. SaveIObject(url);
list1-list5 java.util.ArrayList list1-list5是暂时存放数据的临时list,不返回数据。
使用示例:
var content = crawl.getContent("http://co.163.com/e_p_3.htm","GBK") ;
list1=crawl.getURL(content,"共<font[^>]*?>([\\d]*?)</font>页");
var m=list1.remove(0);
var n=parseInt(m);
for(i=0;i<n;i++){
content = crawl.getContent("http://co.163.com/neteaseivp/ecatalog/product.jsp?pageSize=15&way=3&pageIndex="+i,"GBK") ; list2=crawl.getURL(content,"<a[\\s]+?onmouseover=\"[^\"]*?\"[\\s]+?href=\"(/e_pd_[\\d]*?_3\\.htm)\"[\\s]+?target=\"_blank\">");
var num=list2.size();
for(j=0;j<num;j++){
var s="http://co.163.com"+list2.remove(0);
url.setUrl(s);
service.saveIObject(url);
}
}
log 类 java.util.logging.Logger
使用示例:log.info(“测试输出”); 则可以在系统控制台脚本执行时看到相应的输出信息
returnValue类:java.util.ArrayList,returnValue是最终返回给JVM的数据结构。所有的最终返回数据必须存入returnValue。
使用示例:
var content = crawl.getContent("http://www.xd-tech.com.cn","GBK") ;
returnValue = crawl.getURL(content , "<A class=zc href=\"([\\S\\s]*?)\"");
说明:第一行代码是获得目标数据页字符串,第二行代码是解析目标数据页并获得目标URL列表,并将目标URL列表存入returnValue , 则代码执行完毕之后将所有解析获得到的URL数据存入系统数据库中。