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

搜索机票信息需要分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

PHP 天巡机票接口的更多相关文章

  1. 51book机票接口对接,吐血整理(含PHP封装代码)

    前言 最近在对接51book的机票接口,遇到了挺多坑,所以整理一份作为记录 机票有两个不同的接口,一个是机票,另一个是保险 一.申请 要接51book的机票,首先是要申请账号,这时候应该是有客户经理跟 ...

  2. C#开发微信门户及应用(31)--微信语义理解接口的实现和处理

    微信语义理解接口提供从用户自然语言输入到结构化解析的技术实现,使用先进的自然语言处理技术给开发者提供一站式的语义解析方案.该平台覆盖多个垂直领域的语义场景,部分领域还可以支持取得最终的展示结果.开发者 ...

  3. 关于一个每天请求50W次接口的设计实现过程

    从大学开始关注博客园,到工作之后注册了博客园账号,直至今日终于能够静下心来将自己个人的所学,所得,所悟能够分享出来与大家分享,好开心~ 言归正传,需求背景是博主所在的公司为一个在线OTA公司,客户端上 ...

  4. 火车车次查询-余票查询--Api接口

    1.来自12306的火车车次数据 使用12306网站的接口,查询余票.此接口采集自 这里. 全国火车站代号字典,下载 . 火车票余票查询 http://dynamic.12306.cn/otsquer ...

  5. 一个用js写的接口http调试程序

    公司有非常多手机app的项目.手机app又要常常訪问后台提交与查询数据. 所曾经端app与后台的开发与測试过程中接口调试是一个常常要做的工作. 而每当出现一个BUG,前端appproject师与后台p ...

  6. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...

  7. 巡风源码阅读与分析---view.py

    巡风xunfeng----巡风源码阅读与分析 巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果 ...

  8. 接口性能测试(Jmeter)操作总结

    以前常用SoapUI来做接口的性能测试,这次用的Jmeter,对需由客户端根据时间戳等登录参数生成随机token值和印签值来发请求的系统,非它莫属了.下面就这次测试的难点和操作注意问题展开总结. ** ...

  9. c#之字符串,列表,接口,队列,栈,多态

    1.字符串的用法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

随机推荐

  1. linux常用命令-文件处理命令

    ls -a -l -d -h -i mkdir [-p] 创建目录,-p递归创建目录 rmdir 删除一个空目录 cp [-r,-p] -r,拷贝目录,-p,保持属性,新文件的修改时间为源文件的修改时 ...

  2. Proj.4坐标系统创建参数

    Proj.4坐标系统创建参数 本文由乌合之众lym瞎编,欢迎转载blog.cnblogs.net/oloroso 本文原文地址(https://github.com/OSGeo/proj.4/wiki ...

  3. OpenVpn简单架设

    首先Wget wget http://swupdate.openvpn.org/as/openvpn-as-2.0.24-CentOS6.i386.rpm wget http://swupdate.o ...

  4. python des ecb 加密 demo

    # -*- coding:utf-8 -*- from pyDes import * def hexString2bytes(src): ret =[] for i in range(len(src) ...

  5. int main( int argc, char **argv)

    1.参数 (有时参数是void) argc是程序运行时参数个数 argv是存储参数的数组,可以用char* argv[],也可以用char **argv. 例如编译一个hello.c的程序 1 #in ...

  6. 时间戳与日期时间互转C语言

    /*  * ctime.h  *  *  Created on: May 19, 2016  *      Author: root  */   #ifndef CTIME_H_ #define CT ...

  7. GitHub使用心得

    PHP今天算是学习结束了;版本控制也了解很久了,比较熟悉的是svn,Git一直都不太熟,也可能是它是英文的缘故,感觉很费劲,所以用的不多,但不得不说,它功能真的很强大;今天试着和朋友用Git开发一个简 ...

  8. iOS-OC-基本控件之UIPageControl

    UIPageControl(页面控制器,就是桌面的那些小点点,每个点代表一个界面) 父类是 UIControl. iOS开发中常用的基本控件,主要和UIScrollView一起使用,比较常用的就是有些 ...

  9. 朴素贝叶斯算法的python实现

    朴素贝叶斯 算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件,那么 ...

  10. RocketMQ与kafka对比(18项差异)-转自阿里中间件

    淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kaf ...