PHP实现查询手机归属地的方法详解


Posted in PHP onApril 28, 2017

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

PHP实现查询手机归属地的方法详解

后台

MobileQuery类调用:

  • \libs\HttpRquest
  • \libs\ImRedis (未使用)

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 \app\MobileQuery;
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 libs\HttpRequest;
use libs\ImRedis;

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;
  }
 }
}

lib/HttpRequest.php

<?php
/**
 * TODO Auto-generated comment.
 */
namespace libs;

class HttpRequest {

 /**
  * TODO Auto-generated comment.
  */
 public static function request($url, $params =[], $method='GET')
 {
  $ret = null;
  if(preg_match("/^(http|https)\:\/\/(\w+\.\w+\.\w+)/",$url)) {
   $method = strtoupper($method);
   if($method == 'POST') {
    exit('nothing to do.');
   } else {
    if($params) {
      if(strripos('?',$url)) {
      $url = $url . '&' . http_build_query($params);
      } else {
      $url = $url . '?' . http_build_query($params);
      }
    }
    $ret = file_get_contents($url);
   }
  }
  return $ret;
 }
}

statis/js/base.js

/*
* @Author: Cizel
* @Date: 2016-04-11 16:53:52
* @Last Modified by: Cizel
* @Last Modified time: 2016-04-11 17:22:32
*/

$(document).ready(function(){
 $('#query').click(function(){
  var phone = $('#phone_num').val();
  //alert(phone);
  if (phone.length == 11) {
   Cizel.GLOBAL.AJAX('Api.php','post',{'tel':phone},'json',Cizel.APPS.QUERYPHONE.AJAXCALLBACK);
  }
 });
 });

var Cizel = Cizel || {};
Cizel.GLOBAL = {};
Cizel.APPS = {};

Cizel.APPS.QUERYPHONE = {};
Cizel.APPS.QUERYPHONE.AJAXCALLBACK = function(data){
 if(data.code == 200){
  Cizel.APPS.QUERYPHONE.SHOWINFO();
  $('#phoneNumber').text(data.phone);
  $('#phoneProvince').text(data.province);
  $('#phoneCatName').text(data.catName);
  $('#phoneMsg').text(data.msg);
 } else {
  Cizel.APPS.QUERYPHONE.HIDEINFO();
 }
};
Cizel.APPS.QUERYPHONE.SHOWINFO = function(){
 $('#phoneInfo').show();
}
Cizel.APPS.QUERYPHONE.HIDEINFO = function(){
 $('#phoneInfo').hide();
}

Cizel.GLOBAL.AJAX = function(url, method, params,dataType,callBack)
{
 $.ajax({
  url: url,
  type: method,
  data: params,
  dataType: dataType,
  success:callBack,
  error:function(){
   alert('请求异常');
  }

 });
};

感悟

通过完成这个实例,感觉自己对 PHP 面向对象的编写有了新的理解,同时 JavaScript 的编写能力需要加强。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php部分常见问题总结
Mar 27 PHP
php include的妙用,实现路径加密
Jul 29 PHP
PHP中的错误处理、异常处理机制分析
May 07 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
PHP比较运算符的详细介绍
Sep 29 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
PHP使用递归按层级查找数据的方法
Nov 10 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 #PHP
PHP解决中文乱码
Apr 28 #PHP
PHP中常用的魔术方法
Apr 28 #PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 #PHP
PHP实现文件下载【实例分享】
Apr 28 #PHP
PHP实现批量删除(封装)
Apr 28 #PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 #PHP
You might like
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
初品cakephp 入门基础
2012/02/16 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
jQuery获得字体颜色16位码的方法
2016/02/20 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python Numpy 数组的初始化和基本操作
2018/03/13 Python
Python实现的knn算法示例
2018/06/14 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
关于读书的演讲稿600字
2014/08/27 职场文书
护士先进个人总结
2015/02/13 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2015年驾驶员工作总结
2015/04/29 职场文书
结婚典礼主持词
2015/06/29 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
导游词之丽江普济寺
2019/10/22 职场文书