php环境下使用联通接口获取手机号号码,并输出json格式文件

这里用的tp5.1实现的,这里放上实现功能的核心代码。

<?php
namespace app\ordertj\controller;
use think\Controller;
header('Access-Control-Allow-Origin:*');//允许跨域
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');//允许跨域
header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE');//允许跨域

class Ordertj extends  Controller
{

//根据前端提交的参数获取数据,输出json文件开始

  public function testurl(){
     $citycode=input('post.citycode');   
  $provicecode=input('post.provicecode');
     /*$citycode='721';  //城市编码 
    $provicecode='71' ;*/  //省份编码
   // $provicecode=input('post.provicecode');

    $json_string = file_get_contents('static//numinfo/'.$provicecode.'.json');
    $data = json_decode($json_string,true);

    // var_dump($data);
   foreach ($data as $key => $value) {
    
         if(in_array($citycode,$value)){
           
            return json($value);
            exit;
          //return 
        }
   }

  }

//根据前端提交的参数获取数据,输出json文件结束

//号码获取开始
///AES加密
 function encrypt($data,$key){
    $data = openssl_encrypt($data, 'aes-128-ecb', base64_decode($key), OPENSSL_RAW_DATA);
    return base64_encode($data);
}

 function sign($key,$dataStr){

    return base64_encode(hash_hmac("md5", $dataStr, base64_decode($key), true));
}

//城市编码表获取开始

 function getcitycode($Url,$data_string){

//通过curl_init发送请求,获取数据
  $ch = curl_init();//初始化curl
 curl_setopt($ch, CURLOPT_URL,$Url);//抓取指定网页
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
  curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string)
)); 

       $result = curl_exec($ch);//运行curl 获取的此接口数据为json数据

        if (curl_errno($ch)) {
    print curl_error($ch);
}
        curl_close($ch);
  // var_dump(json_decode($result,true));
   $arrnum= json_decode($result,true); //将json数据转化为数组

    $allcity=$arrnum['body'];
    return $allcity;

//$json_city = json_encode($allcity,JSON_UNESCAPED_UNICODE);  //JSON_UNESCAPED_UNICODE可以使中文不转义
// 写入文件
//file_put_contents('static/json/citycode.json', $json_city);

}

