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] => 江苏移动
)
PHP 判断手机号归属地 和 运营商的免费接口的更多相关文章
- WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商
在网上查资料闲逛,偶然间看到了张戈博客的评论框有点意思,于是就收走拿到了我的米扑博客. 本文为米扑博客原创:总结分享 WordPress显示评论者IP归属地.浏览器.终端设备.电信运营商 WordPr ...
- PHP判断手机号运营商(详细介绍附代码)
道理很简单,知道手机号规则 进行正则判断就可以 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 联通:130.131.132.15 ...
- Python(phone)模块获取手机号归属地、区号、运营商等
Python(phone)模块获取手机号归属地.区号.运营商等 一.我使用的是python3,可以自行搜索下载 二.安装phone模块, pip install phone 三.测试代码如下: fro ...
- iOS开发判断手机号及其运营商
根据三大运营商出现的号段(号段来自百度百科) 判断是否是手机号 + (BOOL)isMobile:(NSString *)str { NSString *MOBILE = @"^1(3[0- ...
- 记 判断手机号运营商function
/* 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 联通:130.131.132.152.155.156.185.186 电信: ...
- php 判断手机号运营商
/* 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 联通:130.131.132.152.155.156.185.186 电信: ...
- java判断手机号三大运营商归属的工具类
package com.tymk.front.third; import java.util.regex.Pattern; public class OperatorsUtil { /** * 中国电 ...
- android判断网络连接状态、联网类型、运营商
/** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { St ...
- Android手机上判断网络运营商
我们想获取手机的运营商信息.通常都会去调用系统的TelephonyManager类的取数据.但是很多时候可能取不到卡的信息(例如双卡手机和 一些特殊卡),这样就区别不了运营商了.但是有时候我们的需求要 ...
随机推荐
- hdu 5920 Wool 思路
Wool Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Problem D ...
- Selenium with Python 005 - 调用js操作页面元素
WebDriver提供了execute_script()方法来执行JavaScript方法,格式如 driver.execute_script(script,*args) 执行js一般有两种场景,一是 ...
- LightOJ - 1248 期望
题意:有一个n面筛子,每次扔一下,每面概率相同,要求扔出n面的期望次数 题解:和第三篇论文里的例题一样,算从第i个到第i+1个的概率是(n-i)/n,n面中找n-i个没有扔到过的,期望是n/(n-i) ...
- vue2项目中better-scroll 插件使用时候页面不滚动
参考这里 1.外面包裹层的高度没有设置或者条目的高度没有超过外面包裹层的高度 2.初始化BetterScroll的时机不对,当前元素还没有正常渲染出来,导致BetterScroll的高度的计算错误
- iptables(一)iptables概念
为什么想写这个系列呢?openstack中的安全组.防火墙都是用iptables实现,后面的规则我们如果想要完全理解,不懂iptables的话,或者不精通iptables的话,会看的比较吃力.所以下定 ...
- 《The Cg Tutorial》阅读笔记——光照 Lighting
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4796306.html 光照 Lighting 一.常见的几种光照模型 二.基本的光照 ...
- mongodb集群——配置服务器放分片meta信息,说明meta里包含了哪些数据信息
在搭建分片之前,先了解下分片中各个角色的作用. ① 配置服务器.是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息.最先开始建立,启用日志功能.像启动普通的mongod ...
- 【hdu1705】Count the grid(皮克定理)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1705 [题意] 给出平面上三个点坐标,求围成的三角形内部的点数 做这道题需要先了解下皮克定理. 百度百科: ...
- 使用vue遇到坑
1.请求ajax方式一定要在Vue methods或creads里去请求. 方便做下拉刷新数据 . 2.多看看vue源码. 3.多写tab常项,h5下拉滚动,pc分页效果,回到顶部,提高熟悉vue需求 ...
- Java中会有内存泄露吗?
一.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的, 这些对象的创建都是在堆(He ...