博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 天巡机票接口
阅读量:5051 次
发布时间:2019-06-12

本文共 6868 字,大约阅读时间需要 22 分钟。

一个旅游网站项目,网站需要机票预订接入了天巡机票接口,获取机票信息,不搞不知道,一搞吓一跳比较麻烦。

搜索机票信息需要分2步,首先POST获得一个SESSION,2秒之后,根据这个SESSION,从一个URL GET 数据 ,并且需要多次GET,这里就用AJXA轮询,

直到返回的GET数据状态为 完成,即可停止轮询。

轮询获取数据之后,还需要自己整理才可显示在网页上,

上PHP代码,,THINKPHP框架代码

1 
title[1]; 8 $keyword = $this->keyword[1]; 9 $desc = $this->desc[1]; 10 $title = str_replace('{lei_name}','机票',$title); 11 $title = str_replace('{site_name}',$this->site_name,$title); 12 $this->assign('title',$title); 13 $this->assign('keyword',$keyword); 14 $this->assign('desc',$desc); 15 $this->display(); 16 } 17 public function piao(){ 18 $post_data = I('post.'); 19 // P($post_data);die; 20 $url = "http://partners.api.skyscanner.net/apiservices/pricing/v1.0"; 21 // $url = "http://business.skyscanner.net/apiservices/pricing/v1.0"; 22 $title = $this->title[1]; 23 $keyword = $this->keyword[1]; 24 $desc = $this->desc[1]; 25 $title = str_replace('{lei_name}','机票',$title); 26 $title = str_replace('{site_name}',$this->site_name,$title); 27 $this->assign('title',$title); 28 $this->assign('keyword',$keyword); 29 $this->assign('desc',$desc); 30 $ch = curl_init(); 31 curl_setopt($ch, CURLOPT_URL, $url); 32 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 33 curl_setopt($ch, CURLOPT_POST, 1); 34 curl_setopt($ch, CURLOPT_HEADER, true); 35 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 36 $output = curl_exec($ch); 37 curl_close($ch); 38 //print_r($output); 39 $sessions = between($output,'sg1/v1.0/','Content-Length'); 40 //echo $sessions; 41 $this->assign('sessions',$sessions); 42 $this->assign('apikey',$post_data['apikey']); 43 // echo $sessions. '---'.$post_data['apikey']; 44 $u = U('home/fly/lun',array('b'=>$sessions,'k'=>$post_data['apikey'],'t'=>$post_data['types'],'h'=>$post_data['h'])); 45 exit(json_encode(array('u'=>$u))); 46 //echo $u; 47 $this->assign('u',$u); 48 $this->assign('post_data',$post_data); 49 50 $this->display('index'); 51 } 52 53 public function lun(){ 54 $s = trim($_GET['b']); 55 $a = trim($_GET['k']); 56 $t = trim($_GET['t']); 57 $h = trim($_GET['h']);//h=1表示,第2次,搜索回程 58 $url = "http://partners.api.skyscanner.net/apiservices/pricing/v1.0/$s?apiKey=$a&mj=".time(); 59 $ch = curl_init(); 60 curl_setopt($ch, CURLOPT_URL, $url); 61 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 62 curl_setopt($ch, CURLOPT_HEADER, false); 63 $output = curl_exec($ch); 64 curl_close($ch); 65 ///print_r($output); 66 file_put_contents('mp_'.$t.'.txt',$output); 67 $j_array = json_decode($output,true); 68 //往返 69 if ($t == 2) 70 { 71 $j = $this->_outhui($j_array) ; 72 }else{ 73 $j = $this->_out($j_array) ; 74 } 75 76 77 78 $jie['Status'] = $j_array['Status']; 79 80 81 $total_price_ci = $j['total_price_ci']; 82 83 unset($j['total_price_ci']); 84 //P($j); die; 85 if (count($j_array['Itineraries']) < 2) 86 { 87 $jie['g'] = 0; 88 } 89 90 $this->assign('h',$h); 91 $this->assign('piao',$j); 92 $this->assign('total_price_ci',$total_price_ci); 93 94 //往返 95 if ($t == 2) 96 { 97 $jie['html'] = $this->fetch('ji2'); 98 }else{ 99 $jie['html'] = $this->fetch('ji');100 } 101 //102 exit(json_encode($jie));103 } 104 //单程测试105 public function jt(){106 $json = file_get_contents('mp_3.txt');107 $output = json_decode($json,true); 108 109 $j = $this->_out($output,0) ;110 //循环 Legs111 112 $total_price_ci = $j['total_price_ci'];113 114 unset($j['total_price_ci']);115 116 $this->assign('piao',$j);117 $this->assign('total_price_ci',$total_price_ci);118 119 $this->display(); 120 } 121 //往返测试122 public function jb(){123 $json = file_get_contents('mp_1480656765.txt');124 $output = json_decode($json,true); 125 126 $j = $this->_outhui($output,0) ;127 //循环 Legs128 129 $total_price_ci = $j['total_price_ci'];130 131 unset($j['total_price_ci']);132 133 $this->assign('piao',$j);134 $this->assign('total_price_ci',$total_price_ci);135 136 $this->display(); 137 } 138 public function showa(){139 echo 'showa';140 }141 private function _outhui(&$output,$shu=1){142 $j = array();143 foreach($output['Itineraries'] as $v){144 $tmp['qu']['id'] = $v['OutboundLegId'];145 $tmp['hui']['id'] = $v['InboundLegId'];146 $tmp['Itineraries'] = $v;147 foreach($output['Legs'] as $va){148 if ($va['Id'] == $tmp['qu']['id'])149 {150 $tmp['qu']['legs'] = $va;151 }152 if ($va['Id'] == $tmp['hui']['id'])153 {154 $tmp['hui']['legs'] = $va;155 } 156 }157 158 foreach($output['Carriers'] as $vb ){159 if ($tmp['qu']['legs']['Carriers']['0'] == $vb['Id'])160 {161 $tmp['qu']['Carriers'] = $vb;162 } 163 if ($tmp['hui']['legs']['Carriers']['0'] == $vb['Id'])164 {165 $tmp['hui']['Carriers'] = $vb;166 } 167 }168 //出发地信息Places169 foreach($output['Places'] as $vc){170 if ($tmp['qu']['legs']['OriginStation'] == $vc['Id'])171 {172 $tmp['qu']['palce'] = $vc;173 } 174 if ($tmp['hui']['legs']['OriginStation'] == $vc['Id'])175 {176 $tmp['hui']['palce'] = $vc;177 } 178 }179 //目的地信息Places180 foreach($output['Places'] as $vb){181 if ($tmp['qu']['legs']['DestinationStation'] == $vb['Id'])182 {183 $tmp['qu']['palce_b'] = $vb;184 } 185 if ($tmp['hui']['legs']['DestinationStation'] == $vb['Id'])186 {187 $tmp['hui']['palce_b'] = $vb;188 } 189 } 190 191 foreach($tmp['Itineraries']['PricingOptions'] as &$vd){192 foreach($output['Agents'] as $va){193 if ($vd['Agents'][0] == $va['Id'])194 {195 $vd['lai'] = $va;196 }197 } 198 } 199 200 $j[] = $tmp;201 }202 203 $total_price_ci = 0;204 foreach($j as &$v){205 $total_price_ci += count($v['Itineraries']['PricingOptions']);206 }207 //P($j);208 $j['total_price_ci'] = $total_price_ci ; 209 return $j;210 }211 private function _out(&$output,$shu=2){212 $j = array();213 foreach($output['Legs'] as $v){214 $tmp['legs'] = $v;215 //循环查找 Carriers216 foreach($output['Carriers'] as $va){217 if ($v['Carriers']['0'] == $va['Id'])218 {219 $tmp['Carriers'] = $va;220 } 221 } 222 223 //循环查找 Itineraries224 foreach($output['Itineraries'] as $vi){225 if ($v['Id'] == $vi['OutboundLegId'])226 {227 $tmp['Itineraries'] = $vi;228 } 229 }230 231 //出发地信息Places232 foreach($output['Places'] as $va){233 if ($v['OriginStation'] == $va['Id'])234 {235 $tmp['from'] = $va;236 } 237 }238 //目的地信息Places239 foreach($output['Places'] as $vb){240 if ($v['DestinationStation'] == $vb['Id'])241 {242 $tmp['to'] = $vb;243 } 244 }245 246 if (count($tmp['Itineraries']['PricingOptions']) > $shu)247 {248 $j[]= $tmp;249 }250 251 252 }253 254 $total_price_ci = 0;255 foreach($j as &$v){256 $total_price_ci += count($v['Itineraries']['PricingOptions']);257 foreach($v['Itineraries']['PricingOptions'] as &$vb){258 foreach($output['Agents'] as $va){259 if ($vb['Agents'][0] == $va['Id'])260 {261 $vb['lai'] = $va;262 }263 } 264 }265 }266 //P($j);267 $j['total_price_ci'] = $total_price_ci ; 268 return $j;269 }270 }

 

演示网址:

http://lv.226660.pw/index.php/fly/index.html

转载于:https://www.cnblogs.com/fuyifan/p/6219181.html

你可能感兴趣的文章
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>
图解算法时间复杂度
查看>>
UI_搭建MVC
查看>>
一个样例看清楚JQuery子元素选择器children()和find()的差别
查看>>
代码实现导航栏分割线
查看>>
Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...
查看>>
VS 2010打开设计器出现错误
查看>>
SQLServer 镜像功能完全实现
查看>>
Vue-详解设置路由导航的两种方法
查看>>
一个mysql主从复制的配置案例
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
dvwa网络渗透测试环境的搭建
查看>>
Win8 安装VS2012 和 Sql Server失败问题
查看>>
过点(2,4)作一直线在第一象限与两轴围成三角形,问三角形面积的最小值?...
查看>>
java aes CBC的填充方式发现
查看>>
使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法
查看>>
BZOJ 2338 HNOI2011 数矩形 计算几何
查看>>