昨天看到一篇关于Linux下的桌面词典的文章,于是就想实现一个Windows命令行下的翻译软件。下面,我将一步步的来实现这个简单的小软件。


准备

按照瀑布开发模型,需要进行一些列的流程,在这里由于是博主自己使用,所以就省略了需求分析,系统设计,编码设计这些阶段,直奔主题了。

素材

博主本次试验的环境大致如下:

  • 操作系统: Windows 7 64位
  • 编程语言:Python (版本2.7.11)
  • IDE: PyCharm 专业版

依赖

如上,根据实验环境,所需的依赖就不难理解了。不过除了接口,也没有用到什么第三方的库。所以依赖也是很简单的了。就是百度翻译的公共API接口。待会再介绍。

接口

至于什么是接口。与其说是一种规范,我个人觉得对咱们开发者而言,了解怎么使用就可以了,所以把它当做是一个函数就可以了。我们传给这个接口一些参数,然后处理返回的结果。这就可以了!够白话了吧:-)

地址

本次试验,依赖的接口是国内互联网公司三巨头之一的百度的一个公共的翻译接口。如下:

http://fanyi.baidu.com/v2transapi

待会通过get的方式或者post的方式进行与服务器的交互,就能完成今天的实验了。

参数

#
# 执行文本翻译
# query 要翻译的文本
# from 原语言语种 默认:中文
# to 目标语种 默认:英文

如上,了解了这三个参数就足够了。

返回值解析

我这里模拟请求了一下服务器,获得了其返回的一串JSON数据。大致的串如下:

编码及测试

现在万事俱备,只欠一个能编码的程序员了。:-)

Python处理JSON串简直是酸爽,特别的快速!

功能代码

# coding:utf-8
import sys

reload(sys)
sys.setdefaultencoding('utf8')
#    __author__ = '郭 璞'
#    __date__ = '2016/9/29'
#    __Desc__ = 实现命令行下的翻译程序实现

from urllib2 import *
import json
import sys

def getHtml(type=True, text='English'):
    if type:
        translate_url = "http://fanyi.baidu.com/v2transapi?query=%s"%text
    else:
        translate_url = "http://fanyi.baidu.com/v2transapi?from=zh&to=en&query=%s" % text
    data = urlopen(translate_url).read()
    return data

def main():
    # 这里使用encode为gbk的方式是为了在Windows的DOS界面下不发生乱码的情况
    flag = raw_input("英文转汉语输入1,汉语转英文输入0:".encode('gbk')).encode('utf8')
    # 应该考虑到windows 的DOS界面下输入的字符编码为gbk,要想被代码正确的用utf-8解码,首先先用gbk解码,还原为愿字符
    querytext = raw_input("请输入您想查询的内容\n".encode('gbk')).decode('gbk')
    if flag == 1:
        data = getHtml(type=False, text=querytext)
    else:
        data = getHtml(text=querytext)
    data = json.loads(data)
    # 分析json数据串,定向的获取到相应的解释信息
    # 首先打印出单词的简单含义
    print "\n翻译结果:".encode("gbk")
    print data['trans_result']['data'][0]['dst']

if __name__ == '__main__':
   main()

运行脚本

为了能直接的在命令行下使用,就得在环境变量里面进行一下设置了。不然,每次都得到这个文件路径下,那样岂不是很麻烦,这很明显不符合Pythonic的风格嘛。

于是写了一个脚本:

@echo off
python D:/mycommand/translate.py

是不是超简单呢?

环境变量

接下来就是把这个批命令bat文件的路径添加到环境变量中了。为了引起不必要的麻烦,我添加到了当前用户的环境变量中,这样就算是以后要更改,也不会影响到系统的环境变量了。

具体的方法,网上有很多参考资料,这里不过多的进行阐述了。

结果展示

最激动人心的时刻,到了。下面你将看到命令行下的精彩的世界。完善了上面步骤,就拥有了一个命令行下的翻译软件咯。:-)

英语转汉语

汉语转英语

总结

最后,来总结一下本次试验。

代码难度一般般,也可以说很简单了。就是些基础的Python内置模块的使用,额外需要掌握的就是接口,以及接口的使用等知识了。

另外,本实验可拓展性很强,因为这个接口内部又可以判断源语言的类属的功能,也就是说我们可以完成更加智能的翻译实现。不管什么语言,都可以被翻译,如果要指定目标语言的话,加个参数就即可。

