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

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

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

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

上PHP代码,,THINKPHP框架代码

 <?php
namespace Home\Controller;
use Think\Controller; class FlyController extends \Home\Classes\ConfController {
public function index(){
$title = $this->title[1];
$keyword = $this->keyword[1];
$desc = $this->desc[1];
$title = str_replace('{lei_name}','机票',$title);
$title = str_replace('{site_name}',$this->site_name,$title);
$this->assign('title',$title);
$this->assign('keyword',$keyword);
$this->assign('desc',$desc);
$this->display();
}
public function piao(){
$post_data = I('post.');
// P($post_data);die;
$url = "http://partners.api.skyscanner.net/apiservices/pricing/v1.0";
// $url = "http://business.skyscanner.net/apiservices/pricing/v1.0";
$title = $this->title[1];
$keyword = $this->keyword[1];
$desc = $this->desc[1];
$title = str_replace('{lei_name}','机票',$title);
$title = str_replace('{site_name}',$this->site_name,$title);
$this->assign('title',$title);
$this->assign('keyword',$keyword);
$this->assign('desc',$desc);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
//print_r($output);
$sessions = between($output,'sg1/v1.0/','Content-Length');
//echo $sessions;
$this->assign('sessions',$sessions);
$this->assign('apikey',$post_data['apikey']);
// echo $sessions. '---'.$post_data['apikey'];
$u = U('home/fly/lun',array('b'=>$sessions,'k'=>$post_data['apikey'],'t'=>$post_data['types'],'h'=>$post_data['h']));
exit(json_encode(array('u'=>$u)));
//echo $u;
$this->assign('u',$u);
$this->assign('post_data',$post_data); $this->display('index');
} public function lun(){
$s = trim($_GET['b']);
$a = trim($_GET['k']);
$t = trim($_GET['t']);
$h = trim($_GET['h']);//h=1表示,第2次,搜索回程
$url = "http://partners.api.skyscanner.net/apiservices/pricing/v1.0/$s?apiKey=$a&mj=".time();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
$output = curl_exec($ch);
curl_close($ch);
///print_r($output);
file_put_contents('mp_'.$t.'.txt',$output);
$j_array = json_decode($output,true);
//往返
if ($t == 2)
{
$j = $this->_outhui($j_array) ;
}else{
$j = $this->_out($j_array) ;
} $jie['Status'] = $j_array['Status']; $total_price_ci = $j['total_price_ci']; unset($j['total_price_ci']);
//P($j); die;
if (count($j_array['Itineraries']) < 2)
{
$jie['g'] = 0;
} $this->assign('h',$h);
$this->assign('piao',$j);
$this->assign('total_price_ci',$total_price_ci); //往返
if ($t == 2)
{
$jie['html'] = $this->fetch('ji2');
}else{
$jie['html'] = $this->fetch('ji');
}
//
exit(json_encode($jie));
}
//单程测试
public function jt(){
$json = file_get_contents('mp_3.txt');
$output = json_decode($json,true); $j = $this->_out($output,0) ;
//循环 Legs $total_price_ci = $j['total_price_ci']; unset($j['total_price_ci']); $this->assign('piao',$j);
$this->assign('total_price_ci',$total_price_ci); $this->display();
}
//往返测试
public function jb(){
$json = file_get_contents('mp_1480656765.txt');
$output = json_decode($json,true); $j = $this->_outhui($output,0) ;
//循环 Legs $total_price_ci = $j['total_price_ci']; unset($j['total_price_ci']); $this->assign('piao',$j);
$this->assign('total_price_ci',$total_price_ci); $this->display();
}
public function showa(){
echo 'showa';
}
private function _outhui(&$output,$shu=1){
$j = array();
foreach($output['Itineraries'] as $v){
$tmp['qu']['id'] = $v['OutboundLegId'];
$tmp['hui']['id'] = $v['InboundLegId'];
$tmp['Itineraries'] = $v;
foreach($output['Legs'] as $va){
if ($va['Id'] == $tmp['qu']['id'])
{
$tmp['qu']['legs'] = $va;
}
if ($va['Id'] == $tmp['hui']['id'])
{
$tmp['hui']['legs'] = $va;
}
} foreach($output['Carriers'] as $vb ){
if ($tmp['qu']['legs']['Carriers']['0'] == $vb['Id'])
{
$tmp['qu']['Carriers'] = $vb;
}
if ($tmp['hui']['legs']['Carriers']['0'] == $vb['Id'])
{
$tmp['hui']['Carriers'] = $vb;
}
}
//出发地信息Places
foreach($output['Places'] as $vc){
if ($tmp['qu']['legs']['OriginStation'] == $vc['Id'])
{
$tmp['qu']['palce'] = $vc;
}
if ($tmp['hui']['legs']['OriginStation'] == $vc['Id'])
{
$tmp['hui']['palce'] = $vc;
}
}
//目的地信息Places
foreach($output['Places'] as $vb){
if ($tmp['qu']['legs']['DestinationStation'] == $vb['Id'])
{
$tmp['qu']['palce_b'] = $vb;
}
if ($tmp['hui']['legs']['DestinationStation'] == $vb['Id'])
{
$tmp['hui']['palce_b'] = $vb;
}
} foreach($tmp['Itineraries']['PricingOptions'] as &$vd){
foreach($output['Agents'] as $va){
if ($vd['Agents'][0] == $va['Id'])
{
$vd['lai'] = $va;
}
}
} $j[] = $tmp;
} $total_price_ci = 0;
foreach($j as &$v){
$total_price_ci += count($v['Itineraries']['PricingOptions']);
}
//P($j);
$j['total_price_ci'] = $total_price_ci ;
return $j;
}
private function _out(&$output,$shu=2){
$j = array();
foreach($output['Legs'] as $v){
$tmp['legs'] = $v;
//循环查找 Carriers
foreach($output['Carriers'] as $va){
if ($v['Carriers']['0'] == $va['Id'])
{
$tmp['Carriers'] = $va;
}
} //循环查找 Itineraries
foreach($output['Itineraries'] as $vi){
if ($v['Id'] == $vi['OutboundLegId'])
{
$tmp['Itineraries'] = $vi;
}
} //出发地信息Places
foreach($output['Places'] as $va){
if ($v['OriginStation'] == $va['Id'])
{
$tmp['from'] = $va;
}
}
//目的地信息Places
foreach($output['Places'] as $vb){
if ($v['DestinationStation'] == $vb['Id'])
{
$tmp['to'] = $vb;
}
} if (count($tmp['Itineraries']['PricingOptions']) > $shu)
{
$j[]= $tmp;
} } $total_price_ci = 0;
foreach($j as &$v){
$total_price_ci += count($v['Itineraries']['PricingOptions']);
foreach($v['Itineraries']['PricingOptions'] as &$vb){
foreach($output['Agents'] as $va){
if ($vb['Agents'][0] == $va['Id'])
{
$vb['lai'] = $va;
}
}
}
}
//P($j);
$j['total_price_ci'] = $total_price_ci ;
return $j;
}
}

演示网址:

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

04-28 10:34