• 微信公众平台开发(94) 违章查询


    在微信公众平台开发违章查询是一件比较辛苦的事,因为违章查询的数据在各省市公安部门的服务器上,对外只有网页查询提供,所以只有去分析网页,然后通过模拟提交来实现。

    黑龙江违章查询地址为 http://www.hljjj.gov.cn:8081/Home/Wfcx

    实际查询时,抓取到的请求如下

    通过查看网页源码得到验证:

     1 <script type="text/javascript">
     2     function error() {
     3         showDialog(false);
     4         alert("数据库繁忙,请稍后重试!");
     5     }
     6     function beforesend() {
     7         showDialog(true);
     8     }
     9     /** --------- AJAX ------------ */
    10     function queryajax() {
    11         var ajaxRequest = new AjaxRequest();
    12         ajaxRequest.setUrl("/Home/getWfcx"); //请求之前
    13         ajaxRequest.setDataType("json");
    14         ajaxRequest.setUsePOST(); //post方式
    15         ajaxRequest.setBeforeSend(beforesend); //请求之前
    16         ajaxRequest.setSuccess(querysuccess); //请求成功
    17         ajaxRequest.setError(error); //请求失败
    18         var queryString = "";
    19         var hpzl = $("#hpzl").val();
    20         var dy = $("#dy").val();
    21         var xzqh = $("#xzqh").val();
    22         var hphm = $("#hphm").val();
    23         var clsbdh = $("#clsbdh").val();
    24         var jkbj = $("input[name='jkbj'][checked]").val();
    25         var yzm = $("#yzm").val();
    26         queryString = "hpzl=" + hpzl + "&dy=" + dy + "&xzqh=" + xzqh + "&hphm=" + hphm + "&clsbdh=" + clsbdh + "&jkbj=" + jkbj;
    27         ajaxRequest.setQueryString(queryString);
    28         ajaxRequest.sendRequest();
    29     }
    30 
    31     function querysuccess(json) {
    32         var json_data = json;
    33         showDialog(false);
    34         if (json_data[0] == "0") {
    35             $('#comments').empty();
    36             $('#comments').append(json_data[2]);
    37         } else {
    38             $('#comments').empty();
    39             alert(json_data[1]);
    40         }
    41         img();
    42     }
    43     function img() {
    44         $('#imgDefault').attr('src', '/Home/Yzm?time=' + (new Date().getTime()));
    45     }
    46     $(document).ready(function () {
    47         img();
    48     });
    49 </script>

    可以看到,实际查询路径为 /Home/getWfcx,也就是说,真实的查询地址为

    http://www.hljjj.gov.cn:8081/Home/getWfcx

    查询请求为 

    hpzl=02&dy=黑&xzqh=A&hphm=EZ352&clsbdh=LGBF1DE099R156742&jkbj=0&ts=1396242672751

    返回的内容如下:

    <table width="100%"  border="0" cellspacing="1" cellpadding="0" class="list_table" align="center"><tr height='20px' class="list_head"><td width='6%'>号牌号码</td><td width='6%'>号牌种类</td><td width='10%'>违法时间</td><td width='5%'>金额</td><td width='3%'>记分</td><td width='5%'>缴款状态</td><td width='5%'>处理状态</td><td width='18%'>违法地点</td><td width='15%'>违法内容</td><td width='12%'>决定书编号</td><td width='15%'>采集机关</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-12-30 15:14:00</td><td>100</td><td>3</td><td>未缴款</td><td>未处理</td><td>国道绥满公路578公里</td><td>驾驶中型以上载客载货汽车、危险物品运输车辆以外的其他机动车行驶超过规定时速未达20%的</td><td></td><td>黑龙江省绥化市肇东市交警大队</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-7-16 14:37:00</td><td>100</td><td>0</td><td>未缴款</td><td>未处理</td><td>比优特旗舰店</td><td>不按规定停车</td><td></td><td>黑龙江省鹤岗处罚大队</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-7-15 18:42:00</td><td>100</td><td>0</td><td>未缴款</td><td>未处理</td><td>比优特旗舰店</td><td>不按规定停车</td><td></td><td>黑龙江省鹤岗处罚大队</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-6-26 9:41:00</td><td>100</td><td>0</td><td>未缴款</td><td>未处理</td><td>防疫站</td><td>不按规定停车</td><td></td><td>黑龙江省鹤岗处罚大队</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-6-17 12:40:00</td><td>100</td><td>3</td><td>未缴款</td><td>未处理</td><td>哈尔滨市-铁路街全路段</td><td>违反禁止标线指示</td><td></td><td>巡逻大队</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-6-7 10:44:00</td><td>100</td><td>0</td><td>未缴款</td><td>未处理</td><td>市农行道口</td><td>不按规定停车</td><td></td><td>黑龙江省鹤岗处罚大队</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-5-26 18:37:00</td><td>100</td><td>0</td><td>未缴款</td><td>未处理</td><td>老交通局</td><td>不按规定停车</td><td></td><td>黑龙江省鹤岗处罚大队</td></tr><tr class='list_body_out' onMouseOver="this.className='list_body_over'" onMouseOut="this.className='list_body_out'"><td>黑AEZ352</td><td>小型汽车</td><td>2013-5-14 9:13:00</td><td>100</td><td>0</td><td>未缴款</td><td>未处理</td><td>老交通局</td><td>不按规定停车</td><td></td><td>黑龙江省鹤岗处罚大队</td></tr></table>

    其返回的结果不是一个标准的json,而是一个网页格式,所以还需要html解析处理,

    而对于请求发送,直接构造字符串用curl进行POST提交

    实现代码如下:

     1 function getTrafficInfo($longnumber)
     2 {
     3     if (!preg_match("/^违章#黑[A-Ra-r]w{5}#w{17}$/",$longnumber)){        //城市简拼
     4         return "查询格式错误!
    请发送'违章#车牌号码#机动车识别代号'
    例如'违章#黑AEZ352#LGBF1DE099R156742'";
     5     }
     6     
     7     $headers = array(
     8         "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1",
     9         "Accept: application/json, text/javascript, */*",
    10         "Accept-Language: en-US,en;q=0.8",
    11         "Referer: http://www.hljjj.gov.cn:8081/Home/Wfcx",
    12         "X-Requested-With: XMLHttpRequest",
    13         "Content-Type: application/x-www-form-urlencoded",
    14     );
    15 
    16     $numberarray = explode ("#", $longnumber);
    17     $provinceCode = substr($numberarray[1], 0, 3);
    18     $cityCode = substr($numberarray[1], 3, 1);
    19     $plateNumber = substr($numberarray[1], 4, strlen($numberarray[1]) - 4);
    20     $vehicleNumber = $numberarray[2];
    21     $curTime = explode (" ", microtime());
    22     $curMicroTime = round($curTime[1].($curTime[0]*1000));
    23 
    24     $post2 = "hpzl=02&dy=黑&xzqh=$cityCode&hphm=$plateNumber&clsbdh=$vehicleNumber&jkbj=0&ts=$curMicroTime";
    25     
    26     $ch = curl_init();
    27     curl_setopt($ch, CURLOPT_URL, "http://www.hljjj.gov.cn:8081/Home/getWfcx");
    28     curl_setopt($ch, CURLOPT_HEADER, false);
    29     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    30     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    31     curl_setopt($ch, CURLOPT_POSTFIELDS, $post2);
    32     $content=curl_exec($ch);
    33     curl_close($ch);
    34     $output = json_decode($content, true);
    35 
    36     if($output[0] != "0"){
    37         return "【错误】类型:".$output[0].", 原因:".$output[1];
    38     }else{
    39         $str = $output[2];
    40         include('simple_html_dom.php');
    41         $html = str_get_html($str);
    42         $result = "";
    43         $titleArray = array("号码", "种类", "时间", "金额", "记分", "缴款", "处理", "地点", "内容", "编号", "机关");
    44         foreach($html->find('table tr') as $tr){
    45             if ($tr->find('td', 0)->innertext == "号牌号码"){
    46                 continue;
    47             }
    48             for ($i = 2; $i <= 10; $i++) {
    49                 $result .= $titleArray[$i].":".$tr->find('td', $i)->innertext."
    ";
    50             }
    51             $result .= "
    ";
    52             if (strlen($result) > 2000){break;}
    53         }
    54         return trim($result);
    55     }
    56 }

    ====================================================================

    方倍工作室微信公众平台账号关注方法:
    1. 微信通讯录-添加朋友-查找公众号-搜索“方倍工作室”
    2. 微信通讯录-添加朋友-搜号码-输入“pondbaystudio”
    3. 使用微信扫描下面的二维码

  • 相关阅读:
    java按照指定格式输出系统时间使用SimpleDateFormat方法
    java按照指定格式输出系统时间
    java打印系统时间
    java字符串截取指定下标位置的字符串
    java根据输入的字符串和字节数来截取,输出对应字节数的字符串
    java字符串根据正则表达式让单词首字母大写
    java根据#号截取字符串,使用Pattern的方法
    java数组冒泡排序
    Prometheus+Grafana监控平台搭建
    JMeter-setUp线程组实现用户先登录(跨线程中beanshell设置全局变量)
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467560.html
Copyright © 2020-2023  润新知