台鐵自動訂票程式

一個將程式應用在生活上的好例子,利用標準 HTTP 協定來達成台鐵自動訂票的需求!!
記得以前也寫過類似的程式,去 CNN 網站狂投公投綁大選的反對票,呵呵!!
已經很久沒坐火車了,這個程式雖然沒有 GUI 介面,不過應該不難使用,推薦給大家使用!!

原文刊載處

—————————————————————-

研究了一下台鐵訂票的html, 裡面用到一個JavaScript檔

不過是用*.js的方式與html分開, 有興趣的人可以另存網頁

再打開來研究裡面的語法…

不過就我個人使用而言, 直接指定車次去訂票比較符合我的需求

所以我修改了Yoshi兄的code,並且做了一些精簡,

另外,把訂票需要的資訊(身分證字號,起站代碼,到站代碼…)與程式分開

寫在文字檔中, 當需要訂不同的票時只要修改此文字檔, 不需重新compile

第一次post程式 請指教

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.net.*;
import java.io.*;
 
public class OrderTicket {
  private static String url="http://railway.hinet.net/trw/ctno11.jsp?";
  public static void add(String attribute, String value) {
    if(url.endsWith("&") || url.endsWith("?")) {
      url+= attribute + "=" + value;
    }
    else {
      url+= "&" + attribute + "=" + value;
    }
  }
  public static void order() throws IOException {
    URL website = new URL(url);
    int count=1;
    while(true) {
      System.out.println("開始第" + count + "次嚐試訂票...");
      count++;
      URLConnection connection = website.openConnection();
      BufferedReader in = new BufferedReader(
                new InputStreamReader(connection.getInputStream()));
       String line=null;
       String content="";
       
       
       while( (line=in.readLine())!=null) {
         content+=line;
         System.out.print(".");
       }
       in.close();
       if(content.indexOf("您的車票已訂到")!=-1) {
         BufferedWriter bw = new BufferedWriter(new FileWriter("result.html"));
         bw.write(content);
         bw.close();
         System.out.println("票己成功訂到,請讀取result.html檔。");
         System.exit(0);
       }
 
       else {
         System.out.println("票尚未訂到,一分鐘之後將會再次嚐試...");
         try {
           Thread.sleep(6000); //sleep 1 minute, and try it again later.
           }catch(InterruptedException e) {
             e.printStackTrace();
           }
         }
 
      }//end while
    }
    public static void main(String[] args)  throws Exception{
 
            if (args.length != 1)
            {
                 // Print message, pause, then exit
                 System.err.println ("Invalid command parameters");
                 System.in.read();
                 System.exit(0);
            }
      BufferedReader filein = new BufferedReader(new FileReader(args[0] ));
      //BufferedReader filein = new BufferedReader(new FileReader("data.txt"));
      int i=0;
      String[] value = new String[10];
      String[] attribute = {"personId",//身分證字號
                  "fromStation",//_站代碼
                  "toStation",//到站代碼
                  "getinDate",//乘車日期
                  "orderQty",//訂票張數
                  "trainNo",//車次代碼
                  "returnTicket"//是否訂來回票
                  };
      while ((value[i] = filein.readLine()) != null) {
        add(attribute[i],value[i] );
        i++;
      }
      
      System.out.println(url);
      /*
      try {
        order();
      }
      catch(IOException e) {
        System.out.println("連線失敗,請檢查你的網路連線。");
      }
      */
      
    }
}
 

編譯完 需要另外新增一個文字檔案儲存訂票資訊

執行時的第一個參數為此文字檔案檔名

巴里島之行!! 倒數 3 天!!

只剩三天就要出國了。不過還沒刷團費,機票護照還沒拿到,SPA 還沒訂到,行程都還不確定,唯一確定的就是星期四是出發日,期待了很久的旅行,該不會突然被旅行社告知無法成行吧@@

