自己用的原生系统的 android 手机没有恶意号码识别的功能,应用市场上的号码识别软件还需要通讯录这类的权限,用起来自己也不放心,于是就打算自己写一个应用来做这事;
搜索号码识别接口的时候, 在网上找到了这篇文章,但是原博主的文章里贴出的代码已经无法使用,就自己改了一下代码;
识别号码的原理
使用"360搜索"搜索号码 -> 分析返回的网页数据 -> 从网页数据中提取数据返回给客户端;
由于360搜索提供的格式可能会发生改变, 会造成接口无法使用, 下面贴出的源码也需要对应修改;
下图网页源码中的 格式 信息(截止2018/02)
补充对客服号码的识别(2018/2/10)
正常号码
恶意号码
客服号码(如10086)
PHP 代码:(PHP 5.4/5.5)
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
<?php class Result{ var $phone;//号码 var $where;//归属地 var $cmcc;// 运营商 var $type;// 类型(广告推销/骚扰电话...) var $tip;// 标记人数 } // 获取网页数据 function get($url = '') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); return $output; } // 获取 指定标签 内容 function get_tag( $attr, $value, $xml, $tag=null ) { if( is_null($tag) ) $tag = '\w+'; else $tag = preg_quote($tag); $attr = preg_quote($attr); $value = preg_quote($value); // $tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*". // "(['\"])$value\\2[^>]*>(.*?)<\/\\1>/"; $tag_regex2 = "/<".$tag."[^>]*".$attr."[^>]*".$value."[^>]*>([\s\S])*<\/".$tag.">/U"; preg_match_all($tag_regex2, $xml, $matches, PREG_PATTERN_ORDER); return $matches[0]; } // 去除空白字符 function trimall($str){ $qian=array(" "," ","\t","\n","\r"); return str_replace($qian, '', $str); } header('Content-type:text/json'); $phone=$_GET['phone']; $phone_t=""; $where_t=""; $cmcc_t=""; $type_t=""; $tip_t=""; // 从 360搜索 获取号码信息 $txt=get('https://www.so.com/s?q='.$phone); // 获取有关号码的标签内容 $info=get_tag("class","mohe-mobileInfoContent",$txt,"td"); if (count($info)==0) {// 特殊服务热线,如10086 $special_info=get_tag("id","mohe-biu_kefudianhua",$txt,"div"); if (count($special_info)!=0) { $special_info_name=get_tag("class","title",$special_info[0],"h3"); $special_info_number=get_tag("class","mh-item g-ellipsis",$txt,"li"); $where_t=strip_tags ($special_info_name[0]);//去除标签 $where_t=trimall($where_t); $phone_t=strip_tags ($special_info_number[0]);//去除标签 $phone_t=trimall($phone_t); } }else{ // 归属地信息 $where=get_tag("class","gclearfix mh-detail",$info[0],"div"); if(count($where)==0){//不是恶意电话 $where=get_tag("class","mh-detail",$info[0],"p"); $oknumber=strip_tags ($where[0]);//去除标签 $oknumber=trimall($oknumber); $number_info_detail=explode(" ",$oknumber);// 获取号码/归属地/运营商 $phone_t=$number_info_detail[0]; $where_t=$number_info_detail[1]; $cmcc_t=$number_info_detail[2]; $type_t=$type_t; }else{// 是恶意电话 $evilnumber=strip_tags ($where[0]);//去除标签 $evilnumber=trimall($evilnumber); $number_info_detail=explode(" ",$evilnumber);// 获取号码/归属地/运营商 $phone_t=$number_info_detail[0]; $where_t=$number_info_detail[1]; $cmcc_t=$number_info_detail[2]; // 获取恶意电话详细信息 $type=get_tag("class","mohe-ph-mark",$info[0],"span"); $number_type=strip_tags ($type[0]);//去除标签 $number_type=trimall($number_type); if(count($type)!=0){ $type_t=$number_type; } $tip_parent_contact=get_tag("class","mohe-tips",$info[0],"div"); if(count($tip_parent_contact)!=0){ $tip_array=get_tag("","",$tip_parent_contact[0],"span"); if (count($tip_array)!=0) { $tip_array=get_tag("","",$tip_array[1],"b"); if (count($tip_array)!=0) { $number_tip=strip_tags ($tip_array[0]);//去除标签 $number_tip=trimall($number_tip); $tip_t=$number_tip; } } } } } $result=new Result(); $result->phone=$phone_t; $result->where=$where_t; $result->cmcc=$cmcc_t; $result->type=$type_t; $result->tip=$tip_t; $json=json_encode($result,JSON_UNESCAPED_UNICODE); echo $json; ?> |
使用方法:
将代码保存为 .php 文件, 放到有PHP服务的服务器上;
使用 域名?phone=号码 方式访问;
1 2 3 4 5 6 |
访问: 域名?phone=02568629204 返回: {"phone":"02568629204","where":"江苏南京","cmcc":"","type":"广告推销","tip":"16"} |
0 Comments