• 做一个英译中的命令行工具


    python实现,调用了百度翻译和金山词霸的接口

    baidu_translate.py
    百度翻译实现

    # -*- coding:utf-8 -*-
    
    import time
    from urllib import parse
    import hashlib
    import requests
    
    
    class BaiduTranslate(object):
    
        def __init__(self):
            self.appid = '百度开发者appid'
            self.key = '百度开发者appkey'
            self.url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
            self.headers = {
                'Content-Type': 'application/x-www-from-urlencoded'        
            }
    
        def get_sign(self, q, salt):
            
            str1 = self.appid + q + salt + self.key
            sign = hashlib.md5(str1.encode('utf-8')).hexdigest()
    
            return sign
    
        def do_translate(self, q, type_=0):
            """q: 待翻译字符;
            type_: 翻译类型。0 表示英文转中文,1 表示中文转英文, 2 表示自动选择"""
    
            lang_list = [('en', 'zh'), ('zh', 'en'), ('auto', 'auto')]
            from_lang, to_lang = lang_list[type_]
            
            salt = str(round(time.time()))
            sign = self.get_sign(q, salt)
            params = {
                'q': q,
                'from': from_lang,
                'to': to_lang,
                'appid': self.appid,
                'salt': salt,
                'sign': sign
            }
    
            result = self.send_req(self.url, params)
            translate_result = self.process(result)
    
            return translate_result
    
        @staticmethod
        def process(result_json):
    
            ret = result_json
            if 'error_code' not in result_json:
                result = result_json['trans_result']
                ret = result[0]['dst']
    
            return ret
    
        def send_req(self, url, params):
            """发送请求,返回结果 json"""
            req = requests.post(url, params=params, headers=self.headers)
            res = req.json()
    
            return res
    
    
    if __name__ == '__main__':
    
        word = 'tear'
        type_ = 0
        tl = BaiduTranslate()
        data = tl.do_translate(word, type_)
        print(data)
    
    

    jinshan_translate.py
    金山词霸接口实现

    # -*- coding:utf-8 -*-
    
    """
    使用金山词霸接口实现翻译
    """
    
    import requests
    from urllib import parse
    
    
    class JinshanTranslate(object):
    
        def __init__(self):
            self.base_url = 'https://dict-mobile.iciba.com/interface/index.php'
            self.params = {
                'c': 'word',
                'm': 'getsuggest',
                'is_need_mean': 0
            }
    
        def do_translate(self, q, type_=None):
            """q 是待翻译的词语,可以是英语也可以是中文。
            type_ 没有用,是为了跟百度的翻译接口保持一致"""
    
            self.params['word'] = q
            url = self.base_url + '?' + parse.urlencode(self.params)
            req = requests.get(url)
            res = req.json()
            ret = '(无结果)'
            if res['status'] != 1:
                ret = res
            elif res['message']:
                key = res['message'][0]['key']
                paraphrase = res['message'][0]['paraphrase']
                if key != key:
                    ret = f'({key}) {paraphrase}'
                else:
                    ret = paraphrase
    
            return ret
    
    if __name__ == '__main__':
    
        translator = JinsanTranslate()
        result = translator.do_translate('tear')
        print(result)
    
    

    整合两个,以实现同时获取两个接口的翻译

    translator.py

    # -*- coding:utf-8 -*-
    
    import os
    import sys
    from baidu_translate import BaiduTranslate
    from jinshan_translate import JinshanTranslate
    
    
    class Translation(object):
    
        def __init__(self, translate_object):
            self.translator = translate_object()
    
        def translate(self, q, type_=0):
            """Call do_translate method"""
    
            ret = self.translator.do_translate(q, type_)
            return ret
    
    
    if __name__ == '__main__':  
    
        argvs = sys.argv
        word = ''
        type_ = 0
        if len(argvs) < 2:
            print('参数不足,需要输入待翻译的字符')
        elif len(argvs) == 2:
            word = argvs[1]
        else:
            word, type_ = argvs[1:3]
            type_ = int(type_)
    
        t1 = Translation(BaiduTranslate)
        data1 = t1.translate(word, type_)
    
        # 保存到本地文件
        log_file_path = os.path.join(os.path.dirname(sys.argv[0]), 'query_log.log')
        log_file = open(log_file_path, 'a', encoding='utf-8')
        log_file.write('
    ')
        log_file.write('-'*60)
        print(f'待翻译词语: {word}')
        print()
        print(f'百度翻译结果: {data1}')
        log_file.write(f'
    {word}: {data1}
    ')
        log_file.flush()
        t2 = Translation(JinshanTranslate)
        data2 = t2.translate(word)
        print(f'金山词霸结果:{data2}')
        log_file.write(f'{word}: {data2}')
        log_file.close()
    
    

    使用命令:

    # python translator.py文件路径 待翻译单词
    # 如下:
    python3 /mnt/e/temp/Translation/translator.py tear
    

    为前面的命令设置一个别名,编辑 ~/.bashrc 文件,添加

    alias trans='python3 /mnt/e/code/python/Translation/translator.py'
    

    执行 source ~/.bashrc 使其生效,就可以使用 trans 单词 的格式来执行翻译,如下:

    trans tear
    

    结果如下:

    (本文完)
    --------------------------------------------------------------------------------------------------------------------------
    致虚极,守静笃

    使用我的阿里云幸运券,购买阿里云ECS有优惠:阿里云幸运券
    >>>>> 腾讯云新用户优惠 <<<<<
  • 相关阅读:
    离开页面时提示用户
    返回顶部
    【转】 MySQL主从(Master-Slave)复制
    判断是否到达指定时间,可以精确到秒
    【转】tomcat优化-有改protocol 和 缓存 集群方案
    【转】Spring+Websocket实现消息的推送
    【转】SpringMVC整合websocket实现消息推送及触发
    【转】java即时消息推送
    大型网站对图片的下载,存放,及压缩管理
    简单的linux压力测试工具webbench
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/15340703.html
Copyright © 2020-2023  润新知