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

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

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

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

上PHP代码,,THINKPHP框架代码

  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4.  
  5. class FlyController extends \Home\Classes\ConfController {
  6. public function index(){
  7. $title = $this->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. $jie['Status'] = $j_array['Status'];
  77.  
  78. $total_price_ci = $j['total_price_ci'];
  79.  
  80. unset($j['total_price_ci']);
  81. //P($j); die;
  82. if (count($j_array['Itineraries']) < 2)
  83. {
  84. $jie['g'] = 0;
  85. }
  86.  
  87. $this->assign('h',$h);
  88. $this->assign('piao',$j);
  89. $this->assign('total_price_ci',$total_price_ci);
  90.  
  91. //往返
  92. if ($t == 2)
  93. {
  94. $jie['html'] = $this->fetch('ji2');
  95. }else{
  96. $jie['html'] = $this->fetch('ji');
  97. }
  98. //
  99. exit(json_encode($jie));
  100. }
  101. //单程测试
  102. public function jt(){
  103. $json = file_get_contents('mp_3.txt');
  104. $output = json_decode($json,true);
  105.  
  106. $j = $this->_out($output,0) ;
  107. //循环 Legs
  108.  
  109. $total_price_ci = $j['total_price_ci'];
  110.  
  111. unset($j['total_price_ci']);
  112.  
  113. $this->assign('piao',$j);
  114. $this->assign('total_price_ci',$total_price_ci);
  115.  
  116. $this->display();
  117. }
  118. //往返测试
  119. public function jb(){
  120. $json = file_get_contents('mp_1480656765.txt');
  121. $output = json_decode($json,true);
  122.  
  123. $j = $this->_outhui($output,0) ;
  124. //循环 Legs
  125.  
  126. $total_price_ci = $j['total_price_ci'];
  127.  
  128. unset($j['total_price_ci']);
  129.  
  130. $this->assign('piao',$j);
  131. $this->assign('total_price_ci',$total_price_ci);
  132.  
  133. $this->display();
  134. }
  135. public function showa(){
  136. echo 'showa';
  137. }
  138. private function _outhui(&$output,$shu=1){
  139. $j = array();
  140. foreach($output['Itineraries'] as $v){
  141. $tmp['qu']['id'] = $v['OutboundLegId'];
  142. $tmp['hui']['id'] = $v['InboundLegId'];
  143. $tmp['Itineraries'] = $v;
  144. foreach($output['Legs'] as $va){
  145. if ($va['Id'] == $tmp['qu']['id'])
  146. {
  147. $tmp['qu']['legs'] = $va;
  148. }
  149. if ($va['Id'] == $tmp['hui']['id'])
  150. {
  151. $tmp['hui']['legs'] = $va;
  152. }
  153. }
  154.  
  155. foreach($output['Carriers'] as $vb ){
  156. if ($tmp['qu']['legs']['Carriers']['0'] == $vb['Id'])
  157. {
  158. $tmp['qu']['Carriers'] = $vb;
  159. }
  160. if ($tmp['hui']['legs']['Carriers']['0'] == $vb['Id'])
  161. {
  162. $tmp['hui']['Carriers'] = $vb;
  163. }
  164. }
  165. //出发地信息Places
  166. foreach($output['Places'] as $vc){
  167. if ($tmp['qu']['legs']['OriginStation'] == $vc['Id'])
  168. {
  169. $tmp['qu']['palce'] = $vc;
  170. }
  171. if ($tmp['hui']['legs']['OriginStation'] == $vc['Id'])
  172. {
  173. $tmp['hui']['palce'] = $vc;
  174. }
  175. }
  176. //目的地信息Places
  177. foreach($output['Places'] as $vb){
  178. if ($tmp['qu']['legs']['DestinationStation'] == $vb['Id'])
  179. {
  180. $tmp['qu']['palce_b'] = $vb;
  181. }
  182. if ($tmp['hui']['legs']['DestinationStation'] == $vb['Id'])
  183. {
  184. $tmp['hui']['palce_b'] = $vb;
  185. }
  186. }
  187.  
  188. foreach($tmp['Itineraries']['PricingOptions'] as &$vd){
  189. foreach($output['Agents'] as $va){
  190. if ($vd['Agents'][0] == $va['Id'])
  191. {
  192. $vd['lai'] = $va;
  193. }
  194. }
  195. }
  196.  
  197. $j[] = $tmp;
  198. }
  199.  
  200. $total_price_ci = 0;
  201. foreach($j as &$v){
  202. $total_price_ci += count($v['Itineraries']['PricingOptions']);
  203. }
  204. //P($j);
  205. $j['total_price_ci'] = $total_price_ci ;
  206. return $j;
  207. }
  208. private function _out(&$output,$shu=2){
  209. $j = array();
  210. foreach($output['Legs'] as $v){
  211. $tmp['legs'] = $v;
  212. //循环查找 Carriers
  213. foreach($output['Carriers'] as $va){
  214. if ($v['Carriers']['0'] == $va['Id'])
  215. {
  216. $tmp['Carriers'] = $va;
  217. }
  218. }
  219.  
  220. //循环查找 Itineraries
  221. foreach($output['Itineraries'] as $vi){
  222. if ($v['Id'] == $vi['OutboundLegId'])
  223. {
  224. $tmp['Itineraries'] = $vi;
  225. }
  226. }
  227.  
  228. //出发地信息Places
  229. foreach($output['Places'] as $va){
  230. if ($v['OriginStation'] == $va['Id'])
  231. {
  232. $tmp['from'] = $va;
  233. }
  234. }
  235. //目的地信息Places
  236. foreach($output['Places'] as $vb){
  237. if ($v['DestinationStation'] == $vb['Id'])
  238. {
  239. $tmp['to'] = $vb;
  240. }
  241. }
  242.  
  243. if (count($tmp['Itineraries']['PricingOptions']) > $shu)
  244. {
  245. $j[]= $tmp;
  246. }
  247.  
  248. }
  249.  
  250. $total_price_ci = 0;
  251. foreach($j as &$v){
  252. $total_price_ci += count($v['Itineraries']['PricingOptions']);
  253. foreach($v['Itineraries']['PricingOptions'] as &$vb){
  254. foreach($output['Agents'] as $va){
  255. if ($vb['Agents'][0] == $va['Id'])
  256. {
  257. $vb['lai'] = $va;
  258. }
  259. }
  260. }
  261. }
  262. //P($j);
  263. $j['total_price_ci'] = $total_price_ci ;
  264. return $j;
  265. }
  266. }

