簡介
有興趣嘗試的人不知道在上一篇前置作業有沒有設定好了,假如有了『應用ID 與 應用密鑰』,該篇進入程式執行時才會有結果。再提醒一下,請登入有道雲官網,並進入後台,選擇應用管理,點選容器就會出現詳細資訊,如下圖,那我們就開始吧。
建立Setting.py
首先我們先將你自己所新增的應用ID與應用密鑰,在Python中新增檔案名稱叫做Setting.py的檔案,並新增兩個變數,如上圖,變數名稱跟檔名都可以自己用自己喜歡的名字,在之後主程式要引用,所以可以弄自己熟悉的名稱。
新增變數與檔案後,請將ID跟密鑰複製,分別貼上,上圖的Key就是應用的ID,Secret就是應用的密鑰。
建立官方類別檔案
# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
import time
from importlib import reload
import json
reload(sys)
YOUDAO_URL = 'https://openapi.youdao.com/api'
# APP_KEY = 'ID'
# APP_SECRET = 'SECRET'
def encrypt(signStr):
hash_algorithm = hashlib.sha256()
hash_algorithm.update(signStr.encode('utf-8'))
return hash_algorithm.hexdigest()
def truncate(q):
if q is None:
return None
size = len(q)
return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]
def do_request(data):
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
return requests.post(YOUDAO_URL, data=data, headers=headers)
def connect(q,APP_KEY,APP_SECRET):
#q = "The Story of Love, part 1"
data = {}
data['from'] = 'en'
data['to'] = 'zh-CHS'
data['signType'] = 'v3'
curtime = str(int(time.time()))
data['curtime'] = curtime
salt = str(uuid.uuid1())
signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
sign = encrypt(signStr)
data['appKey'] = APP_KEY
data['q'] = q
data['salt'] = salt
data['sign'] = sign
response = do_request(data)
contentType = response.headers['Content-Type']
if contentType == "audio/mp3":
millis = int(round(time.time() * 1000))
filePath = "合成的音频存储路径" + str(millis) + ".mp3"
fo = open(filePath, 'wb')
fo.write(response.content)
fo.close()
else:
#print(response.content)
#print(response.content.decode('utf-8'))
print(json.loads(response.content.decode('utf-8'))['translation'][0])
return json.loads(response.content.decode('utf-8'))['translation'][0]
if __name__ == '__main__':
connect()
接著我們可以從官方的文件將主類別程式碼複製下來,如上述程式碼。其中有一個最重要的函式,『connect()』,會在主程式使用到。
保險起見,可以看到最上方的Import檔案,最好都把這些package都安裝起來,例如『requests』。
最後將該檔案儲存在你專案資料夾中,我是取做demo.py,檔案名稱也可以依照自己喜好來命名。
建立主程式檔案
接著到了主程式區塊,我們先新增主程式,這邊就要叫做『main.py』,然後看到上圖:
SnowNLP:這邊算是一個備用的套件,用意在我們可以將簡體中文透過『.hen()』來轉換成繁體中文。
Import Setting:將我們剛剛設定好的setting.py套用在主程式中,並將兩個參數可以讓主程式使用,意思就是直接調用。
Import Demo:我們這邊就是要使用官方的主程式,並將『connect』讓主程式可以使用。
Encrypt
def encrypt(signStr):
hash_algorithm = hashlib.sha256()
hash_algorithm.update(signStr.encode('utf-8'))
return hash_algorithm.hexdigest()
在後面我會介紹主程式中所會應用到的『def』函式,這個函式用意是把要翻譯的文字進行編碼。
Translate
def translate(APP_KEY,APP_SECRET,text):
url='https://openapi.youdao.com/api'
headers={'Content-Type': 'application/x-www-form-urlencoded'}
#主要轉換區
size=len(text)
if size<=20:
q=text
else:
#text = urllib.parse.quote(text)
q=f'{text[0:10]}{str(size)}{text[size-10:size]}'
print(q)
curtime=str(int(time.time())) #当前UTC时间戳(秒)
salt=str(uuid.uuid1()) #UUID
#實現簽名
signStr = f'{APP_KEY}{q}{salt}{curtime}{APP_SECRET}'
hash_algorithm = hashlib.sha256()
hash_algorithm.update(signStr.encode('utf-8'))
sign=hash_algorithm.hexdigest()
data={
# 'from': 'en',
# 'to':'zh-CHS',
'signType': 'v3', #簽名類型
'curtime':curtime,
'appKey': APP_KEY,
'q':q,
'salt':salt,
'sign':sign,
}
response=requests.post(url,data=data,headers=headers)
#print(response.content)
result_text=json.loads(response.content.decode('utf-8'))['translation'][0]
print(result_text)
return result_text
該函式算是最主要把文字Post到友道雲進行偽原創的功能,要帶入的參數就是(原文, ID , SECRET),有一部分是在處理GET與POST功能,但我們直接看到標記『主要轉換區』,這邊有一個壞處就是,他一次只能轉換20個字元以內的文字,在之後我看能不能改程式讓他可以一次轉換更多文字。
Main
def main(text,APP_KEY,APP_SECRET):
print(">>> 開始偽原創中..")
en_text = translate(APP_KEY, APP_SECRET, text)
result_text=connect(en_text,APP_KEY, APP_SECRET)
print(">>> 偽原創完成!")
return result_text
這邊就是執行的函式,他的邏輯是,先使用主程式中的『translate()』把原文透過線上API轉換成英文,接著再把轉過的英文丟到demo.py中的『connect()』轉換成中文,我個人覺得是有點偷吃步,而最後就會產出偽原創的文字。
執行
if __name__=='__main__':
text="我家門前有小河後面有山坡"
main(text,APP_KEY,APP_SECRET)
最後進入執行的動作,我們可以先新增一個容器,放入要進行偽原創的原文,接著互叫『main』並帶入參數,由於Key跟Secret在其他程式已經設定好,這邊就不用理他了。
小結 & 結果
我們把第三段的程式碼全部貼在『main.py』中,並執行,可以看到上圖,標示0的是原文,標示1的是translate轉換的英文結果,標示2的就是最終的偽原創,看起來還算不錯。
我們再來試試看不同的文字,看起來也還是不錯,但我自己也有遇過他翻譯出來的根源文相同,但與先前我嘗試過的本機版本的偽原創,算是比較厲害了。但是也有一些惱人的限制,例如:這是要錢的且有單次偽原創字數限制。有機會的話我會持續找找有沒有其他的工具可以使用。
上圖是你的額度,可以到官網的總覽看看,假如覺得偽原創品質不錯的話,是可以考慮除值一下。