博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己动手写一个查询cet成绩的API
阅读量:6619 次
发布时间:2019-06-25

本文共 1990 字,大约阅读时间需要 6 分钟。

hot3.png

   这两天闲来无事,学习了一些关于php的curl相关的内容,并利用curl和simple_html_dom做了一个查询cet成绩的API,在这了分享出来。

   我利用的是学信网的查询地址。,可以看到,我们需要根据准考证号和姓名来进行查询,幸运的是,它不需要用验证码,但不知道它的后台是用post还是get方式来接受,所以,先输入一个数据查询一下来看,

点击查询,如果你的输入都正确,我们将会看到我们要查询的结果页面,先看地址栏:

可以看到,后台是采用get方式来接收的,所以,接下来事情就很好办,我们的API只需要接受name(姓名)与num(准考证号)两个参数。

   所以会有如下代码:

   

$zkzh=$_GET['num'];$xm=$_GET['name'];
   接下来,构造查询地址:

$curlPost='zkzh='.$zkzh.'&xm='.$xm;$ch = curl_init("http://www.chsi.com.cn/cet/query?".$curlPost) ;
声明一个数组用来存储我们一会要捕获的数据。

$arrMsg = array();
重头戏来了,我们接下来就试着用curl来捕获刚才我们构造的url地址。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回      curl_setopt($ch, CURLOPT_HEADER, 1);    $output = curl_exec($ch) ;      $html = new simple_html_dom();    $html ->load($output);    echo $html;
如果对刚才的这段代码不太理解则建议先看一些curl的相关内容,这个代码的意思是获得刚才我们构造的url地址的html页面,正常情况下,它的输出应该和我们最开始在官网上的查询返回的页面是一样的,(其实理解很简单,url地址都是一样的吗,只不过这里我们会获得整个html页面的源码并存于$html中),但是很悲剧,返回的页面如下:

可见学信网对访问来源做了限制,但是这没什么,curl是很强大的,它可以构造虚拟的访问来源,代码如下:

curl_setopt($ch, CURLOPT_REFERER, "http://www.chsi.com.cn/cet/ ");
最后,整合一下代码如下:

load($output); echo $html;}?>
运行上面的代码返回页面如下:

       

       好的,因为缺少学信网的css文件,所以布局会乱掉,但这不会影响后续操作,如果你的操作和我一样,效果也一样,那么第一步就完成啦!

      一鼓作气,接下来,我们其实要的数据不多,只有姓名,学校,总分等信息,所以就要从$html这个字符串中提取出这些信息。在chrome浏览器下按f12进入开发者模式,找到我们需要数据的位置,

     会发现我们需要的数据都被<td>标签包裹,所以采用simple_html_dom来进行操作:

foreach($html->find("td") as $m)    {            array_push($arrMsg,$m->plaintext);     }
   
       幸运的是td标签包裹的只有我们需要的数据,所以经过上面的代码,我们会将姓名,学校等数据放进$arrMsg数组,后面的就简单了,只需要按照自己的需求来构造了。

最后,贴出我的版本的完整代码。

load($output); foreach($html->find("td") as $m) { array_push($arrMsg,$m->plaintext); } $returnArr= array("name"=>urlencode($arrMsg[2]),"school"=>urlencode($arrMsg[3]),"time"=>urlencode($arrMsg[6]),"pro"=>urlencode($arrMsg[4]),"score"=>urlencode($arrMsg[7])); if(!empty($arrMsg)) { echo urldecode(json_encode($returnArr)); break; } }?>
上面的代码会把我们需要的主要信息以json形式返回,效果如下:

好的,over!刚刚获得了曹冲,要去三国杀一杀啦大笑~~

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/u/1020021/blog/502255

你可能感兴趣的文章
IT行业的精英们,你真的懂如何比较工资吗?
查看>>
ssh 主要配置参数说明
查看>>
vCenter Server 5.1 Required Ports
查看>>
监控cpu负载的脚本
查看>>
awk多文件的处理
查看>>
linux虚拟文件系统浅析
查看>>
Centos7 系统安装
查看>>
JDBC的轻量级封装DBUtils开源组件的使用(一)
查看>>
find 文件中字符串搜索
查看>>
环境考查与探测-虚拟终端网络工程实施
查看>>
撮合系统
查看>>
Android Studio 快捷键
查看>>
在web.xml文件中使用EL表达式配置变量例子
查看>>
python小程序
查看>>
专业才是王道
查看>>
Struts2.3.1.2+Hibernate3.5.5+Spring3.1.1所必要的Jar包
查看>>
交换机的“TRUNK”的配置
查看>>
Nginx禁止ip访问站点
查看>>
100万个数中找出最大的前K个数
查看>>
arrayList 和hashSet的区别
查看>>