DOS界面下的翻译软件制作的更多相关文章

  1. 在DOS界面下快速进入目录的技巧

    在DOS界面如果想进入某一目录还是比较困难的,尤其是有长目录名和中文目录名的时候. 比如:要进入“D:/工具箱/杀毒软件”这个目录. 1.在Windows下进入这个目录. 2.在地址栏输入 C:/WI ...

  2. dos界面下执行java文件将错误输出到一个文本小技巧

    如果dos下执行java出现错误,把错误记录到一个文档 正确时如图,输出结果为hello,我把String的s改为小写,出现错误,用2>命令输出到error.txt在当前目录就出现了error. ...

  3. win7系统下dos界面无法自由调整大小

    刚开始在win7系统,在dos界面下做MySQL的实验,很多数据不能显示界面上,只能显示固定的大小,以为这是系统的原因,后来在网上查找了一些资料.终于发现可以自由调节dos界面大小的方法.下面给出截图 ...

  4. Java在DOS命令下的运行及其API文档制作过程

    该文档主要描述java程序在DOS命令下的运行,以及一些常用的命令 常用DOS命令: d: 回车 盘符切换 dir(directory):列出当前目录下的文件以及文件夹 md (make direct ...

  5. 在DOS行下设置静态IP

    A.设置静态IP  CMD  netsh  netsh>int  interface>ip  interface ip>set add "本地链接" static ...

  6. 菜鸟之linux问题之图形界面和dos界面的登录问题

    1.安装完linux系统后,图形化界面的用户名和密码是之前安装的时候设置的. 如果想切换到linux的dos窗口快捷键是:ctrl+alt+F2 由dos窗口切换到linux图形界面快捷键是:ctrl ...

  7. Oracle在dos命令下导出导入

    DOS下运行的命令,也可以加参数在SQL/PLUS环境下运行简单例子实现 单表备份(前提库的结构是一样的)导出:开始钮->运行->输入CMD->进入DOS界面EXP 用户名/密码@连 ...

  8. 如何在Windows命令行(DOS界面)中调用 编译器 来编译C/C++源程序

    首先说明一下背景: 为什么要在DOS界面编译C/C++源程序?有很多现成的开发环境(IDE)如:vs, vc++等,这些开发环境集成了编译,调试,使用起来很方便,而且图形化操作界面,简洁明了.但是在开 ...

  9. Java在dos界面运行java源文件编译成功,但运行虚拟机时出现错误:“找不到或无法加载主类”的问题

    (一)首先检查环境变量配置有没有问题, 1PATH为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 2CLASSSPATH为.;%JAVA_HOME%\lib\dt.jar; ...

随机推荐

  1. 功能整合(一):滚动条的变相隐藏、js控制div的渐变显示、滚动条监听

    1.滚动条的变相隐藏 思路: 1.  把body的横向,纵向的超出部分隐藏,宽设置100%:高设置100%.就没有body的滚动条了, 2.  然后把最外层的div的宽设置的比body的宽宽一点,把d ...

  2. 详解vue移动端 下拉刷新

    看完这篇文章,相信大伙也一样可以,做出一个自己的刷新,加载的组件 说这个功能之前,大家要先了解一下,要怎么触发滚动条事件. 一定要注意,所有滚动事件都必须要满足这个条件,横向滚动条也一样, 只要满足子 ...

  3. 计蒜客NOIP模拟赛(2) D2T2紫色百合

    [问题描述] “牵着你的手的是她,路边开满了紫色的百合花……” 你从梦中醒来,却依然忘不了梦中的她百合花,每朵百合花都有一个权值,在二进制下写成一行‘1’,第i朵紫色百合的权值在二进制下写成i个‘1’ ...

  4. 【HNOI2017】影魔

    题目描述 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄. 每一个灵魂,都有着自 ...

  5. 【网络流】【BZOJ1061】【NOI2008】志愿者招募

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 题意:问你如何购买志愿者使得满足题意的总费用最小. 解题思路:首先,由于志愿者存在的 ...

  6. 【USACO08NOV】奶牛混合起来Mixed Up Cows

    题目描述 约翰有 N 头奶牛,第 i 头奶牛的编号是 S i ,每头奶牛的编号都不同.这些奶牛最近在闹脾气, 为表达不满的情绪,她们在排队的时候一定要排成混乱的队伍.如果一只队伍里所有位置相邻的奶牛 ...

  7. Elasticsearch 创建、更新、删除文档、处理冲突

    ----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...

  8. ELK 6.2.4搭建

    开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch.Logstash和Kiabana三个开源工具组成.官方网站:https://www.elastic.co/p ...

  9. java集合之LinkedList源码解读

    源自:jdk1.8.0_121 LinkedList继承自AbstractSequentialList,实现了List.Deque.Cloneable.Serializable. LinkedList ...

  10. js去掉最后一个字符

    console.log(("0,1,2,3,4,5,".slice(0,-1)))