今天把 Reyna 的 iRiver H300 拿來練習了一下,準備帶去巴里島當成儲存照片的隨身硬碟。這個 MP3 隨身聽好用歸好用,有 Copy/Paste 的功能,不過美中不足的發現沒辦法手動建立目錄。不過也別太奢求了!!哈..根本沒有鍵盤,即使能手動建立目錄,又如何給定目錄名稱呢?最後只好預先用電腦在 H300 裡面預先將每天的日期都建好目錄,以便每天拍完後相機照片可以直接摳進去。至少有大 LCD 可以直接瀏覽照片..呵 :D。

今天在 OA 系統請假以後,突然開始有點期待旅遊的心情了,也許是手邊的工作暫時告一段落,有些更大的東西如果現在開始做,恐怕事情做到一半就又得放下休假去,想想還是把一些更瑣碎的東西趁這出國前的空檔全部搞定,度假回來要加班再說吧。

倒數三天!! 時間快點過去吧!!

水中數位攝影

上次去帛琉玩的時候,看著其他的團員人手一台防水相機,浮潛的時候盡情的將帛琉美麗的海底拍回來留念,心裡真是嘔啊! 雖然我也帶了我的 Minolta DiMAGE7 去帛琉,無奈那時候的數位相機可脆弱得很,別說下水拍攝了,恐怕雨下大一點就得趕快把相機收進包包了,所以帶去也只能在陸地上拍拍照,而帛琉五日遊五天都在水裡玩(好像應該改為 “帛琉五日游” 才對哦),所以帛琉的海底美景就只能靜靜的留在我的回憶中而已 >_<

這次要去巴里島玩,雖然沒跟團,但我們自己也安排了一趟泛舟,所以這次我就早早就想到得帶個防水相機同行,才能將泛舟時的歡樂情景也留影下來。研究了一會兒,當然最簡單就是買個 KODAK 水精靈立可拍防水相機

Kodak 水精靈

這種立可拍防水相機大約兩百元左右,不過這個可是傳統底片相機,拍回來沖洗後還需拿底掃再掃一次,才能得到數位影像,而且這種相機大概也別想要求影像品質了,主要訴求就是能夠讓你在水裡拍攝而已。

不過科技日新月異,漸漸的數位相機也被設計成可以在水裡攝影。方式分成兩種:

1.潛水盒,顧名思義就是類似一個盒子套在數位相機外面,而潛水深度可達 30 米 ~ 40 米。由於潛水深度夠深,所以潛水盒的防水性絕佳,操作得宜的話,幾乎不可能進水。但是缺點就是,必須針對所使用的數位相機型號來購買,而且價位很貴,大約八九千元,幾乎都可以再買一台 DC 了。

Nicon CoolPix 7900 Canon 300D

不過由於 DSLR 可替換鏡頭的特性,DSLR 的潛水盒設計困難,所以相對的單價也貴的嚇人,像這個 300D 的潛水盒竟然要價台幣 58K,竟然比 300D 機身還貴了@@

2.防水數位相機,又分為生活防水與水中防水。生活防水以 Olympus μ 系列為代表,生活防水以符合日本 JIS4 防水標準(或稱為 IEC standard publication 529 IPX4),這種防水規格僅能防止從各角度濺來的水花,並不足以達到在水中攝影的要求。
而 Pentax 先前設計了 Optio 33WR/43WR 系列,符合 JIS7 的防水標準,可在水深一公尺處浸泡達 30 分鐘而不會進水。最近更新發表 Optio WP 系列數位相機,符合 JIS8 防水標準,不但可在水深一公尺處浸泡達 30 分鐘,更可同時在水中操作數位相機而不會進水。Pextax 原廠還為了 WP 系列相機設計了一個 H2OCamera 專屬網站,可以看得出 Pentax 在這個領域的企圖心。
在 Mobile01 有篇 Optio 43WR 的測試報告,看起來 43WR 不但水中浸泡不會進水,似乎在水中操作相機也不是問題。
對岸也有一篇 Optio 33WR 的測試報告,介紹也頗為詳盡,非常值得參考。

