2008年1月21日 星期一

Myminicity,寫了一隻小程式:)

有個網頁小遊戲叫做myminicity...
有點類似模擬城市...
不過最大的不同在於...
他的人口或是各項建設要靠別人點擊你的連結才會增加...
看起來還不錯...
不過也因為這樣...
PTT上面到處流竄著myminicity的連結文...
就像選舉一樣...每個都在拜託...
甚至學張爸文...偽裝連結...
只為了讓人家點連結...無所不用其極...

有鑑於此...
所以我寫了一隻小程式來做為遊戲的輔助工具...
伺服端我用PHP來開發...
因為我比較熟PHP+MYSQL...
再來是...免費空間好找...雖然說限制都還頗多的= =

因為考量到幾個因素...
1.好寫..= =
因為我很懶...能越簡單越好...
PHP也很好寫...處理HTTP request還算方便...有現成的Class可以用...
但是PHP不容易散佈...
2.散佈的方便性...
PHP沒辦法包裝成執行檔丟給別人...
總不可能叫人家去裝PHP吧...
所以客戶端我使用Perl來寫...

上次接觸Perl已經是國中高中的事情了...
那個時候還停留在CGI的年代...Perl應該還在4吧?
由於我的好友(kornelius)整天對我洗腦Perl的好處...
所以當做一個全新的語言來寫...

在客戶端的Perl當中...
我使用下列的Module來實現,
LWP::uagent負責上網撈下最新的list,
WIN32::Process則負責控制開啟外部程式。

這當中,例如uagent的agent,必須要設定成常見的瀏覽器格式,
不然免費空間有可能對不知名的瀏覽器會加以限制...
我在撈xtreemhost的時候就莫名奇妙被轉到google.com去。

另外,使用Win32::Process的原因是因為,
myminicity的網頁包含了javascript跟flash,
實際上在記錄點擊的不份我不清楚是哪個部份在負責,
不過顯然不是撈了html就算點擊,
總不可能寫這種程式還要自己處理javascript或是flash,
所以我直接使用IE來當作目標瀏覽器。

在Perl當中使用System或是exec可以開啟外部程式,
但是我沒有辦法控制開啟之後的外部程式,
使用Windows內建的command,
例如tasklist或是taskkill可以取得目前執行的工作清單或是關閉指定的工作,
但是在Perl執行之後,我沒辦法得知我開啟的外部程式的PID,
因此沒辦法關閉我開啟的程式。

使用Process則可以處理一些基本的資訊,
例如回傳的signal或是啥的,
至少我可以關閉我開啟的Process而不用知道PID。

提供連結網址:
http://travianmap.lydo.org/myminicity/post.php
上去之後填一組帳號密碼,如果帳號沒有重複就直接註冊這組帳號密碼
在這裡使用帳號密碼是用來區分連結的提供者,所以可以修改自己所貼的連結
因為我很懶,所以密碼加密的部分我沒有處理,
請自行用一個簡單的密碼或是直接等於帳號,
但是不要忘記密碼,因為這個功能我也沒寫XD


這篇文章所提到的程式已經更新,請參閱http://blog.mosquito.work/program/292
使用方式也請參照新的文章說明:)

清單網址:
http://travianmap.lydo.org/myminicity/list.php
這裡是client會下載的清單,
可以上來看看自己的網址是不是有在裡面,
不過因為只用\n做區隔,所以網頁看起來是連續的,還請多包含
或是下載之後使用筆記本開啟:)

Client下載:
http://www.badongo.com/file/7404092
使用Perl寫好之後,用PAR包裝的執行檔
請自行加入Windows排程,
選在電腦開著但是不會妨礙到你使用的時間為主,
因為開啟的過程當中會一直跳IE出來跑網頁= =
使用前注意事項:
1.確保你的IE可以動作,運作正常並且順暢
因為開啟之後30秒會自動關閉IE,如果你的IE很慢...
那我不確定會不會計有效點擊。
2.請確定你的IE可以正常的瀏覽myminicity的網頁。
3.請確定你的IE路徑是在C:\Program Files\Internet Explorer\IEXPLORE.EXE
不是的話Perl沒辦法呼叫IE出來...

大致上這樣...
目前我的簡單測試都還正常...
有問題可以寫Mail到myminicity@mosquito520.co.cc
不過不保證我會回覆以及處理:)

沒有留言: