November 19,2009
發佈你的 Python 程式
因為覺得老是從專案目錄下執行程式也不是很方便,所以想,應該要把程式弄的標準一點,能依循比較正式的方法去發佈程式。一般來說,各大語言都會有建議怎麼去散佈、發佈你的程式。
所以今天早上胡亂地用 python deployment guide 找了一下,發現找不到這樣的 guide。後來才發現找錯關鍵字,python 裡是用 distribute/spreading,改變一下關鍵字,就能找到這幾份:
文件不難,照著試一試,的確一下子就寫好了。
比較麻煩的是程式如果要用到 module 裡的一些檔案時,會不知道路徑。舉例來說,我是把 glade 產生的 gtkbuilder ui 檔案放在 module 路徑下,那程式該怎麼讀取呢??總不能寫死吧。還好 Stack Overflow有解答:Retrieving python module path,就是用 os.path.dirname(module.__file__) 取得。
所以今天早上胡亂地用 python deployment guide 找了一下,發現找不到這樣的 guide。後來才發現找錯關鍵字,python 裡是用 distribute/spreading,改變一下關鍵字,就能找到這幾份:
文件不難,照著試一試,的確一下子就寫好了。
比較麻煩的是程式如果要用到 module 裡的一些檔案時,會不知道路徑。舉例來說,我是把 glade 產生的 gtkbuilder ui 檔案放在 module 路徑下,那程式該怎麼讀取呢??總不能寫死吧。還好 Stack Overflow有解答:Retrieving python module path,就是用 os.path.dirname(module.__file__) 取得。
November 12,2009
Bing translate in Python
根據 Microsoft Translator HTTP 介面,然後用Python寫的。程式不長,其實跟 google translate 的方法很相似,最下面有使用範例。
附帶一提的,Bing翻譯網站上完全沒提到要怎麼申請 appid,申請 appid 要去 Bing Developer Center 申請,所以你要自己去申請,取得 appid 之後,把程式裡的 your_app_id 換成你申請的 appid。
附帶一提的,Bing翻譯網站上完全沒提到要怎麼申請 appid,申請 appid 要去 Bing Developer Center 申請,所以你要自己去申請,取得 appid 之後,把程式裡的 your_app_id 換成你申請的 appid。
#!/usr/bin/env python
# -*= coding: utf-8 -*-
import sys
import os
from urllib import urlencode
import urllib2
from urllib2 import Request, urlopen, URLError, HTTPError
import json
from translate import *
class BingTranslate:
appid = 'your_app_id'
base_uri = "http://api.microsofttranslator.com/V1/Http.svc"
def __read_from_req( self, req ):
try:
response = urllib2.urlopen( req )
result = response.read()
except HTTPError, e:
print e.code
print e.read()
result=""
return result
def detect( self, text ):
uri="%s/Detect?appId=%s" % ( self.base_uri, self.appid )
req = urllib2.Request( uri, text, { 'Content-Type':'text/plain'} )
return self.__read_from_req( req )
def getLanguageNames( self, locale=None ):
"""
Thanks MSDN, I still don't know the value of parameter 'locale'
Don't pass any parameter to getLanguageNames, or you will get error.
"""
uri="%s/GetLanguageNames?appId=%s" % ( self.base_uri, self.appid )
req = urllib2.Request( uri, locale, { 'Content-Type':'text/plain'} )
return self.__read_from_req( req ).split( '\n' )
def getLanguages( self ):
uri="%s/GetLanguages?appId=%s" % ( self.base_uri, self.appid )
req = urllib2.Request( uri, None, { 'Content-Type':'text/plain'} )
return self.__read_from_req( req ).split("\r\n")
def translate( self, text, fr="en", to="zh-CHT" ):
uri="%s/Translate?appId=%s&from=%s&to=%s" % ( self.base_uri,
self.appid, fr, to )
req = urllib2.Request( uri, text, { 'Content-Type':'text/plain'} )
return self.__read_from_req( req )
if __name__ == "__main__":
t = BingTranslate()
print t.translate( "test" )
print t.translate( "鬼", "zh-CHT", "en" )
print t.detect( "中文測試" )
print t.detect( "中文测试" )
names = t.getLanguageNames()
langs = t.getLanguages()
print "Language Names (total %d):" % len(names)
for l in names:
print l
print "Languages (total %d):" % len(langs)
for l in langs:
print l
September 15,2009
Python 練習 - Google translate
因為看了A Bit? No!!!的這篇:写了个小小的翻译工具而做的小小練習。
基本上是作中翻英,但只要稍稍更動 langpair,就可以調整翻譯語言。
#!/usr/bin/env python
# -*= coding: utf-8 -*-
# http://www.oreillynet.com/pub/h/476 Encode Text for URLs
# http://evanjones.ca/python-utf8.html How to Use UTF-8 with Python
# http://abitno.linpie.com/a-small-translate-tool.html 寫了一個小小的翻譯工具
import sys
import os
from urllib import urlencode
import urllib2
import json
def get_json( uri ):
response = urllib2.urlopen( uri )
return response
def translate( text ):
uri="http://www.ajax.googleapis.com/ajax/services/language/translate"
query=urlencode( { 'v': '1.0', 'langpair': 'zh|en', 'q':
text.encode('utf-8') } )
uri = uri+"?"+query
return json.load( get_json( uri ) )
text = unicode( sys.argv[1], "utf-8" )
print unicode( text ) + u" => " + translate( text )['responseData']['translatedText']