微信开发纪实之微信数字图书馆服务.docx

上传人:b****8 文档编号:28077280 上传时间:2023-07-08 格式:DOCX 页数:37 大小:235.58KB
下载 相关 举报
微信开发纪实之微信数字图书馆服务.docx_第1页
第1页 / 共37页
微信开发纪实之微信数字图书馆服务.docx_第2页
第2页 / 共37页
微信开发纪实之微信数字图书馆服务.docx_第3页
第3页 / 共37页
微信开发纪实之微信数字图书馆服务.docx_第4页
第4页 / 共37页
微信开发纪实之微信数字图书馆服务.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

微信开发纪实之微信数字图书馆服务.docx

《微信开发纪实之微信数字图书馆服务.docx》由会员分享,可在线阅读,更多相关《微信开发纪实之微信数字图书馆服务.docx(37页珍藏版)》请在冰豆网上搜索。

微信开发纪实之微信数字图书馆服务.docx

微信开发纪实之微信数字图书馆服务

微信开发纪实之数字图书馆服务

最近在做微信的后台开发,看到有些高校的微信公众平台上有查询借阅和续借的功能,自己闲来无事也瞎鼓捣了一个,现在把成果贴出来和大家一起分享。

由于本人在武汉大学,故以武汉大学图书馆为例。

思路:

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

*/

privatestaticListinitialLoginFormData(Stringusername,Stringpassword)

throwsClientProtocolException,IOException{

Listnvps=newArrayList();

HashMapparmasMap=HtmlUtil.getLoginFormData(LOGIN_URL);

SetkeySet=parmasMap.keySet();

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{

Listnvps=initialLoginFormData(username,password);

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{

Listkey=newArrayList();

Listval=newArrayList();

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{

Listkey=newArrayList();

Listval=newArrayList();

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{

Listkey=newArrayList();

Listval=newArrayList();

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");

Listkey=newArrayList();

Listval=newArrayList();

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模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1