PHP 判断手机号归属地 和 运营商的免费接口
在项目开发的时候,需要去查询又一批手机号或者固话的具体信息(归属地 运营商)
就需要写一个脚本,来批量请求接口来得到我们想要的数据
学习源头:https://blog.csdn.net/shaerdong/article/details/45842409
一、淘宝网API
API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443
参数:
tel:手机号码
返回:JSON
二、百付宝API
API地址: https://www.baifubao.com/callback?cmd=1059&callback=phone&phone=15850781443
参数:
phone:手机号码
callback:回调函数
cmd:未知(必须)
返回:JSON
三: 这我没试过
http://www.haoservice.com/docs/14
有兴趣可以研究一下
这两个迄今为止 实测可以使用的;其他的我试了是不行的,比较是免费的么.能用就很开心了
PHP调用淘宝API实例:
<?php
$mobile = "150********"; //要查询的电话号码
$content = get_mobile_area($mobile);
print_r($content);
function get_mobile_area($mobile){
$sms = array('province'=>'', 'supplier'=>''); //初始化变量
//根据淘宝的数据库调用返回值
$url = "http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=".$mobile."&t=".time();
$content = file_get_contents($url);
$sms['province'] = substr($content, "56", "4"); //截取字符串
$sms['supplier'] = substr($content, "81", "4");
return $sms;
}
自己之前用的是淘宝的api,开始还算稳定,但是过了一段时间,突然发现速度越来越慢,更是经常出现访问超时的问题,后来不得不放弃第三方,改用自己的库来保存手机号数据!这样一来,在自己的服务器上来判断手机号归属地,最后的结果相信大家也都想到了!
在这里,贴出2015版最新的手机号归属地数据库mysql版(包含170字段)的下载链接:http://download.csdn.net/detail/shaerdong/8715347
上面是之前博主的,我自己是用的curl去请求的
curl_get封装方法
function get_api($url){ $curl = curl_init(); // 启动一个CURL会话 $header[] = "Content-type: text/html;charset=utf-8"; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl,CURLOPT_ENCODING,'gzip,deflate'); $contents = curl_exec($curl); //返回api的json对象 $contents = mb_convert_encoding($contents, 'utf-8', 'GBK,UTF-8,ASCII'); //关闭URL请求 curl_close($curl); // dd($contents); return $contents; //返回json对象 }
excel处理方法
// 一个读取excel 查询对应数据 并且处理数据 再导出excel的处理脚本 public function ioexcel() { // 读取excel文件内容 $tmp_file = public_path('ioexcel')."/录音正常通话统计.xls"; // dd($tmp_file); Excel::load($tmp_file, function($reader) { $reader = $reader->getSheet(2); //获取表中的数据 $results = $reader->toArray(); // $results = $reader->get()->toArray(); // dd($results); $cellData[0] = ['录音编号','uuid','商家名称','客户号码', '客户号码归属地', '客户号码运营商','客服号码', '客服号码类型(固话/手机)','客服号码归属地', '客服号码运营商']; foreach ($results as $key => $value) { if ($key == 0) { continue; } $data_id = $value[0]; // 数据id if ($data_id == null) { continue; } // dd($data_id); // 根据读取到的数据id去查询数据 $res = DB::table('a_data')->where('id', $data_id)->first(); // dd($res); $uuid = $res->uu_id; $data_packet_id = $res->data_packet_id; // 根据数据包id查询对应的商家id和商家名称 $bus_id = \ai\Models\Datapacket::getDpDetail($data_packet_id)->business_id; $bus_name = \ai\Models\Business::getBus($bus_id)->name; // 查询客户信息 $kh_phone = $res->kh_phone; $kh_info = $this->getPhone($kh_phone); // 查询客服信息 $kf_phone = $res->called_phone; // dd($kf_phone); if ($kf_phone) { $kf_info = $this->getPhone($kf_phone); } $cellData[$key+1] = [$data_id, $uuid, $bus_name, $kh_phone, $kh_info[0], $kh_info[1], $kf_phone ? $kf_phone : '', $kf_phone ? $kf_info[2] : '', $kf_phone ? $kf_info[0] : '', $kf_phone ? $kf_info[1] : '']; // dd($cellData[$key+1]); } $exp_res = Excel::create("通话正常质量调查统计-第一段处理版",function($excel) use ($cellData){ $excel->sheet('score', function($sheet) use ($cellData){ $sheet->rows($cellData); }); })->export('xls'); }); } // 读取手机号的客户号码归属地 客户号码运营商 客服号码类型(固话/手机)等信息 private function getPhone($phone) { // $phone = '05532611908'; // 判断是固话还是移动电话 固话都是以0开头的 $type = '手机'; // 移动电话 if ($phone[0] == 0) { $type = '固话'; // 固话 } $url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={$phone}"; $info = get_api($url); preg_match_all("/(\w+):'([^']+)/", $info, $match); // $info = str_replace ( "\r\n", '', $info ); // $info = str_replace ( "\n", '', $info ); // $info = str_replace ( "\t", '', $info ); // $info = strstr($info,'__GetZoneResult_'); // $info = json_decode($info); // dd($match); if ($type == '手机') { $province = $match[2][1]; $catName = $match[2][2]; } else if ($type == '固话') { $province = $match[2][0]; $catName = ''; } // dd($province, $catName); $data = [$province, $catName, $type]; return $data; // $sms = array('province'=>'', 'supplier'=>''); //初始化变量 // //根据淘宝的数据库调用返回值 // $url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=".$phone."&t=".time(); // // $content = file_get_contents($url); // dd($content); // $sms['province'] = substr($content, "56", "4"); //截取字符串 // $sms['supplier'] = substr($content, "81", "4"); // return $sms; }
在我用curl方法的过程中,发现返回的结果不是json格式的,
然后我就又百度了一下
学习源头:https://bbs.csdn.net/topics/390804729
在 php 中使用的话可以这样解析
$s = file_get_contents('http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443'); preg_match_all("/(\w+):'([^']+)/", $s, $m); $a = array_combine($m[1], $m[2]); print_r($a);
Array
(
[mts] => 1585078
[province] => 江苏
[catName] => 中国移动
[telString] => 15850781443
[areaVid] => 30511
[ispVid] => 3236139
[carrier] => 江苏移动
)