演示网址:

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. 向Maven的本地库中添加jar文件

    有时我们要用的 maven 依赖项在官方repo库中找不到,然而我们从其他渠道获得了依赖项中的所有jar文件,本文记录了如何向本地库添加jar文件. 从复杂到简单,有三种方法: 使用 maven 的仓 ...

  2. Python爬虫Scrapy框架入门(0)

    想学习爬虫,又想了解python语言,有个python高手推荐我看看scrapy. scrapy是一个python爬虫框架,据说很灵活,网上介绍该框架的信息很多,此处不再赘述.专心记录我自己遇到的问题 ...

  3. 局部加权回归、欠拟合、过拟合(Locally Weighted Linear Regression、Underfitting、Overfitting)

    欠拟合.过拟合 如下图中三个拟合模型.第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大.如图中第二个模型,如果我们在线性模型上加一个新特征项,拟合结果就会好一些.图中第三个是一个包含5阶多 ...

  4. Linux yum配置文件详解

    说明:经过网上抄袭和自己的总结加实验,非常详细,可留作参考. yum的配置一般有两种方式:   一种是直接配置/etc目录下的yum.conf文件, 另外一种是在/etc/yum.repos.d目录下 ...

  5. [C++][数据结构][算法]单链式结构的深拷贝

    深拷贝(deep-copy),区别于浅拷贝,表示复制所有数据,而不是像浅拷贝一般只复制指针.深拷贝的数据不会因原始数据被delete后而消失. 单链式结构可以实现单链表,栈,队列,树等数据结构.掌握了 ...

  6. C++ 数字转换为string类型

    经常需要循环读入多组序号的图像,需要将int转换为string,简单的函数代码如下: #include <sstream>#include <string> string In ...

  7. 利用WCF创建简单的RESTFul Service

    1):用VS2013创建一个WCF的工程,如下图所示: 2):我们来看一下默认状态下的config文件内容,这里的内容我们会再后续的步骤中进行修改 <?xml version="1.0 ...

  8. HDU 5769 Substring 后缀数组

    Substring Problem Description ?? is practicing his program skill, and now he is given a string, he h ...

  9. 在SQL SERVER中实现RSA加解密函数(第一版)

    /*************************************************** 作者:herowang(让你望见影子的墙) 日期:2010.1.1 注:   转载请保留此信息 ...

  10. UML学习(一)-----用例图

    1.什么是用例图 用例图源于Jacobson的OOSE方法,用例图是需求分析的产物,描述了系统的参与者与系统进行交互的功能,是参与者所能观察和使用到的系统功能的模型图.它的主要目的就是帮助开发团队以一 ...