命令行翻译工具

  • 命令行参数模块:argparse
  • 打包:PyInstaller

遗留问题:

  • 命令行参数为多个单词时不能用单引号?
  • 增加功能:错误日志,缓存啥的

1.程序文件trans.py

import requests, time, hashlib, random, json
import argparse

# 请求地址和请求头
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers = {
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '239',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie': '[email protected]; OUTFOX_SEARCH_USER_ID_NCOO=1606744505.8724139; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcTTc7n1DBzJ63Dw_4Ow; _ntes_nnid=04359c568b1008fcef153722370d20df,1555734032084; ___rl__test__cookies=1555739165615',
    'Host': 'fanyi.youdao.com',
    'Origin': 'http://fanyi.youdao.com',
    'Referer': 'http://fanyi.youdao.com/?keyfrom=dict2.top',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
    }

def generate_query_data(query):
    ts = str(int(time.time() * 1000))
    salt = str(ts) + str(random.randint(0,10))
    md5 = hashlib.md5()
    md5.update(("fanyideskweb" + query + salt + "@6f#X3=cCuncYssPsuRUE").encode())
    sign = md5.hexdigest()

    query_data = {
        'i': query,
        'salt': salt,
        'sign': sign,
        'ts': ts,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'bv': 'f8c295588ce195d0453511f751132244',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTlME',
    }
    return query_data

def trans(query, show_all):
    query_data = generate_query_data(query)
    resp = requests.post(url, data=query_data, headers=headers)
    resp.encoding = 'utf-8'
    resp_data = json.loads(resp.text)
    try:
        trans_result = resp_data["translateResult"][0][0]['tgt']
        print(query, '的解释为:', trans_result)
    except Exception as e:
        print('查询错误')

    if show_all:
        print(resp_data)

if __name__ == '__main__':
	# 构建接受参数的对象
    parser = argparse.ArgumentParser()
    parser.description = 'Command line translation tool'
    # 程序的名称,默认为sys.argv[0],即文件名,后面可以使用 %(prog)s 引用该变量
    parser.prog = 'translate v1.0'

    # 定义必选参数,不加-
    parser.add_argument('query', help='Content to be translated')

    # 定义可选参数,加-或--
    # action:表示出现此参数时如何进行保存,默认为action='store',表示保存输入的值
    # action='store_true'表示出现此参数则保存为True,否则为False,命令行中不能再给值了
    parser.add_argument('-a', '--all', action='store_true', help='show all')
    # 打印关于程序的版本信息,然后退出
    parser.add_argument('-v', '--version', action='version', version='%(prog)s')
	
	# 解析得到参数对象
    args = parser.parse_args()
    query = args.query
    show_all = args.all
    trans(query, show_all)

2.打包

# 最好新建个虚拟环境打包,打出来的包比较小
pip install pyinstaller

# 打包生成一个单独可执行的exe文件,在dist目录下
pyinstaller -F trans.py
# 这个是打包成一个目录,依赖和exe文件都在一个目录里,默认就是-D模式
pyinstaller -D trans.py

# 将exe文件放入python的环境变量中或新增一个环境变量

3.linux打包
打包流程一样,如果报错可能是python安装的时候少设置了参数
centos安装python3:https://blog.csdn.net/weixin_43667990/article/details/96459920

4.演示

C:\Users\77962>trans today
today 的解释为: 今天

C:\Users\77962>trans "hello world"
hello world 的解释为: 你好,世界

C:\Users\77962>trans tiger -a
tiger 的解释为: 老虎
{'type': 'EN2ZH_CN', 'errorCode': 0, 'elapsedTime': 1, 'translateResult': [[{'src': 'tiger', 'tgt': '老虎'}]]}

C:\Users\77962>trans -v
translate v1.0

C:\Users\77962>trans -h
usage: translate v1.0 [-h] [-a] [-v] query

Command line translation tool

positional arguments:
  query          Content to be translated

optional arguments:
  -h, --help     show this help message and exit
  -a, --all      show all
  -v, --version  show program's version number and exit

参考:
argparse模块:https://blog.csdn.net/qq_35696312/article/details/88634451
https://blog.csdn.net/weixin_43667990/article/details/89417822

发布了106 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43667990/article/details/103654460