//城市编码表获取结束


       public function getphonenum($prefix=''){

  $Url='http://cd.10010.com/zop/link/num/select/v1'; //生产环境请求地址

//这里的参数需要接口方提供
$APPCODE='C3B3U80C38724C85TT8AC2977EC37160';
   
  $HMACMD5='ywt0UqK2uqLULp1/TEBH2G8St1u71fANXOovX0ll63ctDqxBWkmHKTUzoY7wVxL+7xUQqCxOBIqeST9CGmLtDQ=='; 
  $AES='bufB2aTrsiKRe41hkO9adf==';

//这里的参数需要接口方提供

//$nowtm= time();
$timestamp=date('Y-m-d H:i:s.B',time());
  
$chars = md5(uniqid(mt_rand(), true));
        $uuid = substr ( $chars, 0, 8 ) . '-'
            . substr ( $chars, 8, 4 ) . '-'
            . substr ( $chars, 12, 4 ) . '-'
            . substr ( $chars, 16, 4 ) . '-'
            . substr ( $chars, 20, 12 );
        $uuid=$prefix.$uuid;

$dataStr='appCode'.$APPCODE.'timestamp'.$timestamp."uuid".$uuid.$HMACMD5;
// 获取sign
//身份循环开始
//$arr=[10,11,13,17,18,19,30,31,34,36,38,50,51,59,70,71,74,75,76,79,81,83,84,85,86,87,88,89,90,91,97]; //省粉编码
//foreach ($arr as $rowsfcode) {
//$provicecode=$rowsfcode;

$provicecode='97';
 $sign=$this->sign($HMACMD5,$dataStr);

$head["sign"]=$sign;
$head["timestamp"]=$timestamp;
$head["uuid"]=$uuid;
//$body["provinceCode"]='34';
$body["provinceCode"]=$provicecode;

$Url2='http://cd.10010.com/zop//link/king/postInfo/qry'; 
//$Url2='http://demo.mall.10010.com:8104//zop//link/king/postInfo/qry'; 
$reqObjcity["head"]=$head;
$reqObjcity["body"]=$body;
$reqObj3=$this->encrypt(json_encode($reqObjcity),$AES);

$data_city["appCode"]=$APPCODE;
$data_city["reqObj"]=$reqObj3;
$data_city=json_encode($data_city);

$citycode=$this->getcitycode($Url2,$data_city);


foreach ($citycode as $rowcity) {
   $cityrecodearr['cscode']=$rowcity['numCityCode'];
    $cityrecodearr['cityname']=$rowcity['postCityName'];
    $cityrecode[]=$cityrecodearr;

} 

 $wycitycode= array_unique($cityrecode,SORT_REGULAR ); //多维数组去重,需要加参数SORT_REGULAR

//城市编码循环开始

foreach ($wycitycode as $rowcode) { 
  //$hbarr[]='';

$APPCODE='C3B3F80C30724C72BB8AC2977EC37160';
   
  $HMACMD5='ywa0UqY2uqLULp1/ZEBH2G8St1u71fANXOovX0ll63ctDqxBWkmHKTUzoY7wVxL+7xUQqCxOBIqeST9CGmLtDQ==';
  $AES='bufB2aUrsiNCa41TJO8adw==';

//循环城市时再次获取新的head值与body值,避免时间差导致的错误开始
$provicecode='97';
$timestamp=date('Y-m-d H:i:s.B',time());
  
$chars = md5(uniqid(mt_rand(), true));
        $uuid = substr ( $chars, 0, 8 ) . '-'
            . substr ( $chars, 8, 4 ) . '-'
            . substr ( $chars, 12, 4 ) . '-'
            . substr ( $chars, 16, 4 ) . '-'
            . substr ( $chars, 20, 12 );
        $uuid=$prefix.$uuid;

$dataStr='appCode'.$APPCODE.'timestamp'.$timestamp."uuid".$uuid.$HMACMD5;
$sign=$this->sign($HMACMD5,$dataStr);

$head["sign"]=$sign;
$head["timestamp"]=$timestamp;
$head["uuid"]=$uuid;
//$body["provinceCode"]='34';
$body["provinceCode"]=$provicecode;

//循环城市时再次获取新的head值与body值,避免时间差导致的错误结束

$codecs=$rowcode['cscode'];
$cityname=$rowcode['cityname'];
//$body["cityCode"]="710";
$body["cityCode"]=$codecs;

//$body["goodsId"]="981609180703"; //测试商品
$body["goodsId"]="981610241535"; //goodsId参数有接口方提供
$body["qryType"]="02";
$body["searchCategory"]="3";
$body["searchType"]="02";
$body["searchValue"]="12";
$body["amounts"]="100";

$reqObj['head']=$head;
$reqObj['body']=$body;


$reqObj2=$this->encrypt(json_encode($reqObj),$AES); //需要对$reqObj使用json_encode才能使用ase加密方法,否则加密不成功,猜想是不是使用aes加密的数据只能是json格式

//var_dump($reqObj2);

$data_string["appCode"]=$APPCODE;
$data_string["reqObj"]=$reqObj2;
$data_string=json_encode($data_string); //这一步也需要转化为json格式,否则提示报文不符合规范。

//连续获取10次数据开始
for ($i=0; $i < 10; $i++) {  
  # code...

  $ch = curl_init();//初始化curl
 curl_setopt($ch, CURLOPT_URL,$Url);//抓取指定网页
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
  curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string)
)); 

       $result = curl_exec($ch);//运行curl 获取的此接口数据为json数据

        if (curl_errno($ch)) {
    print curl_error($ch);
}
        curl_close($ch);

       // echo $result;

   $arrnum= json_decode($result,true); //将json数据转化为数组
  
     //   var_dump($arrnum["body"]["numArray"]);
           $numarrs=$arrnum["body"]["numArray"];
           
        $numarr=array_chunk($numarrs,12,true);
            foreach($numarr as $rownum){

              $hbarr[]=array_values($rownum);
            }
      
  }
//连续获取10次数据结束
       

        $numatt['cityname']=$cityname;
        $numatt['numcitycode']=$codecs;
        $numatt['numinfo']=$hbarr;
       $numallar[]=$numatt;

 }




$json_ctystring = json_encode($numallar,JSON_UNESCAPED_UNICODE);
file_put_contents('static/numinfo/'.$provicecode.'.json', $json_ctystring);
      //var_dump($numallar[0]['numinfo']);
     // echo count(($numallar[0]['numinfo']));
 //城市编码循环结束    
 

//省份循环结束

}

