小程序后台问题
1097872822 opened this issue · comments
我想请问的是“高校图书资源馆藏位置”的接口怎么实现的
我想请问的是“高校图书资源馆藏位置”的接口怎么实现的
图书馆藏信息来源于本校图书馆书目检索系统(http://opac2.airmole.cn:808/opac/),经本程序后端PHP项目处理HTML数据后格式化转换为JSON输出给小程序端渲染出来。
那请问程序后端PHP项目是否可以参考或者开源?
那请问程序后端PHP项目是否可以参考或者开源?
有开源计划,但是目前最近还没有精力整理文档出来。
那可否给出后端参考,我先自己琢磨琢磨 我的个人小程序也有类似功能需要参考作者的小程序
那可否给出后端参考,我先自己琢磨琢磨 我的个人小程序也有类似功能需要参考作者的小程序
可参考此代码https://github.com/dpu/libsysHelper/blob/master/libsysHelper.php
参考小程序获取高校图书馆藏信息的功能,您看可否提供相关后端实现
好的好的 感谢作者~ 我先看看
[](我看了下上面您给出的php文件,可能对我个人参考意义不大;我的项目若想将您上面提到“
(图书馆藏信息来源于本校图书馆书目检索系统(http://opac2.airmole.cn:808/opac/),经本程序后端PHP项目处理HTML数据后格式化转换为JSON输出给小程序端渲染出来)_。
”这里我想换成我们学校的,即可以返回我校图书馆的馆藏位置,作者此项目的这一小部分是否可以提供借鉴参考代码呢?
[](我看了下上面您给出的php文件,可能对我个人参考意义不大;我的项目若想将您上面提到“
(图书馆藏信息来源于本校图书馆书目检索系统(http://opac2.airmole.cn:808/opac/),经本程序后端PHP项目处理HTML数据后格式化转换为JSON输出给小程序端渲染出来)_。%EF%BC%8C%E7%BB%8F%E6%9C%AC%E7%A8%8B%E5%BA%8F%E5%90%8E%E7%AB%AFPHP%E9%A1%B9%E7%9B%AE%E5%A4%84%E7%90%86HTML%E6%95%B0%E6%8D%AE%E5%90%8E%E6%A0%BC%E5%BC%8F%E5%8C%96%E8%BD%AC%E6%8D%A2%E4%B8%BAJSON%E8%BE%93%E5%87%BA%E7%BB%99%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AB%AF%E6%B8%B2%E6%9F%93%E5%87%BA%E6%9D%A5)_%E3%80%82)
”这里我想换成我们学校的,即可以返回我校图书馆的馆藏位置,作者此项目的这一小部分是否可以提供借鉴参考代码呢?
你可以提供一下你们学校图书馆的系统网站吗?我可以帮你写一段示例代码
@Airmole 这是我校图书馆的网站,有:
http://opac.lib.ctgu.edu.cn:8081/ctgu#/Home
http://opac.lib.ctgu.edu.cn:8081/ctgu/#/searchList
一个是主页,一个是查询页~ 有劳您了,再次感谢!
@Airmole 这是我校图书馆的网站,有:
http://opac.lib.ctgu.edu.cn:8081/ctgu#/Home
http://opac.lib.ctgu.edu.cn:8081/ctgu/#/searchList
一个是主页,一个是查询页~ 有劳您了,再次感谢!
以检索图书《追风筝的人》为案例,经过抓包分析,得到如下信息:
1. 图书检索API接口
打开Google Chrome,F12开发者工具检查网络请求发现得出图书检索HTTP请求结构如下图所示:
由上图请求结构则可知,HTTP接口请求URL为http://opac.lib.ctgu.edu.cn:8081/find/unify/search
,请求类型为POST请求,发送数据为形如以下结构的JSON数据:
{
"docCode": [
null
],
"searchFieldContent": "追风筝的人",
"searchField": "keyWord",
"matchMode": "2",
"resourceType": [],
"subject": [],
"discode1": [],
"publisher": [],
"libCode": [],
"locationId": [],
"eCollectionIds": [],
"curLocationId": [],
"campusId": [],
"kindNo": [],
"collectionName": [],
"author": [],
"langCode": [],
"countryCode": [],
"publishBegin": null,
"publishEnd": null,
"coreInclude": [],
"ddType": [],
"verifyStatus": [],
"group": [],
"sortField": "relevance",
"sortClause": "asc",
"page": 1,
"rows": 10,
"onlyOnShelf": null,
"searchItems": null
}
显而易见的,可以看出,JOSN结构中的searchFieldContent值即为我们检索图书的关键字。那么,我们原理上我们只需要按照以上HTTP请求的参数结构发起大致相同的HTTP请求便可获取到所需的图书检索数据:
在此处,我以PHP作为后端开发语言,进行构造发起HTTP请求操作,示例编码如下:
<?php
$keyword = '追风筝的人';
$url = 'http://opac.lib.ctgu.edu.cn:8081/find/unify/search'; // 图书检索请求URL
// POST发送的JSON请求数据
$postData = '{"docCode":[null],"searchFieldContent":"' . $keyword . '","searchField":"keyWord","matchMode":"2","resourceType":[],"subject":[],"discode1":[],"publisher":[],"libCode":[],"locationId":[],"eCollectionIds":[],"curLocationId":[],"campusId":[],"kindNo":[],"collectionName":[],"author":[],"langCode":[],"countryCode":[],"publishBegin":null,"publishEnd":null,"coreInclude":[],"ddType":[],"verifyStatus":[],"group":[],"sortField":"relevance","sortClause":"asc","page":1,"rows":10,"onlyOnShelf":null,"searchItems":null}';
$result = sendPost($url, $postData); // 向图书馆系统发起POST请求
$result = json_decode($result, true); // 将JSON字符串解析为PHP数组,再次赋值给$result变量
print_r($result); // 打印输出查看获取到的图书检索信息数组结构
// 封装好的POST请求发送函数
function sendPost(string $url, string $postData)
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $postData,
CURLOPT_HTTPHEADER => array( // HTTP Header信息
'Host: opac.lib.ctgu.edu.cn:8081',
'Connection: keep-alive',
'Pragma: no-cache',
'Cache-Control: no-cache',
'Accept: application/json, text/plain, */*',
'mappingPath: ctgu',
'groupCode: 800008',
'x-lang: CHI',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
'Content-Type: application/json;charset=UTF-8',
'Origin: http://opac.lib.ctgu.edu.cn:8081',
'Referer: http://opac.lib.ctgu.edu.cn:8081/ctgu',
'Accept-Encoding: gzip, deflate',
'Accept-Language: zh,zh-CN;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6'
),
));
$response = curl_exec($curl);
curl_close($curl);
return $response; // 返回图书馆响应的HTTP JSON数据
}
在线执行以上示例代码:http://www.dooccn.com/php7.4/#id/04538092356dfb11739fe811a3dc697b
2. 馆藏信息查询API接口
同样的,通过上个案例中的方法,我们最终分析得到以下HTTP结构:
分析汇总得出以下要点:
-
请求接口URL:
http://opac.lib.ctgu.edu.cn:8081/find/physical/groupitems
-
请求方法类型:
POST
-
请求参数:
{
"page": 1,
"rows": 20,
"entrance": null,
"recordId": "497962",
"isUnify": true
}
很显然,recordId的值即为上一步图书检索结果中包含的recoedId的值。其余参数可以继续使用默认参数。
因为同样是发起POST请求,且HTTP结构中的Header参数相同,那么我们之前封装好的sendPost函数方法仍可继续用来发起POST请求,以获取该图书的馆藏信息,示例代码如下:
<?php
$recordId = '497962';
$url = 'http://opac.lib.ctgu.edu.cn:8081/find/physical/groupitems'; // 图书检索请求URL
// POST发送的JSON请求数据
$postData = '{"page":1,"rows":20,"entrance":null,"recordId":"' . $recordId . '","isUnify":true}';
$result = sendPost($url, $postData); // 向图书馆系统发起POST请求
$result = json_decode($result, true); // 将JSON字符串解析为PHP数组,再次赋值给$result变量
print_r($result); // 打印输出查看获取到的图书馆藏状态信息
// 封装好的POST请求发送函数
function sendPost(string $url, string $postData)
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => $postData,
CURLOPT_HTTPHEADER => array( // HTTP Header信息
'Host: opac.lib.ctgu.edu.cn:8081',
'Connection: keep-alive',
'Pragma: no-cache',
'Cache-Control: no-cache',
'Accept: application/json, text/plain, */*',
'mappingPath: ctgu',
'groupCode: 800008',
'x-lang: CHI',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
'Content-Type: application/json;charset=UTF-8',
'Origin: http://opac.lib.ctgu.edu.cn:8081',
'Referer: http://opac.lib.ctgu.edu.cn:8081/ctgu',
'Accept-Encoding: gzip, deflate',
'Accept-Language: zh,zh-CN;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6'
),
));
$response = curl_exec($curl);
curl_close($curl);
return $response; // 返回图书馆响应的HTTP JSON数据
}
在线执行以上示例代码:
http://www.dooccn.com/php7.4/#id/5cda5874939a79269cd4fb7c6220b06a
其他更多请求接口请自己探索。
-
更多关于PHP CURL发起请求的参数配置可参考:http://www.zjmainstay.cn/php-curl
-
关于Google Chrome 开发工具抓包分析可以参考学习(当然其他的浏览器也可以,基本都差不多):https://zhuanlan.zhihu.com/p/32825491
如果以上的扩展资料还是不能解决您的疑惑和问题,您可能需要更深入的学习计算机网络HTTP协议相关内容,或使用搜索引擎获取更多扩展资料。
祝成功!