一个旅游网站项目,网站需要机票预订接入了天巡机票接口,获取机票信息,不搞不知道,一搞吓一跳比较麻烦。
搜索机票信息需要分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