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+MySQL 手工注入语句大全 推荐
Oct 30 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
php之Memcache学习笔记
Jun 17 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
Nov 18 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 PHP
PHP基于ip2long实现IP转换整形
Dec 11 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实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
深入了解javascript中的prototype与继承
2013/04/14 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
简单介绍Python中的几种数据类型
2016/01/02 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
python实现从ftp服务器下载文件
2020/03/03 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
详解HTML5 Canvas标签及基本使用
2020/01/10 HTML / CSS
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
趣味比赛活动方案
2014/02/15 职场文书
出国导师推荐信
2015/03/25 职场文书
会计岗位职责范本
2015/04/02 职场文书
红色影片观后感
2015/06/18 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
Redis高并发缓存架构性能优化
2022/05/15 Redis