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 相关文章推荐
ADODB的数据库封包程序库
Dec 31 PHP
PHP 地址栏信息的获取代码
Jan 07 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
php empty()与isset()区别的详细介绍
Jun 17 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php读取csc文件并输出
May 21 PHP
php使用pear_smtp发送邮件
Apr 15 PHP
浅谈PHP中的
Apr 23 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
详解PHP中的8个魔术常量
Jul 06 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 引用(&amp;)详解
2009/11/20 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
React实现todolist功能
2020/12/28 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
详解python中的文件与目录操作
2017/07/11 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
浅谈Pytorch中的torch.gather函数的含义
2019/08/18 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
python进度条显示之tqmd模块
2020/08/22 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
皮肤科医师岗位职责
2013/12/04 职场文书
承诺书范文
2014/06/03 职场文书
合同纠纷调解书
2015/05/20 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
Pandas数据结构之Series的使用
2022/03/31 Python
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技
Promise静态四兄弟实现示例详解
2022/07/07 Javascript