而日本人也很有趣,為了怕在浮潛或是泛舟時,Optio WP 不慎掉到深水處而損壞相機,還特別設計了浮球綁在相機本體上,如此一來即使不慎相機脫手而落,浮球也會自動浮起相機,真是個體貼的設計。原文刊載處

Optio WP 浮球

防 水 等 級 一 覽 表
0級
無防水功能
1級
能防垂直落下的水滴
2級
能防從15度角落下的水滴
3級
能防從60度角內濺來的水花
4級
能防各角度濺來的水花
5級
能防噴來的水柱
6級
能防強力水柱
7級
能短暫浸泡在水中
8級
能持續浸泡在水中
資料來源/IS國際標準

邪惡度測試!!

今天在網路上閒晃時逛來逛去又不小心看到這個 測試邪惡度 的網站,可以輸入任何一個網址或是一段文字來測試邪惡的程度,測試的演算法乃依據 Mr. Ivan Panin 演繹出來的 Gematria 演算法,宣稱絕對正確。不過我也沒仔細去研究,好玩比較重要,所以小的我馬上就大義滅親地馬上將小弟的 Broso 個人網站拿去測試啦。測試結果如下

This site is certified 50% EVIL by the GematriculatorThis site is certified 50% GOOD by the Gematriculator

呼..真是好險,還好測試結果不是 100% EVIL,不然可真是令人監介啊。
小的順便拿了其他人的部落格來測試,結果大同小異,粒粒的邪惡度為51%,愛德華的竟然只有34%,小黑的部落格最無趣,邪惡度最低只有28%。

最後我又很無聊的拿了國內各大政黨的首頁來做測試,邪惡程度差異挺大的。測試結果如下(政黨順序依亂數排列
):
(各政黨的捍衛者對測試結果不爽的請勿來找我,請直接洽詢原網站)

政黨 測試網址 邪惡度  
民主進步黨 http://www.dpp.org.tw/index2.asp This site is certified 44% EVIL by the GematriculatorThis site is certified 56% GOOD by the Gematriculator 看測試結果
中國國民黨 http://www.kmt.org.tw/ This site is certified 1% EVIL by the GematriculatorThis site is certified 99% GOOD by the Gematriculator 看測試結果
親民黨 http://www.pfp.org.tw/ This site is certified 56% EVIL by the GematriculatorThis site is certified 44% GOOD by the Gematriculator 看測試結果
新黨 http://www.np.org.tw/ This site is certified 35% EVIL by the GematriculatorThis site is certified 65% GOOD by the Gematriculator 看測試結果
台灣團結聯盟 http://www.tsu.org.tw/ This site is certified 44% EVIL by the GematriculatorThis site is certified 56% GOOD by the Gematriculator 看測試結果
無黨團結聯盟 http://www.npsu.org.tw/ This site is certified 16% EVIL by the GematriculatorThis site is certified 84% GOOD by the Gematriculator 看測試結果
建國黨 http://www.taip.org/index.htm This site is certified 23% EVIL by the GematriculatorThis site is certified 77% GOOD by the Gematriculator 看測試結果
泛紫聯盟 http://www.justice.org.tw/index.htm This site is certified 16% EVIL by the GematriculatorThis site is certified 84% GOOD by the Gematriculator 看測試結果

測試結果大家笑笑就好, 不代表任何意義!!

Orz = 失意體前屈

上禮拜金鼎錢櫃 KTV 大會師時,小呆點到 五月天 – 戀愛ing 這條歌,裡面的歌詞有句提到說

“超感謝你讓我重生整個Orz”

那時不懂這個 Orz 是啥意思?於是就問了粒粒,沒想到竟然被粒粒這個山頂洞人恥笑,連 Orz 也不知道是什麼?? 後來粒粒解釋說這個 Orz 從三個字母的外觀看起來很像一個人跪著趴在地上失意的樣子,用聽的很難意會,於是回家後又用了孤狗大神找了一下,沒想到 Orz 還真是滿地都是@@。

