使用python一步一步搭建微信公衆平臺(二)----搭建一箇中英互譯的翻譯工具

距離上次寫使用python一步一步搭建微信公衆平臺(一)已經有幾個月了,當中自已也搭建了一箇中英文互譯的小應用,但是因爲英文翻中文好弄,中文翻譯成英文一直有問題,知道是編碼的問題,可是一直搞不定,因而就先擱淺了,今天又搞了搞,終於搞定了,在這裏也說下,同時也說下json格式的應用python

1. 準備,先在使用python一步一步搭建微信公衆平臺(一)中基本實現自動回覆的功能後,接着在有道詞典上申請一個key,http://fanyi.youdao.com/openapi?path=data-modemysql

2.根據有道的api使用說明web

數據接口
http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻譯的文本
版本:1.1,請求方式:get,編碼方式:utf-8
主要功能:中英互譯,同時得到有道翻譯結果和有道詞典結果(可能沒有)
參數說明:
 type - 返回結果的類型,固定爲data
 doctype - 返回結果的數據格式,xml或json或jsonp
 version - 版本,當前最新版本爲1.1
 q - 要翻譯的文本,不能超過200個字符,須要使用utf-8編碼
errorCode:
 0 - 正常
 20 - 要翻譯的文本過長
 30 - 沒法進行有效的翻譯
 40 - 不支持的語言類型
 50 - 無效的key

3.知道怎麼調用後後面的就簡單了,加上你的要查詢的詞,能夠是中文,也能夠是英文,我建議返回格式doctype是json的,由於和xml相比使用更簡單,更容易理解,關於如何使用json解析,能夠看我之前寫的博文,python解析json ,咱們來查看一下有道翻譯返回的json的基本格式sql

QQ截圖20140118234719

成功返回翻譯結果都會有一個叫basic的key的,因而咱們接下來寫一個fanyi的函數,以前在頭部記得import jsonjson

def youdao(word):
    qword = urllib2.quote(word)
    baseurl = r'http://fanyi.youdao.com/openapi.do?keyfrom=yourAppName&key=yourAppKey&type=data&doctype=json&version=1.1&q='
    url = baseurl+qword
    resp = urllib2.urlopen(url)
    fanyi = json.loads(resp.read())
	##根據json是否返回一個叫「basic」的key來判斷是否翻譯成功
    if 'basic' in fanyi.keys():
		##下面是你自已來組織格式
    	trans = u'%s:\n%s\n%s\n網絡釋義:\n%s'%(fanyi['query'],''.join(fanyi['translation']),''.join(fanyi['basic']['explains']),''.join(fanyi['web'][0]['value']))
    	return trans
    else:
        return u'對不起,您輸入的單詞%s沒法翻譯,請檢查拼寫'% word


4.咱們將以前獲得的content進行翻譯操做api

Nword = youdao(content)        
return self.render.reply_text(fromUser,toUser,int(time.time()),Nword)

5.將以前的鸚鵡學舌的return刪除掉,下面在微信給你的公衆帳號發幾個詞看看能不能獲得翻譯結果微信

6.興奮了一把以後,發現只有英文能夠翻譯成中文,但中文卻不能翻譯成英文,初步推測是破編碼搞的,由於這個我擱淺了一段時間,今天終於搞定了,將獲得的content進行一下是不是unicode的判斷,若是是unicode則對其進行utf-8轉碼網絡

if type(content).__name__ == "unicode":
            content = content.encode('UTF-8')
            
        Nword = youdao(content)        
        return self.render.reply_text(fromUser,toUser,int(time.time()),Nword)

關於python中的各類編碼的頭疼問題能夠google,推薦幾篇文章微信公衆平臺

python 編碼轉換函數

談談Unicode編碼,簡要解釋UCS、UTF、BMP、BOM等名詞

Python Unicode與中文處理

7.之後繼續更加好玩的功能



1月23日更新,有網友反饋,說只判斷basic是否在key中,會致使不少有道原本是翻譯成功了,但個人程序沒有返回值,其實查看有道翻譯的api,它是根據errorCode來判斷是否返回成功的,若是是0則是返回正常,還有一些返回值,那麼我將個人程序進行改進,選判斷errorCode,而後再判斷translation

def youdao(word):
    qword = urllib2.quote(word)
    baseurl =r'http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q='
    url = baseurl+qword
    resp = urllib2.urlopen(url)
    fanyi = json.loads(resp.read())
    if fanyi['errorCode'] == 0:        
        if 'basic' in fanyi.keys():
            trans = u'%s:\n%s\n%s\n網絡釋義:\n%s'%(fanyi['query'],''.join(fanyi['translation']),' '.join(fanyi['basic']['explains']),''.join(fanyi['web'][0]['value']))
            return trans
        else:
            trans =u'%s:\n基本翻譯:%s\n'%(fanyi['query'],''.join(fanyi['translation']))        
            return trans
    elif fanyi['errorCode'] == 20:
        return u'對不起,要翻譯的文本過長'
    elif fanyi['errorCode'] == 30:
        return u'對不起,沒法進行有效的翻譯'
    elif fanyi['errorCode'] == 40:
        return u'對不起,不支持的語言類型'
    else:
        return u'對不起,您輸入的單詞%s沒法翻譯,請檢查拼寫'% word

這樣能夠翻譯一些不長的句子,並且還能夠翻譯韓語,日語等,但問題也出來了,即便輸入亂七八糟的內容lkajfladfaldfladkf也會給你返回個相同的內容,內容過長的話,有道和微信的定義貌似不同,有道能夠翻譯,可是微信不必定能夠返回內容,另一個問題是有引號「'」會轉碼&#39;望網友大神共同討論解決


接下來:

使用python一步一步搭建微信公衆平臺(一)----基本的驗證與鸚鵡學舌功能

使用python一步一步搭建微信公衆平臺(三)----添加用戶關注後的歡迎信息與聽音樂功能

使用python一步一步搭建微信公衆平臺(四)----將小黃雞引入微信自動回覆

使用python一步一步搭建微信公衆平臺(五)----使用mysql服務來記錄用戶的反饋

相關文章
相關標籤/搜索