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 ...
随机推荐
- 2.3属性在 ASP.NET Web API 2 路由
路由是 Web API 如何匹配 URI 的行动.Web API 2 支持一种新型的路由,称为属性路由.顾名思义,属性路由使用属性来定义路由.属性路由给你更多的控制 Uri 在您的 web API.例 ...
- BZOJ2982——combination
1.题意:求 C(n,m) % 10007 ,10007是质数咯 n和m < 2000000000 2.分析:这个东西太大了,显然不能用n!的阶乘预处理的方式搞出来,也不能用递推公式搞出来 于是 ...
- SVN版本库(访问权限)配置实例笔记
http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. ...
- HTTP响应消息中的状态代码
- JQuery 自动触发事件
JQuery 常用模拟 有时候,需要通过模拟用户操作,来达到单击的效果.例如在用户进入页面后,就触发click事件,而不需要用户去主动单击. 在JQuery中,可以使用trigger()方法完成模拟操 ...
- Python全栈开发【基础一】
Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...
- MyEclipse无法删除项目下的文件
想删除老版本的jar包或文件,却怎么也删不了, 总是提示Problems encountered while deleting resources. Could not delete 后来关闭myec ...
- Lamp搭建bugfree
1.下载bugfree安装包 2.将bugfree安装包解压到/home/wwwroot/default目录下 unzip bugfree.zip -d /home/wwwroot/default/ ...
- nuget packages batch install
d:\nuget\nuget.exe install EnterpriseLibrary.Common -NoCache -Verbosity detailed -OutputDirectory D: ...
- hdu分类 Dynamic Programming(这是一场漫长的旅途)
下面是difficulty 1的题 1003 Max Sum 最长递增子序列.非常经典,最棒的解法是在线算法O(n)的复杂度. 贴的呢,是用dp做的代码. 先是一个高亮的dp递推式,然后找到最大处 ...