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 相关文章推荐
实用函数10
Nov 08 PHP
PHP5 面向对象程序设计
Feb 13 PHP
PHP 读取和修改大文件的某行内容的代码
Oct 30 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 PHP
关于PHP开发的9条建议
Jul 27 PHP
php检查页面是否被百度收录
Oct 28 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 PHP
Swoole扩展的6种模式深入详解
Mar 04 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 验证码实例代码
2010/06/01 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
Python常用随机数与随机字符串方法实例
2015/04/09 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
利用python求相邻数的方法示例
2017/08/18 Python
python中import reload __import__的区别详解
2017/10/16 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
卫校毕业生自我鉴定
2013/10/31 职场文书
服务生自我鉴定
2014/01/22 职场文书
领导党性分析材料
2014/02/15 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
小学生演讲稿大全
2014/04/25 职场文书
保密工作承诺书
2014/08/29 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
python库sklearn常用操作
2021/08/23 Python