星期五, 9月 25, 2009

Google 應用服務引擎

最近有一個作業需要寫CGI,反正都要用到網路的程式語言那就順便練習一下
[Python + Google 應用服務引擎]的組合。

這次 google 寫的文件真的很詳盡,一步一步照他的教學完成,就可以對整體運作
有初步的了解。 過程還算順利,總共只卡了兩個地方。一個是自己豬頭,一個是
完全不知道怎麼發生的,所幸後來"恰巧"解決了。

1. 先講講自己豬頭的地方,在使用URL 擷取的功能的時候,google 教學有一段 code
可以參考,就像下面這樣,
import urllib2
url
= "http://www.google.com/"
try:
result
= urllib2.urlopen(url)
doSomethingWithResult
(result)
except urllib2.URLError, e:
handleError
(e)
紅色標起來的地方阿,第一眼看到就覺得很奇怪,怎麼會有工程師把函式取
doSomethingWithResult () 這種名字,那麼的口語化,不過也不以為意。
就這樣整段複製到檔案裡面。果不其然就跳出一大段的 error 訊息,還煞有
其事想要解掉這個Bug。 又 Python 丟出一堆不相關的,我也看不太懂得 error
訊息,為了這個花了不少時間。 經過很多嘗試之後,才忽然想到其實根本沒有doSomethingWithResult() 這個函式,他只是寫出來要提醒讀者自己處理罷了。

2. 第二個遇到的問題真是莫名其妙。跟著教學檔到程式寫好了,也跟google 申請
好帳號了,那就到了上傳的步驟了。這時候忽然又遇到鬼打牆,在CMD下輸入
教學檔提供的指令,怎麼樣上傳就是失敗。

一直出現像是 urllib2.URLError:urlopen error [Errno 10061] 無法連線,
因為目標電腦拒絕連線
裡面還出現中文字才厲害哩。在網路上找了一堆相關的
文章,幾乎沒有相關的解法。這一耗又是一整個早上。最後才想到要不然用 Cygwin
試試看好了,該死,就這個成功了。我猜這跟我寫的程式沒有關係,也跟 google應
用服務引擎沒關係,應該是之前不小心動到 XP 的某一個設定值,才會出現這種奇
怪的錯誤。

後來把Google App Engine 升級到 1.2.5 版之後,CMD 也可以 update了。

3. 使用urllib2.urlopen(url) 太過於頻繁好像會引起 google的注意,把你當成機器人。

4. 儲存 xxx.cgi 檔要寄的轉成 UTF-8 才不會造成 Python 當掉。

5. 遇到 type 'exceptions.ImportError 不用緊張,代表使用錯 Python 的版本啦!!要用 2.5.X的喔~ google 都有講

6. 看到 IndentationError 代表你寫程式的習慣不好,你的縮排沒對準。在檢查一下吧!!

7. 想在UE下,擁有會變色的 Python 程式碼嗎?? 參考這個 [檔案]


以上。

沒有留言: