python3调用百度翻译api的命令行翻译工具
发布时间:2020-05-25 00:37:08 所属栏目:Python 来源:互联网
导读:python3调用百度翻译api的命令行翻译工具
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 #! /usr/bin/env python3
#coding=utf-8
import sys
import json
import urllib.request
import urllib.parse
import http.client
from io import StringIO
TRANS_URL='http://fanyi.baidu.com/v2transapi'
ORIGIN_HOST='fanyi.baidu.com'
class Result:
def __init__(self,src,dest,meanings=None):
self.src=src
self.dest=dest
self.meanings=meanings
def parse_from_json(json_data):
trans_data=json_data['trans_result']['data'][0]
try:
dict_data=json_data['dict_result']['simple_means']['symbols'][0]['parts']
means=list()
for item in dict_data:
tmp=item['means']
if isinstance(tmp[0],dict):
for t_item in tmp:
means.append(t_item['word_mean'])
else:
means.append(tmp)
except KeyError:
means=None
return Result(trans_data['src'],trans_data['dst'],means)
def show(self,file=sys.stdout):
str_template='<<<translaten%s--->%sn<<<meaningn%s'
print(str_template % (self.src,self.dest,self.meanings))
def handle_result(content):
json_data=json.loads(content)
Result.parse_from_json(json_data).show()
def compose_request(word):
r"""
compose urllib.request.Request object accordingly
"""
body=StringIO()
body.write('from=en&to=zh' if is_eng(word) else 'from=zh&to=en')
body.write('&')
body.write(urllib.parse.urlencode({'query': word },encoding='utf-8'))
body.write('&transtype=trans&simple_means_flag=3')
body=body.getvalue()
headers={'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest'
}
return urllib.request.Request(TRANS_URL,body.encode(encoding='utf-8'),headers=headers,origin_req_host=ORIGIN_HOST,method='POST')
def is_eng(word):
r"""
determine whether the unicode char is english or not
>>> is_eng('hello')
True
>>> is_eng('你好')
False
>>> is_eng(''')
True
>>> is_eng('‘')
False
"""
for uchar in word:
if len(uchar.encode('utf-8'))==1:
continue
else:
return False
return True
if __name__ == '__main__':
if len(sys.argv)<2:
print('Usage: %s word_to_translate' % sys.argv[0])
sys.exit(0)
word=sys.argv[1]
resp=urllib.request.urlopen(compose_request(word))
if(resp.status==200):
handle_result(resp.read().decode('utf-8'))
else:
print('Rquest Error: n HTTP Status: %d n Reason: %s n',resp.status,resp.reason)
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