有一篇介紹的還蠻仔細的
何謂失意體前屈?

Orz 還有一些變形,例如:
OTL
Or2 (表示屁股特別翹)
Orv (後腳翹起來)

Orz 來到台灣後,也加入了一些中文字的象形,例如:
囧rz (加上了眉毛和嘴巴)

還有人為此特別做了首 Orz 之歌(原文刊載於 Orz)
歌詞如下

小姐啊小姐,妳真是美麗。
烏溜溜的秀髮,水汪汪的眼睛。
只要一想到妳,我滿心都XD。
今天啊今天,我鼓起勇氣。
到底心歸何處,我想要問問妳。
但妳的答案,真讓我 >_< 。
(好人∼)說我是好人,妳說真是對不起。
(好人∼)說我是好人,就宣判我的命運。
(好人∼)說我是好人,我挫折俯跪不起。
(好人∼)說我是好人,我只能Orz…。

點此可以下載試聽,尤其是那個 >_< 的念法真是太經典啦,強烈建議試聽一下。
這兒也有 MP3 的版本,有興趣的可以下載回去聽看看。

Azureus – a Java-based BitTorrent Client under Linux box!!

這兩天 IFPI 跟 Kuro 之間的訴訟剛判決下來,Kuro 以及 Kuro 的會員被判定為違反著作權法。這讓我想起來以前我常常用 BitTorrent 到對岸下載一些有的沒的軟體,不知道這種東西是否也算是一種違法??

BitTorrent 基本上算是一種多點續傳的檔案共享協定,利用這種協定,分享檔案出來的人不必擁有很大的上傳頻寬,也無須一直將檔案保留著來讓別人下載,只要網路上時持續有人當種子(seed),就可以持續讓別人下載。這種協定抱持的觀念是,有給予才能下載 (Give and ye shall receive),當你在下傳別人檔案的過程中,同時你也讓別人下載你已下載回來的部分。基於這種觀念,基本上頻寬已經分散到各個種子上,所以被下載的人無須具有大的頻寬,即可達到讓檔案快速分享。

想更瞭解 BitTorrent 協定的話,可閱讀此文 What is BitTorrent?

不過我今天不是要來談 BitTorrent 協定的,我要介紹的是一個 BitTorrent 的小軟體 – Azureus。Azureus (中文俗稱藍箭毒蛙)是一個免費的 Java-based 軟體,因此理論上可以在各種 OS 平台上執行,但是它在 UI 的部分各平台使用的 Library 都不太一樣,所以並不是說直接將 Azureus 的 jar 檔複製到另一個平台後,就可以直接執行了,必須針對平台來下載正確版本才能正常執行。其實支援 BitTorrent 的軟體很多,為啥一定要特別介紹 Azureus 呢? 主要就是因為它可以在 Linux 的 XWindows 上執行,醬子我就不必在另外將家裡另一台 Window PC 開機才能抓檔,直接在我的 Broso 上就能到各大 BitTorrent 分享網站來下載軟體了。

而安裝步驟非常簡單,介紹一下 Azureus 的安裝步驟:

1.首先到 sourceforge.net 下載 Azureus 的 Linux GTK 版本

下載 Azureus

2.下載回來以後,就在 /usr/local 下解開

解開 Azureus

3.由於執行時需要在 XWindows 環境下執行,於是遠端切換到 GNOME 的桌面下,並開啟一個 gnome-terminal,切換目錄至 /usr/loca/azureus 下面,直接執行 ./azureus 來啟動

啟動 Azureus

4.啟動完成,開啟任何一個下載回來的 .torrent 檔案,即可開始進檔案共享。下圖為正在下載某樂團歌曲的範例

下載歌曲

稍微把玩了一下這個小軟體,該有的功能一個也不少,還是全中文化呢(雖然語句翻譯像是對岸的字詞),甚至還可以限制對方來我們這邊下載的最大頻寬,而且還是全部免費,真是令人感動!! 以後應該就可以直接從公司連回家裡的 Broso 來啟動檔案共享了:D