PHP 天巡机票接口

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

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

演示网址:

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

时间: 2024-10-10 00:27:28

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

开发日记:接口开发设计

接口开发使用规则 业务术语: 请求:通过HTTP协议把需要传输的数据发送给接收方的过程. 返回:根据得到的数据处理完成后,将处理完成的结果反馈给接收方. 敏感词:带有敏感政治倾向,暴力倾向,不健康色彩或不文明的词. 特殊字符:特殊字符包括:^ | $ # 等. 操作结果:成功失败,成功返回结果,失败返回结果错误信息. 操作流程:执行之前,执行之后,正在执行. 接口编写规则: 1. 所有的接口必须包含method和version参数. 2. 所有的接口增加了版本号管理,以便适应多个不同版本客户端的

php webservice 接口 实例 机票航班时刻表

<?php header('Content-Type: text/html; charset=UTF-8'); $client = new SoapClient('http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl'); $fromcity=!empty($_POST['fromcity']) ? trim($_POST['fromcity']) : '长沙'; $tocity=!empty($_POST['

微信公众平台新增语义理解接口

微信公众平台语义理解接口正式对外开放.通过语义接口,接收用户发送的自然语言请求,让系统理解用户的说话内容. 微信语义理解接口提供从用户自然语言输入到结构化解析的技术实现,使用先进的自然语言处理技术给开发者提供一站式的语义解析方案.该平台覆盖多个垂直领域的语义场景,部分领域还可以支持取得最终的展示结果.开发者无需掌握语义理解及相关技术,只需根据自己的产品特点,选择相应的服务即可搭建一套智能语义服务.结合语音识别接口,通过微信语音识别得到用户的语音信息之后,经过语义分析理解,得到用户需求,及时回复用

(转)接口100

关键字:微信公众平台 微接口 接口100 API100 接口大全 作者:方倍工作室 在本文中,我们列出微信公众平台上可以使用的API接口以及举例如何在微信公众平台调用这些接口实现相应的功能. 接口调用说明:① Appkey请使用的微信公众号,不要使用默认的trailuser② 接口返回类型为文本.图文.及音乐三种基本消息③ 请在所有消息底部主动加上"技术支持 方倍工作室"④ JSON验证网址 http://pro.jsonlint.com/⑤ 接口将不定期增加或更新,欢迎指出错误⑥ 如

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

以前常用SoapUI来做接口的性能测试,这次用的Jmeter,对需由客户端根据时间戳等登录参数生成随机token值和印签值来发请求的系统,非它莫属了.下面就这次测试的难点和操作注意问题展开总结. **航空订票APP性能测试以接口压测为主,采用JMETER压测工具,结合NMON监控服务器资源.采用两台测试机,分布式并发压测,在500个并发,800个并发压力下,记录服务器资源的使用情况,并作分析. 1.脚本准备: 测试中,发送的请求体以JSON代码为主,且每个接口要求有token值和印签值(根据请求

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

公司有非常多手机app的项目.手机app又要常常訪问后台提交与查询数据. 所曾经端app与后台的开发与測试过程中接口调试是一个常常要做的工作. 而每当出现一个BUG,前端appproject师与后台project师往往要相互合作才干定位bug到底在那里.而非本项目的人往往还难以帮上忙(必需要读懂别人写的程序,等等的.开发们都懂的...) 所以自己利用了业余时间用js+hta的方式实现了一个简单的接口调试程序.能够由非开发者对比接口文档就能够进行接口的调试和測试. 下面是程序界面 这是一个机票程序

微信公众号开发API接口大全

在本文中,我们列出微信公众平台上可以使用的API接口以及举例如何在微信公众平台调用这些接口实现相应的功能. 接口调用说明: ① Appkey请使用的微信公众号,不要使用默认的trailuser ② 接口返回类型为文本.图文.及音乐三种基本消息 ③ 请在所有消息底部主动加上“技术支持 方倍工作室” ④ JSON验证网址 http://pro.jsonlint.com/ ⑤ 接口将不定期增加或更新,欢迎指出错误 ⑥ 如果有想要实现的,请在下面评论中列出并提供数据来源 ⑦ 提供的例子为天气.笑话.点歌

『Reprint』 复杂表单应用解耦,淘宝机票订单实践

背景 在web应用中,复杂表单这类web应用富交互元素多,业务逻辑复杂,犬牙交错,且需求变化频繁.及容易成为晦涩和幽暗之地,也经常是各种代码坏味道的来源.针对这种典型的复杂应用,本文以淘宝机票订单为例提出一种架构模式梳理和消化表单带来的复杂性. 模块和组件划分 解决复杂表单的的第一步,划分模块. 概念上,为了复用和解耦方便,应将模块按照功能的内聚程度进行划分.强相关,频繁沟通和交互的功能应该归为一个模块.模块间尽量不存在依赖关系.也就是常说的"高内聚,低耦合".如下图所示,淘宝机票订单

微信开发常用接口

在本文中,我们列出微信公众平台上可以使用的API接口以及举例如何在微信公众平台调用这些接口实现相应的功能. 接口调用说明: ① Appkey请使用的微信公众号,不要使用默认的trailuser ② 接口返回类型为文本.图文.及音乐三种基本消息 ③ 请在所有消息底部主动加上“技术支持 方倍工作室” ④ JSON验证网址 http://apix.sinaapp.com/json/ ⑤ 接口将不定期增加或更新,欢迎指出错误 ⑥ 如果有想要实现的,请在下面评论中列出并提供数据来源 ⑦ 提供的例子为天气.