翻译python代码的软件_python3调用百度翻译api的命令行翻译工具

1.[代码][Python]代码

#! /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='<<%s\n<<

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值