[Python] 使用有道翻译API
Python 使用youdao (有道翻译)API
想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能)。考虑使用有道翻译的API实现获取英文单词的中文释义的方法。
获取API_KEY
需要在 youdao 开发者站点获取API_KEY,其实获取的过程还是很容易的。
使用basicDict为基类
以前写好了一个 英文字典的基类,把API_KEY直接写到代码里面是不好的,为了做到程序与数据分离,该类实现了通过直接获取、通过URL获取和通过配置文件获取3种方式导入API_KEY。该类的代码:basicDict.py,并且依赖一个处理配置文件的类:configFile.py ,我们使用的这个基类具有以下的功能和特性:
- 支持python2和3
- 当初始化没有API_KEY的时候会抛出异常提示
- 多种方式初始化获取API_KEY
在这里我们还要实现:
- 获取网易api接口的返回结果(json格式)
- 对API_KEY进行检查,如果无效,则抛出异常
实现完成后的代码为:youdao_API.py ,使用代码时候务必也要下载这两个依赖的文件,是的我都帮你打包好了。
下面我们将介绍如何实现上述的两个功能,以及继续保持特性“支持python2&3”。
继承、初始化、变量定义
在定义这个类的时候,是要继承 基类basicDict 的:
from basicDict import basicDict
class youdao_API(basicDict):
# ...
在初始化过程中,获取API_KEY的过程已经在基类中的init函数中完成了,所以在定义新的init函数的时候,调用基类的函数:
def __init__(self, API_KEY = 'DEFAULT',API_URL= 'DEFAULT',API_PATH = "DEFAULT", name='youdao'):
super(youdao_API, self).__init__(API_KEY, API_URL,API_PATH,name)
pass
可以看到在对name变量初始化的时候,命名为'youdao'了,终于有了一个有意义的名字了。
另外定义了几个变量:
class youdao_API(basicDict):
url_preffix = "http://fanyi.youdao.com/openapi.do?keyfrom=youdaoWord&key="
url_suffix = "&type=data&doctype=json&version=1.1&q="
current_json_text = ''
current_error_code = 0
12-11-2016更新!!
我发现了一个问题,在
url_preffix = "http://fanyi.youdao.com/openapi.do?keyfrom=youdaoWord&key="
这个语句里面,youdaoWord 是我自己申请API时候的应用名称
别人申请的应该不是这个名称
自己用的时候一定要换成自己的!!
两个和url有关的变量使用在网络请求中,current_json_text为存储当前的json文本内容,而current_error_code存储当前的错误代码,默认值为0,就是没有错误,以上两个变量会在每次获取新的词的json内容时候更新。
获取json文本
网络请求通过 requests 模块完成,其代码如下:
def get_json(self,word, print_JSON = False):
url = self.get_url(word)
net_request = requests.get(url)
json_content = net_request.text
self.current_json_text = json_content
if print_JSON:
print(json_content)
pass
self.check_API_KEY(json_content)
return json_content
用到了获取url的函数,该函数根据查询的关键词(中文或者英文)构造出URL:
def get_url(self,word,print_URL = False):
url = self.url_preffix + self.API_KEY + self.url_suffix + self.urlencode(word)
if print_URL:
print(url)
pass
return url
另外对于中文,不能直接在url中使用中文字符,要进行urlencode,这里需要根据python版本不同调用不同的函数:
def urlencode(self,word,print_RESULT = False):
if sys.version_info <= (2,8):
# in python 2
import urllib
encoded_word = urllib.quote(word)
pass
elif sys.version_info <= (3,8):
# in python 3
from urllib.parse import quote
encoded_word = quote(word)
pass
else:
pass
if print_RESULT:
print(encoded_word)
return encoded_word
pass
关于判断python版本的详细说明,查看这里(博文待完成)。
注意在这个方法中还调用了检查API_KEY有效性的函数,根据的是:
如果API_KEY无效,那么后续的操作显然无法继续进行,所以会抛出异常,函数实现如下:
def check_API_KEY(self,json_text, print_CODE = False):
json_content = json.loads(json_text)
code = json_content['errorCode']
if print_CODE:
print(code)
pass
if code == 50:
msg = 'InValid ' + self.name + ' API_KEY!'
raise RuntimeError(msg)
self.current_error_code = code
pass
这几个函数实现了通过有道的api获取与查询词有关的json文本的功能。
测试
写了个主函数测试一下:
def main():
e = youdao_API()
print(e.name)
print(e.API_KEY)
e.get_url('数学',print_URL = True)
json_text = e.get_json('数学')
print(json_text)
# e.check_API_KEY('{"query":"book","errorCode":50}')
pass
if __name__ == "__main__":
main()
结果:
[Python] 使用有道翻译API的更多相关文章
- python调用有道翻译api实现翻译
通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...
- C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译
使用C++开发一个在线翻译工具,这个想法在我大脑中过了好几遍了,所以就搜了下资料,得知网络上有很多翻译API,这里我选择我平时使用较多的有道翻译API进行在线翻译工具开发的练习.翻译API返回的结果常 ...
- 记微信开发(有道翻译api)
记微信开发(有道翻译api) 记微信开发(有道翻译api) 效果: 有道翻译api申请: 地址:http://fanyi.youdao.com/openapi code: <?php/** * ...
- 有道翻译API
轻奢侈品_百度百科 轻奢侈品 有道翻译API 有道翻译API申请成功 API key:72763558 keyfrom:lexus-studio
- tornado框架学习及借用有道翻译api做自动翻译页面
趁着这几天有时间,就简单的学了一下tornado框架,简单做了个自动翻译的页面 仅为自己学习参考,不作其他用途 文件夹目录结构如下: . ├── server.py ├── static │ └─ ...
- 利用有道翻译Api实现英文翻译功能
有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果. 通过调用有道翻译API数据接口,您可以在您的网站或应用中更灵活地定制翻译和查词功能. 第一步: ...
- C++调用有道翻译API实现在线翻译之发声篇
大概半月前写了一篇博文:C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译, 得到大家的热情捧场,有人看了文章说要是能发声不是更好,我觉得说的也是哈,能听到专家的标准发音,那该是多美的 ...
- Java接口测试之使用有道翻译API
写接口测试框架,找了有道翻译API来当测试数据 package com.httpGetTest; import java.beans.Encoder; import java.net.URLEncod ...
- Android使用有道翻译API实如今线翻译功能
在Android应用中,加入在线翻译的功能,这里调用的是有道翻译的API. 使用有道翻译API.首先要申请一个key,申请地址为:path=data-mode">有道翻译API申请地址 ...
随机推荐
- Fzu oj2194星系碰撞(排序+并查集+路径压缩)
Problem 2194 星系碰撞 Accept: 14 Submit: 48Time Limit: 30000 mSec Memory Limit : 327680 KB Proble ...
- 解决 Xamarin 拖拽Plain Text 于Layout上时 出现 “The layout could not be loaded:java.lang.System.arraycopy([CI[CII)V” 错误
右键项目属性
- ACM之Java速成(2)
acm中Java的应用 Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特点: (1) 最明显的好处是,学会Java,可以参加Java Challenge ...
- Java基础(42):Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用,后者必须先实例化后用实例调用)
package lsg.ap.april4th2; /* 知识点:1.Getter and Setter 的应用 2.局部变量与成员变量(也可叫做全局变量) 3.Static关键字的用法 a.成员变量 ...
- (三)开关检测来控制LED灯的亮灭
开关检测案例一: 具体电路图如下: K1--K4闭合,控制 D1—D4 亮灭 产生的问题: 1.关于 R8 R9 R7 R10 的阻值选择问题,倘若太大的话, 比如10K 不管开关断开还是闭合,好像 ...
- php类与对象简单操作
<?php /* * Created on 2015-8-25 * * To change the template for this generated file go to * Window ...
- paper 5:支持向量机系列二: Support Vector —— 介绍支持向量机目标函数的 dual 优化推导,并得出“支持向量”的概念。
paper 4中介绍了支持向量机,结果说到 Maximum Margin Classifier ,到最后都没有说“支持向量”到底是什么东西.不妨回忆一下上次最后一张图: 可以看到两个支撑着中间的 ga ...
- highcharts 实例
<script src="../../Scripts/jquery-1.7.2.min.js" type="text/javascript">< ...
- SSH+DWZ、JQuery-UI ,swfobject.embedSWF属性与用法,IE下日期控件被flash控件挡住
---恢复内容开始--- 最近在做SSH+DWZ(JQuery-UI)项目,在用到图表问题的时候,出现在IE下面,日期控件被flash被挡住而不能选取日期情况,经在网络搜查,现在解决办法如下: 1.首 ...
- C# 时间现实问题(12小时制与24小时制)
最近在修改项目中遇到时间问题,12小时制与24小时制的问题,想再次跟各位同仁提个醒. yyyy-MM-dd HH:mm:ss------大写的HH为24小时制 yyyy-MM-dd hh:mm:ss- ...