這時Boss過來了,通知你周末陪他出趟差,去北京。
讓你現在給查查看還有哪些票?
只見你不緊不慢的打開一個命令行終端,有條不紊的敲入:
[code]./fetch_sh-bj.sh 2016-05-14在Boss還沒反應過來時,悠然自得的將電腦屏幕轉過去,氣定神閒的說,“老大,周末從上海到北京的還有這些車次,每行最後3個數分別是二等座,一等座和商務座的剩余票數,我們訂哪趟車?”
[code]cyf@cyf$./fetch_sh-bj.sh 2016-05-14 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 17684 100 17684 0 0 157k 0 --:--:-- --:--:-- --:--:-- 181k G142 上海虹橋 北京南 14:21 20:18 無 16 7 G144 上海虹橋 北京南 14:32 20:29 無 無 1 G18 上海虹橋 北京南 15:00 19:55 無 38 3 G146 上海虹橋 北京南 15:05 20:50 無 60 10 G148 上海虹橋 北京南 15:34 21:12 54 120 16 G20 上海虹橋 北京南 16:00 21:17 193 119 16 G150 上海虹橋 北京南 16:05 21:47 321 90 13 G152 上海虹橋 北京南 16:20 21:52 560 91 21 G22 上海虹橋 北京南 17:00 22:24 221 6 無 G154 上海虹橋 北京南 17:14 22:40 612 103 22 G156 上海虹橋 北京南 17:19 22:52 258 19 9 G44 杭州東 北京南 17:24 23:01 187 109 21 G158 上海虹橋 北京南 17:34 23:19 552 99 24 G160 上海虹橋 北京南 17:39 23:27 499 92 20 T110 上海 北京 17:49 09:25 -- -- -- D322 上海 北京南 19:53 07:39 4 -- -- D314 上海 北京南 21:12 08:56 1 -- --有沒有覺得這個很酷!
逼格是不是很高!
是不是應該get這項新技能!
那麼問題來了?
如果boss不是出差去北京,而是去深圳或西安呢?
有該如何保持這高逼格呢?
為了解決後顧之憂,我們必須弄明白fetch_sh-bj.sh干了哪些事? 然後山寨出個上海到深圳和西安的查票工具:fetch_sh-sz.sh,和fetch_sh-xa.sh。
不過,最終解決方案應該是弄個通用的查票工具fetch12306.sh。 這樣查上海到北京的動車票應該是這樣的:
[code]./fetch12306.sh 上海 北京 2016-05-14如果你對這些東東感興趣,那麼相信我,本書一定符合你的口味。
廢話不多說,讓我們先看看fetch_sh-bj.sh到底干了哪些事。 fetch_sh-bj.sh是一個腳本文件,可以直接使用文本編輯器打開。
[code]#!/bin/bash curl --insecure --user-agent "Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0" "https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=$1&from_station=SHH&to_station=BJP" | grep -oP "(?<={)[^{}]+(?=})" | sed -r 's/.*station_train_code":"([^"]+).*start_station_name":"([^"]+).*end_station_name":"([^"]+).*start_time":"([^"]+).*arrive_time":"([^"]+).*ze_num":"([^"]+).*zy_num":"([^"]+).*swz_num":"([^"]+).*/\1 \2 \3 \4 \5 \6 \7 \8/'Unix有這樣的設計哲學:
一個程序只做一件事,並做好。 程序要能協作。
程序要能處理文本流,因為這是最通用的接口。fetch_sh-bj.sh正是這種哲學思想下的產物:
拼裝現有的工具,協作完成我們期望的功能。fetch_sh-bj.sh腳本以豎線(“|”)為單位劃分成三部分:
- 第一部分使用curl命令從12306官方網站獲取車票信息 - 第二部分使用grep命令將車票信息按照車次分離
- 最後使用sed命令提取並打印需要的信息通過curl、grep和sed三個工具的協作實現我們想要的功能。