PHP 天巡机票接口
一个旅游网站项目,网站需要机票预订接入了天巡机票接口,获取机票信息,不搞不知道,一搞吓一跳比较麻烦。
搜索机票信息需要分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 天巡机票接口的更多相关文章
- 51book机票接口对接,吐血整理(含PHP封装代码)
前言 最近在对接51book的机票接口,遇到了挺多坑,所以整理一份作为记录 机票有两个不同的接口,一个是机票,另一个是保险 一.申请 要接51book的机票,首先是要申请账号,这时候应该是有客户经理跟 ...
- C#开发微信门户及应用(31)--微信语义理解接口的实现和处理
微信语义理解接口提供从用户自然语言输入到结构化解析的技术实现,使用先进的自然语言处理技术给开发者提供一站式的语义解析方案.该平台覆盖多个垂直领域的语义场景,部分领域还可以支持取得最终的展示结果.开发者 ...
- 关于一个每天请求50W次接口的设计实现过程
从大学开始关注博客园,到工作之后注册了博客园账号,直至今日终于能够静下心来将自己个人的所学,所得,所悟能够分享出来与大家分享,好开心~ 言归正传,需求背景是博主所在的公司为一个在线OTA公司,客户端上 ...
- 火车车次查询-余票查询--Api接口
1.来自12306的火车车次数据 使用12306网站的接口,查询余票.此接口采集自 这里. 全国火车站代号字典,下载 . 火车票余票查询 http://dynamic.12306.cn/otsquer ...
- 一个用js写的接口http调试程序
公司有非常多手机app的项目.手机app又要常常訪问后台提交与查询数据. 所曾经端app与后台的开发与測试过程中接口调试是一个常常要做的工作. 而每当出现一个BUG,前端appproject师与后台p ...
- IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...
- 巡风源码阅读与分析---view.py
巡风xunfeng----巡风源码阅读与分析 巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果 ...
- 接口性能测试(Jmeter)操作总结
以前常用SoapUI来做接口的性能测试,这次用的Jmeter,对需由客户端根据时间戳等登录参数生成随机token值和印签值来发请求的系统,非它莫属了.下面就这次测试的难点和操作注意问题展开总结. ** ...
- c#之字符串,列表,接口,队列,栈,多态
1.字符串的用法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
随机推荐
- 【Alpha版本】冲刺阶段——Day 2
我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...
- [BZOJ2391]Cirno的忧郁
[BZOJ2391]Cirno的忧郁 试题描述 Cirno闲着无事的时候喜欢冰冻青蛙. Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有 ...
- 介绍一个非常好用的跨平台C++开源框架:openFrameworks
介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...
- Hibernate参数一览表
参考文章地址:http://www.blogjava.net/i369/articles/194855.html Hibernate 参数设置一览表 属性名 用途 hibernate.dialect ...
- 耿丹CS16-2班第一次作业汇总
第一次作业统计完成. 注:1.作业顺序:取最早交作业的前3名,依次拿5,2,1分,前提是作业质量较高,否则轮至下一名同学得分,其余同学得0分:2.作业情况:满10分,空一题扣2分,心得写得好的有额外加 ...
- uoj228 基础数据结构练习题
趁别人题解没有放出来赶快写一篇 整数序列,操作 区间加 区间变成sqrt(下取整) 区间和 考虑一下对于每个区间里所有sqrt不同的段操作,那么可以在O(段数logn)一次的时间内完成sqrt操作.考 ...
- WIN7下VS2008生成Detours3.0
Detours是微软开发的一个函数库,可用于捕获系统API.在用其进行程序开发之前,得做一些准备工作: 一.下载Detours 在http://research.microsoft.com ...
- tp5 中 model 的更新方法
// 过滤非数据表字段更新 public function update(Request $request){ $user = model('User'); $result = $user -> ...
- dataset 修改小数点位数
#region dataset过滤器(修改小数点位数)导出使用 public DataSet ChangeDataSetValue(DataSet dataset) { foreach (DataTa ...
- css笔记1: html页面的CSS、DIV命名规则
原地址:http://www.cnblogs.com/rising-fay/archive/2013/02/25/2932592.html CSS命名规则 头:header 内容:content/co ...