微信开发纪实之微信数字图书馆服务.docx
- 文档编号:28077280
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:37
- 大小:235.58KB
微信开发纪实之微信数字图书馆服务.docx
《微信开发纪实之微信数字图书馆服务.docx》由会员分享,可在线阅读,更多相关《微信开发纪实之微信数字图书馆服务.docx(37页珍藏版)》请在冰豆网上搜索。
微信开发纪实之微信数字图书馆服务
微信开发纪实之数字图书馆服务
最近在做微信的后台开发,看到有些高校的微信公众平台上有查询借阅和续借的功能,自己闲来无事也瞎鼓捣了一个,现在把成果贴出来和大家一起分享。
由于本人在武汉大学,故以武汉大学图书馆为例。
思路:
1.模拟登陆
2.抓取数据
语言:
java
代码:
DigitalLibraryService.java
packagecom.wdyx.weixin.service;
importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Set;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.ClientProtocolException;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.entity.BufferedHttpEntity;
importorg.apache.http.impl.client.CloseableHttpClient;
importorg.apache.http.impl.client.HttpClients;
importorg.apache.http.message.BasicNameValuePair;
importorg.apache.http.util.EntityUtils;
importorg.jsoup.Jsoup;
importorg.jsoup.nodes.Document;
importorg.jsoup.nodes.Element;
importorg.jsoup.select.Elements;
/**
*数字图书馆服务
*功能:
查询个人信息、借阅信息、借阅历史,以及进行续借操作
*@author帮杰
*/
publicclassDigitalLibraryService{
//主机地址
publicstaticfinalStringHOST="";
//登陆页面地址
publicstaticfinalStringLOGIN_URL="
//表单post地址
publicstaticfinalStringPOST_URL=":
80/pds";
//借阅者信息
privateStringborrowerInfo=null;
//借阅信息
privateStringborrowInfo=null;
//借阅历史
privateStringborrowHistory=null;
//储存登录页,以备续借之需
privateStringrenewPage=null;
//每一个客户即为一个HttpClient对象
privateCloseableHttpClienthttpclient=null;
//构造函数,以用户名和密码作为参数
publicDigitalLibraryService(Stringusername,Stringpassword)throwsClientProtocolException,IOException{
//初始化HttpClient对象
httpclient=HttpClients.createDefault();
//解析登录页
Documentdoc=Jsoup.parse(login(username,password,httpclient));
//“我的借阅信息”所对应的url
StringBorrowerInfoUrl=doc.getElementsContainingOwnText("我的借阅信息").first().attr("href");
//据观察有重定向;获得重定向地址
StringRelocatedBorrowerInfoUrl=HttpUtil.getHtml(BorrowerInfoUrl,httpclient).split("\'")[1];
//重定向页
StringRelocatedBorrowerInfoHtml=HttpUtil.getHtml(RelocatedBorrowerInfoUrl,httpclient);
//借阅者信息页
StringBorrowerInfoHtml=HttpUtil.getHtml(HOST+HtmlUtil.getLinks(RelocatedBorrowerInfoHtml).get(0),httpclient);
//通过抓取获得借阅者信息
borrowerInfo=getBorrowerInfo(BorrowerInfoHtml);
doc=Jsoup.parse(BorrowerInfoHtml);
//"当前借阅数:
"后面的数字链接指向借阅信息页,故此处取得该链接
StringBorrowInfoUrl=doc.getElementsContainingOwnText("当前借阅数:
").parents().select("a").attr("href").split("\'")[1];
//借阅历史页面链接
StringBorrowHistoryUrl=doc.getElementsContainingOwnText("借阅历史").attr("href");
//借阅信息页
StringBorrowInfoHtml=HttpUtil.getHtml(BorrowInfoUrl,httpclient);
//借阅历史页
StringBorrowHistoryHtml=HttpUtil.getHtml(BorrowHistoryUrl,httpclient);
//借阅信息
borrowInfo=getBorrowInfo(BorrowInfoHtml);
//借阅历史
borrowHistory=getBorrowHistory(BorrowHistoryHtml);
//借阅信息即为能进行续借操作的页面
renewPage=BorrowInfoHtml;
}
//得到借阅者信息
publicStringgetBorrowerInfo(){
returnborrowerInfo;
}
//得到借阅信息
publicStringgetBorrowInfo(){
returnborrowInfo;
}
//得到借阅历史
publicStringgetBorrowHistory(){
returnborrowHistory;
}
//续借,返回续借结果
publicStringrenew(){
returnrenewBook(renewPage,httpclient);
}
/**
*初始化POST表单参数
*
*@paramusername
*@parampassword
*@returnList
*@throwsIOException
*@throwsClientProtocolException
*/
privatestaticList
throwsClientProtocolException,IOException{
List
HashMap
Set
for(Stringtemp:
keySet){
if(temp.contains("bor_id")){
parmasMap.put(temp,username);
}elseif(temp.contains("bor_verification")){
parmasMap.put(temp,password);
}
nvps.add(newBasicNameValuePair(temp,parmasMap.get(temp)));
}
returnnvps;
}
/**
*登陆图书馆主页
*
*@paramusername
*@parampassword
*@parampost_url
*@return登陆后的图书馆主页
*@throwsIOException
*@throwsClientProtocolException
*/
privatestaticStringlogin(Stringusername,Stringpassword,CloseableHttpClienthttpclient){
Stringhtml="";
try{
List
HttpPostpost=newHttpPost(POST_URL);
post.setEntity(newUrlEncodedFormEntity(nvps));
HttpResponseresponse=httpclient.execute(post);
HttpEntityentity=newBufferedHttpEntity(response.getEntity());
html=EntityUtils.toString(entity,HtmlUtil.getCharset(EntityUtils.toString(entity)));
StringmainUrl=HOST+HtmlUtil.getLinks(html).get(0);
html=HttpUtil.getHtml(mainUrl,httpclient);
}catch(ClientProtocolExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnhtml;
}
/************************抽取数据**************************/
/**
*抽取借阅者信息
*@paramBorrowerInfoHtml
*@returnBorrowerInfo
*/
privatestaticStringgetBorrowerInfo(StringBorrowerInfoHtml){
StringBufferbuffer=newStringBuffer();
try{
List
List
Documentdoc=Jsoup.parse(BorrowerInfoHtml);
Elementselements=doc.select("table").select("tr");
Elementscol1=elements.select("td.td4");
Elementscol2=elements.select("td.td1");
for(Elementtmp:
col1){
key.add(tmp.text());
}
for(Elementtmp:
col2){
val.add(tmp.text());
}
buffer.append("------------您的个人信息------------\n\n");
for(inti=0;i if(i! =3) buffer.append(key.get(i)).append(val.get(i)).append("\n\n"); } }catch(Exceptione){ e.printStackTrace(); } return(null==buffer)? null: buffer.substring(0,buffer.lastIndexOf("\n\n")); } /** *抽取借阅信息 *@paramusername *@parampassword *@paramlogin_url *@return */ privatestaticStringgetBorrowInfo(StringBorrowInfoHtml){ StringBufferbuffer=newStringBuffer(); try{ List List Documentdoc=Jsoup.parse(BorrowInfoHtml); Elementsth=doc.select("th.text3"); Elementstd=doc.select("td.td1"); for(Elementtmp: th){ key.add(tmp.text()); } for(Elementtmp: td){ val.add(tmp.text()); } buffer.append("------------您的借阅信息------------\n\n"); intitemCounts=key.size(); intgroupCounts=val.size()/itemCounts; for(inti=0;i for(intj=0;j if(j! =1) buffer.append(key.get(j)+(j==0? "": ": ")).append(val.get(i*itemCounts+j)).append("\n\n"); } buffer.append("-----------------------------------\n\n"); } }catch(Exceptione){ e.printStackTrace(); } return(buffer==null)? null: buffer.substring(0,buffer.lastIndexOf("-----------------------------------\n\n")); } /** *抽取借阅历史 *@paramusername *@parampassword *@paramlogin_url *@return */ privatestaticStringgetBorrowHistory(StringBorrowHistoryHtml){ StringBufferbuffer=newStringBuffer(); try{ List List Documentdoc=Jsoup.parse(BorrowHistoryHtml); Elementsth=doc.select("th.text3"); Elementstd=doc.select("td.td1"); for(Elementtmp: th){ key.add(tmp.text()); } for(Elementtmp: td){ val.add(tmp.text()); } buffer.append("------------您的借阅历史------------\n\n"); val.remove(0); intitemCounts=key.size(); intgroupCounts=val.size()/itemCounts; for(inti=0;i for(intj=0;j buffer.append(key.get(j)+(j==0? "": ": ")).append(val.get(i*itemCounts+j)).append("\n\n"); } buffer.append("-----------------------------------\n\n"); } }catch(Exceptione){ e.printStackTrace(); } return(buffer==null)? null: buffer.substring(0,buffer.lastIndexOf("-----------------------------------\n\n")); } /** *续借 *@paramrenewHtml *@paramhttpclient *@return续借结果 */ privatestaticStringrenewBook(StringrenewHtml,CloseableHttpClienthttpclient){ StringBufferbuffer=newStringBuffer(); try{ Documentdoc=Jsoup.parse(renewHtml); Stringurl=doc.getElementsContainingOwnText("全部续借").attr("href").split("\'")[1]; StringresultPage=HttpUtil.getHtml(url,httpclient); doc=Jsoup.parse(resultPage); Elementsth=doc.select("tr.tr1").select("th"); Elementstd=doc.select("td.td1"); List List for(Elementtmp: th){ key.add(tmp.text()); } for(Elementtmp: td){ val.add(tmp.text()); } buffer.append("------------您的续借结果------------\n\n"); intitemCounts=key.size(); intgroupCounts=val.size()/itemCounts; for(inti=0;i for(intj=0;j buffer.append(key.get(j)+": ").append(val.get(i*itemCounts+j)).append("\n\n"); } buffer.append("-----------------------------------\n\n"); } }catch(Exceptione){ e.printStackTrace(); } return(buffer==null)? null: buffer.substring(0,buffer.lastIndexOf("-----------------------------------\n\n")); } //测试 publicstaticvoidmain(String[]args)throwsException{ Stringusername="*************"; Stringpassword="******"; DigitalLibraryServicemyDigitalLibraryService=newDigitalLibraryService(username,password); //System.out.println("---------------------------------个人信息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 开发 纪实 数字图书馆 服务