本文介绍的是PHP实现查询手机归属地的方法,首先来看看手机归属地查询的类图:

后台
MobileQuery类调用:
libsHttpRquest libsImRedis (未使用)Api类调用 MobileQuery 类的 Query 方法来返回 $response 的数据,并进行加工。
前台
base.js 使用 .ajax 请求,并将请求后的数据填充到index.html 中。
核心代码展示
AutoLoad.php
<?php
/**
* TODO Auto-generated comment.
*/
class AutoLoad {
/**
* TODO Auto-generated comment.
*/
public static function load($className)
{
//命名空间的反斜杠替代
$filename = sprintf('%s.php',str_replace('','/',$className));
require_once($filename);
}
}
spl_autoload_register(['AutoLoad','load']);
Api.php
<?php
/**
* TODO Auto-generated comment.
*/
require_once "AutoLoad.php";
use appMobileQuery;
class Api{
private $response;
private $params;
private $phone;
public function __construct(){
$this->params = $_POST;
if(isset($this->params['tel'])) {
$this->phone = $this->params['tel'];
}else {
$this->phone = '17706436202';
}
$this->queryResponse($this->phone);
}
public function queryResponse($phone) {
$this->response = MobileQuery::query($phone);
if(is_array($this->response) and isset($this->response['province'])) {
$this->response['phone'] = $phone;
$this->response['code'] = 200;
} else {
$this->response['phone'] = $phone;
$this->response['msg'] = '手机号码错误';
}
}
public function getResponse()
{
return json_encode($this->response);
}
}
$Api = new Api();
echo $Api->getResponse();
app/MobileQuery.php
<?php
/**
* TODO Auto-generated comment.
*/
namespace app;
use libsHttpRequest;
use libsImRedis;
class MobileQuery {
/**
* TODO Auto-generated comment.
*/
const PHONE_API= 'https://tcc.taobao.com/cc/json/mobile_tel_segment.htm';
/**
* TODO Auto-generated comment.
*/
const QUERY_PHONE = 'PHONE:INFO:';
public static function query($phone)
{
$phoneData = null;
if(self::varifyPhone($phone)){
$response = HttpRequest::request(self::PHONE_API, ['tel'=>$phone]);
$phoneData = self::formatData($response);
$phoneData['msg'] ='数据由Cizel的博客提供';
}
return $phoneData;
}
public static function formatData($data)
{
$ret = null;
if(!empty($data)){
preg_match_all("/(w+):'([^']+)/",$data,$res);
$items = array_combine($res[1],$res[2]);
foreach ($items as $itemKey => $itemVal) {
$ret[$itemKey] = iconv('GB2312','UTF-8',$itemVal);
}
}
return $ret;
}
public static function varifyPhone($phone)
{
if(preg_match("/^1[34578]{1}d{9}/",$phone)) {
return true;
} else {
return false;
}
}
}