//号码获取结束


}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中,可以使用json库来处理JSON格式的txt文件,并进行新旧接口数据的对比以输出行数。 首先,我们需要读取两个JSON格式的txt文件,并将其转换为Python对象。可以使用json.load()函数来实现这一步骤。假设文件名为old_data.txt和new_data.txt: ```python import json # 读取旧接口的数据 with open('old_data.txt', 'r') as old_file: old_data = json.load(old_file) # 读取新接口的数据 with open('new_data.txt', 'r') as new_file: new_data = json.load(new_file) ``` 接下来,我们可以比较两个数据的行数,并输出结果。可以使用len()函数来获取数据的行数: ```python # 获取接口数据的行数 old_rows = len(old_data) # 获取接口数据的行数 new_rows = len(new_data) # 输出结果 print("旧接口数据行数:", old_rows) print("新接口数据行数:", new_rows) ``` 以上代码将输出接口数据和新接口数据的行数。请注意,这里假设JSON格式的txt文件中的数据以行为单位进行存储。如果数据存储方式不同,比如以json数组形式存储,可能需要做相应的修改来适应不同的数据存储结构。 希望以上回答能对您有所帮助! ### 回答2: 要用Python进行json格式的txt文件的新旧接口数据对比并输出行数,可以按照以下步骤进行操作: 1. 读取旧的json格式的txt文件和新的json格式的txt文件,并将其分别存储在两个变量中。 2. 使用Python的json库将这两个变量解析为Python中的字典类型。 3. 定义一个整数类型的变量,用于存储行数的计数。 4. 循环遍历旧的接口数据中的每一行,对比新的接口数据中的每一行。 5. 如果发现某一行旧的接口数据与新的接口数据不一致,将行数计数器加1。 6. 循环结束后,输出行数计数器的值,即为新旧接口数据不一致的行数。 以下是一个示例代码: ```python import json def compare_json(filename_old, filename_new): with open(filename_old, 'r') as f_old: old_data = json.load(f_old) with open(filename_new, 'r') as f_new: new_data = json.load(f_new) count = 0 for old_row, new_row in zip(old_data, new_data): if old_row != new_row: count += 1 return count filename_old = 'old_data.json' # 旧的json格式的txt文件路径 filename_new = 'new_data.json' # 新的json格式的txt文件路径 result_count = compare_json(filename_old, filename_new) print('新旧接口数据不一致的行数为:', result_count) ``` 上面的代码中,'old_data.json'和'new_data.json'分别代表旧的json格式的txt文件和新的json格式的txt文件的路径。函数`compare_json`用于比较这两个文件的数据,并返回不一致的行数。最后输出结果即为新旧接口数据不一致的行数。 ### 回答3: 要使用Python对JSON格式的txt文件进行新旧接口数据的对比并输出行数,可以按照以下步骤进行: 1. 首先,导入所需的模块,例如`json`模块和`os`模块。 2. 使用`open()`函数打开新接口JSON文件并读取数据,将其保存为变量`new_data`。 3. 使用`open()`函数打开旧接口JSON文件并读取数据,将其保存为变量`old_data`。 4. 使用`json.loads()`函数将`new_data`和`old_data`转换为Python字典格式,分别保存为`new_dict`和`old_dict`。 5. 遍历`new_dict`的每一行数据,可以使用`len()`函数获取行数。 6. 遍历`old_dict`的每一行数据,同样可以使用`len()`函数获取行数。 7. 比较新旧接口的行数,可以使用条件语句进行判断。 8. 根据判断结果输出行数信息。 下面是一个示例代码: ```python import json import os # 打开新接口JSON文件并读取数据 with open('new_interface.json', 'r') as new_file: new_data = new_file.read() # 打开旧接口JSON文件并读取数据 with open('old_interface.json', 'r') as old_file: old_data = old_file.read() # 将数据转换为字典格式 new_dict = json.loads(new_data) old_dict = json.loads(old_data) # 获取接口数据的行数 new_rows = len(new_dict) # 获取接口数据的行数 old_rows = len(old_dict) # 比较新旧接口的行数并输出结果 if new_rows > old_rows: print("新接口数据行数多于旧接口数据,行数为:", new_rows) elif new_rows < old_rows: print("新接口数据行数少于旧接口数据,行数为:", old_rows) else: print("新接口数据行数与旧接口数据相同,行数为:", new_rows) ``` 这个示例代码假设了新旧接口JSON数据已经保存在`new_interface.json`和`old_interface.json`文件中。可以根据实际情况进行修改,确保文件路径和文件名的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值