最終效果圖:
樣式丑哭了,我畢竟不是前端,宗旨就是練練手,體驗微信小程序的開發(fā),以最直接的方式獲取12306數(shù)據(jù)查詢火車票。
目錄結(jié)構(gòu):
search1是出發(fā)站列表,search2是目的站列表,命名沒有太好好想。
車站信息
12306查詢頁面,打開瀏覽器開發(fā)者工具分析請求,發(fā)現(xiàn)各個車站的信息都在這個JS文件中:
當(dāng)然車站的信息會發(fā)生變動,所以最好的方式就是抓取數(shù)據(jù),我現(xiàn)在為了方便,直接把數(shù)據(jù)拷貝過來,就是一大堆字符串:
通過正則截取出目前項目需要的兩個東西,如:北京北 VAP
在search1.js和search2.js中各自放了這個字符串,本想按照data:{}的方式放在app.js中,可是取不到,這個該如何實現(xiàn)?
請求信息
12306查詢頁面,點擊查詢按鈕的時候,它會發(fā)送兩個請求:
第一個是日志請求,這里不需要,它有什么作用12306知道
第二個才是我們需要的,拷貝它的請求地址,構(gòu)建我們程序的請求
url中最后的queryC,之前是query的,可能過段時間變?yōu)閝ueryD、query0...
又一個變化的地方,也可以說處處皆會變化,畢竟12306不是自己做的,無法掌控,
所以最好還是抓取數(shù)據(jù)的方式來做,我現(xiàn)在方便直接寫死了。
leftTicketDTO.train_date 日期,格式:2016-10-13
leftTicketDTO.from_station 出發(fā)站編碼,上面那堆車站信息中的,北京北為VAP
leftTicketDTO.to_station 目的站編碼,同上
purpose_codes 普通(ADULT)或?qū)W生(0X00)
響應(yīng)信息
參數(shù)錯誤或沒給全返回的JSON:{"status":false,"c_url":"leftTicket/queryC","c_name":"CLeftTicketUrl"}
一般正常的格式為:
要是提交的是昨天的日期,則messages中會有消息,但status和httpstatus仍然為true和200。
于是乎對返回結(jié)果有了如下判斷:
展示信息
先看看data中的有什么東東:
用到的參數(shù),能夠確認(rèn)其作用的:
車次 station_train_code
始發(fā)站 start_station_name
終點站 end_station_name
出發(fā)站 from_station_name
目的站 to_station_name
出發(fā)時間 start_time
目的時間 arrive_time
歷時時間 lishi
商務(wù)座 swz_num
一等座 zy_num
二等座 ze_num
軟臥 rw_num
硬臥 yw_num
軟座 rz_num
硬座 yz_num
無座 wz_num
特等座 tz_num
gr_num和qt_num,猜測為高級軟臥和其他,gg_num和yb_num就實在想不到了。
需要注意的是,座位的票數(shù)超過某個數(shù)的返回值是“有”,而低于則返回的是數(shù)字,所以在顯示數(shù)據(jù)列表之前還得處理下。
在寫程序的時候我發(fā)現(xiàn)我有挺多想法想寫出來的,可到真正要寫博客的時候卻想不出要寫什么了,悲哀!日后想到在補充吧。
附上源碼:http://pan.baidu.com/s/1hrKWRac
或者直接下載:TrainTicket.rar