因為在暑假的某一天,
"突然"想去韓國自由行玩個一個禮拜,
不過因為決定的有點突然,
只剩不到一個月左右,
機票便宜的都訂光了,
只剩下貴兩三倍的機票,
於是我們就去找旅行社幫忙,
結果旅行社只能幫我們查詢,
某天去的班機和某天回來的班機,而且還要某家航空公司
而不能"全部"查詢,只能要我們慢慢手動一個一個點...
...這...並非人力所及
幾十個航班,加上20天內都有空,只要玩個5~6天,在加上每天都會有機位新釋出
意思是說每天都要點個(保守估計)20航班 x 15天的去回=300up次 (一次可以查去回)
每次查詢還要十幾秒鐘的時間...
相信很多人都有此困擾 = =
因此最後決定動用"程式"的力量︿︿
(最一開始我是想說應該有人已經有寫出來了,
不過簡單google一下,也沒有發現,最後只好自己動手了)
由程式來解決問題...
最後的機票是找到比最便宜貴約1.3倍的價錢(手動的話...大概這次出國就要放棄了)
(不過結果證實,下次要出國還是要趁早決定)
==============================
==============================
進入正題
是使用php+curl的方法,在這裡只有把curl的方法列出來
至於文字拆解就不詳述(而curl的目標,就是某旅行公司...)
(實際上測試了3家旅行業者,找一個最簡單的列出來)
===============================
//第一步,取得所有適合的班機
$ch = curl_init();
$url = "http://www.eztravel.com.tw/ezec/freefit/ec_fit_main_query.jsp?city_from=TPE&city_to=SEL&ticket_type=R&service_type=4&ticket_class_section=2&international_cd=&searchBegDate=20110811&priceRange=0,12000&wt_search=fit2";
//這個url是先去他的網站查詢適合班機的結果,也可以自己改數值
//例如 priceRange=0,12000 就是0元到12000元 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
//模擬由你的瀏覽器進入,在這個旅行網站好像不需要(有點忘了),不過另某家需要
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_REFERER, "http://www.eztravel.com.tw/");
//這行最重要,是這旅遊網站認證的地方,沒有的話會無法取得資料
$result = curl_exec($ch);
//第二步,查詢機位
//這邊是設定給網站查詢的設定值(最好都不要少)
//至於取得方法,可以看最後表單的輸出結果
//也可以用google chrome右鍵檢查元素也可以得到
//而value,基本上是從你剛剛取得所有適合的航班的頁面可以取得
$tmp = 'prod_no:'.$prod_no.'
beg_date:'.$beg_date.'
end_date:'.$end_date.'
tkt_type:'.$tkt_type.'
ticket_type:'.$ticket_type.'
arg:1
arg:'.$prod_no.'
arg:20040815
arg:1
arg:TPE
arg:TPE
arg:2
hOpenChk:
bookYn:'.$bookYn.'
goPeople:'.$buyNum.'
Choice1:'.$buyNum.'
kind:'.$prod_no.','.$beg_date.','.$end_date.',1
Choice1:0
kind:'.$prod_no.','.$beg_date.','.$end_date.',3
Choice:'.$buyNum.'
Choice:0
h_checkInDateT:
checkInDateT:'.$checkInDate.'
f_checkin_date2:
checkOutDateT:'.$checkOutDate;
//echo $tmp;
$tmp = str_replace(":","=",$tmp);
$tmp = str_replace('
',"&",$tmp);
$post_login = $tmp;
$ch = curl_init();
$url = "http://www.eztravel.com.tw/ezec/freefit/ec_fit_flypath_searching.jsp";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//如果跳頁,跟的跳,這網站好像不會用到
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_login);//給予參數設定值
curl_setopt($ch, CURLOPT_REFERER, "http://www.eztravel.com.tw/ezec/freefit/ec_fit_date_query.jsp");
//這行這網站會驗證
$result = curl_exec($ch);
return $result;
//result 就是結果摟!!就是這樣
===============程式碼 END==============
最後的執行結果是存在mysql裡面,方便查詢
最後的結果(候補沒顯示)
沒有留言:
張貼留言