命令行查字典

有道+命令行

这个功能本身在我的公众号上首先实现的,欢迎关注我的公众号

LinkedList

有道 API

  点击 http://fanyi.youdao.com/openapi?path=data-mode 进行申请 有道翻译 API 即可利用 有道翻译 词库,如下图,提交相关信息,即可实现。

LinkedList

python

  分别利用 Python2 与 Python3 实现 命令行 翻译功能

所要利用 の 模块
  1. sys 作 命令行 接收 参数
  2. urllib 作 获取 数据
  3. json 作 解析 json
实现

  利用 有道 API 的 数据格式 分析 -- JSON 获取 我们需要的数据 实现 Python2 版 代码


# -*- coding: utf-8 -*-

import urllib2
import json

# 这里最大问题 即 仅仅支持 py2
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def youdao(word):
    qword = urllib2.quote(word)
    ID = '你的 id'
    KEY = '你的 key'
    baseurl = r'http://fanyi.youdao.com/openapi.do?keyfrom=' + ID + '&key=' + KEY + '&type=data&doctype=json&version=1.1&q='
    url = baseurl+qword
    resp = urllib2.urlopen(url)
    resp.encoding = 'utf-8'
    fanyi = json.loads(resp.read())
    if fanyi['errorCode'] == 0:
        if 'basic' in fanyi.keys():
            trans = u'%s:\n%s\n%s\nWeb Explanation:\n%s' % (fanyi['query'], ''.join(fanyi['translation']), ''.join(
                fanyi['basic']['explains']), ''.join(fanyi['web'][0]['value']))
            print trans
        else:
            trans = u'%s:\nBase Translation:%s\n' % (
                fanyi['query'], ''.join(fanyi['translation']))
            print trans
    else:
        return u'Sorry,Spelling %s is Error...[ErrorCode is %s]' % (word, fanyi['errorCode'])

实现 Python3 版 代码


import urllib.parse
import urllib.request
import json
import sys

def youdao(word):
    qword = urllib.parse.quote(word)
    ID = '你的 id'
    KEY = '你的 key'
    baseurl = r'http://fanyi.youdao.com/openapi.do?keyfrom=' + ID + '&key=' + KEY + '&type=data&doctype=json&version=1.1&q='
    url = baseurl+qword
    resp = urllib.request.urlopen(url)
    resp.encoding = 'utf-8'
    fanyi = json.loads(resp.read().decode('utf-8'))
    if fanyi['errorCode'] == 0:
        if 'basic' in fanyi.keys():
            trans = u'%s:\n%s\n%s\nWeb Explanation:\n%s' % (fanyi['query'], ''.join(fanyi['translation']), ''.join(
                fanyi['basic']['explains']), ''.join(fanyi['web'][0]['value']))
            print(trans)
        else:
            trans = u'%s:\nBase Translation:%s\n' % (
                fanyi['query'], ''.join(fanyi['translation']))
            print(trans)
    else:
        return u'Sorry,Spelling %s is Error...[ErrorCode is %s]' % (word, fanyi['errorCode'])

if __name__ == '__main__':
    # 支持 命令行 调用
    word = sys.argv[1]
    youdao(word)
完成效果

LinkedList

需要改进的地方

这样做会出现延迟 (待解决),输出(打印)可以格式化的更加好看,例如更加清晰,更加高亮等等。
  Refer: http://lazynight.me/3378.html

Comments !

Pages

Categories

Tags