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 相关文章推荐
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
如何利用php+mysql保存和输出文件
Oct 09 PHP
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
codeigniter实现get分页的方法
Jul 10 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 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
咖啡与牛奶
2021/03/03 冲泡冲煮
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
JavaScript数据推送Comet技术详解
2016/04/07 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
幼儿园小班植树节活动方案
2014/03/04 职场文书
业务员的岗位职责
2014/03/15 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
2014个人年度工作总结
2014/12/15 职场文书
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS