本文介绍的是PHP实现查询手机归属地的方法,首先来看看手机归属地查询的类图:
后台
MobileQuery类调用:
- \libs\HttpRquest
- \libs\ImRedis (未使用)
Api类调用 MobileQuery 类的 Query 方法来返回 $response 的数据,并进行加工。
前台
base.js 使用 .ajax 请求,并将请求后的数据填充到index.html 中。
核心代码展示
AutoLoad.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
/* * @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 的编写能力需要加强。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://www.cizel.cn/archives/query_phone.html