<?php header("Content-type:text/html;charset=utf-8"); /** * Express.class.php 快递查询类 * @copyright chzeze * @lastmodify 2015-10-28 */ class Express { private $expressname =array(); //封装了快递名称 function __construct(){ $this->expressname = $this->expressname(); } /* * 采集网页内容的方法 */ private function getcontent($url){ if(function_exists("file_get_contents")){ $file_contents = file_get_contents($url); }else{ $ch = curl_init(); $timeout = 5; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch); } return $file_contents; } /* * 获取对应名称和对应传值的方法 */ private function expressname(){ $result = $this->getcontent("http://www.kuaidi100.com/"); //爬取快递名称对应的快递代码 preg_match_all("/data\-code\=\"(?P<name_code>\w+)\"\>(?P<name>.*)\<\/a>/iU",$result,$data);//(?P<name>)正则匹配存储字符 $name = array(); //var_dump($data['name']); //echo "<br>"; foreach($data['name'] as $k=>$v){ $name[$v] =$data['name_code'][$k];//例:$name[中通]=zhontong //echo "[".$v."]=".$name[$v]."<br>";//获取快递编码 } //echo "一次查询"."<br>"; return $name; } /* * 解析object成数组的方法 * @param $json 输入的object数组 * return $data 数组 */ private function json_array($json){ if($json){ foreach ((array)$json as $k=>$v){ $data[$k] = !is_string($v)?$this->json_array($v):$v; } return $data; } } public function getorder($name,$order){ $keywords = $this->expressname[$name]; //var_dump($keywords); //$keywords=shunfeng; //$order=688625443909; $result = $this->getcontent("http://www.kuaidi100.com/query?type={$keywords}&postid={$order}"); $result = json_decode($result); $data = $this->json_array($result); return $data; } } $a = new Express(); echo "PHP快速抓取快递信息"."<br>"; echo "<p>/************************************************************/</br>"; for($num=688625443900;$num<=688625443910;$num++) { echo "<br>快递单号:".$num; $result = $a->getorder("顺丰",$num); if(isset($result['nu'])) { echo " 更新时间".$result['updatetime']."<br>";//生成表格 echo "<table border=\"1\">"; echo "<tr>"; echo "<th>时间</th>"; echo "<th>地点和跟踪进度</th>"; echo "</tr>"; foreach($result['data'] as $k=>$v) { echo "<tr>"; echo "<td>".$v['time']."</td>"; echo "<td>".$v['context']."</td>"; echo "</tr>"; } echo "</table>"; } else { echo "<br>".$result['message'];//输出错误信息 //var_dump($result); } } echo "</br><p>/************************************************************/</p>"; ?>