一、制作背景
在我的观念里,编程是一个通过查文档解决实际问题、最终不断完善产品的过程,理所应当要借助于网络,否则Python的几十万个第三方库怎么记得住呢?编程不能是死记硬背教材上的知识点,而是学习一种方法,一种思维。
但在中职学校,由于学生自制力差,不能开外网,只能反复学习教材上的知识,然后完成教材后的习题,我觉得这是一个值得思考的问题。
因此,我开发的项目教学旨在完全脱离教材完成综合项目,我又安装了pylint插件使得学生可以查看本地的文档,但是这又产生了一个新的问题,学生抱怨英语看不懂。
综上所述,我花了老大力气,做了一个翻译接口,这下看不懂的英语可以直接翻译,无需外网,翻译几遍总能记住,这下总没借口了吧。
原理其实很简单,当然不是我的电脑放了一个本地词典,因为大家其实也发现了,这个是可以翻译句子的,而且支持几十种语言。🤠
实际上是通过破解有道词典的翻译接口,最终的翻译服务并不是我提供的,如果某一天接口不能用的,应该就是有道词典的加密系统维护升级了😅
二、接口调用
HTTP 方法:POST
请求URL:http://10.163.72.55:5000/todo1
URL参数:
data:需要翻译的内容
返回:
data{
content:翻译完成的内容
}
三、请求示例
1.Python
from requests import put, get
html=put('http://10.163.72.55:5000/todo1', data={'data': 'I am a student'}).json()
print (html)
2.PHP
<?php
$content = $_POST['content'];
// 解码,Unicode转义(\uXXXX)的编码和解码
function decodeUnicode($str)
{
return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$str);
}
function curlrequest($url,$data,$method='post'){
$ch = curl_init(); //初始化CURL句柄
curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //设置请求方式
curl_setopt($ch,CURLOPT_HTTPHEADER, array( "X-HTTP-Method-Override: $method")); //设置HTTP头信息
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //设置提交的字符串
$document = curl_exec($ch); //执行预定义的CURL
curl_close($ch);
return $document;
}
$url = 'http://10.163.72.55:5000/todo1';
$data = "data=$content";
$return = curlrequest($url, $data, 'put');
// ajax异步返回数据
$a = array();
$a['content'] = $return;
echo json_encode($a);
exit;
?>
四、制作前端窗口
教大家如何制作一个漂亮的前端窗口,既然是做盗版软件就做得像一点。
import requests
import json
from tkinter import Tk,Button,Entry,Label,Text,END
# 对利神翻译接口发起请求,获得数据
class LiShenFanYi(object):
def __init__(self):
pass
def crawl(self,word):
html = requests.put('http://10.163.72.55:5000/todo1', data={'data': word}).json()
return html
# 前段窗口应用程序
class Application(object):
def __init__(self):
self.window = Tk()
self.fanyi = LiShenFanYi()
self.window.title(u'我的翻译') # 设置标题
#设置窗口大小和位置
self.window.geometry('310x370+500+300')
self.window.minsize(310,370)
self.window.maxsize(310,370)
#创建一个文本框
#self.entry = Entry(self.window)
#self.entry.place(x=10,y=10,width=200,height=25)
#self.entry.bind("<Key-Return>",self.submit1)
self.result_text1 = Text(self.window,background = 'azure') # 设置背景颜色
self.result_text1.place(x = 10,y = 5,width = 285,height = 155)
self.result_text1.bind("<Key-Return>",self.submit1)
#创建一个按钮,并为按钮添加事件
self.submit_btn = Button(self.window,text=u'翻译',command=self.submit)
self.submit_btn.place(x=205,y=165,width=35,height=25)
self.submit_btn2 = Button(self.window,text=u'清空',command = self.clean)
self.submit_btn2.place(x=250,y=165,width=35,height=25)
#翻译结果标题
self.title_label = Label(self.window,text=u'翻译结果:')
self.title_label.place(x=10,y=165)
#翻译结果
self.result_text = Text(self.window,background = 'light cyan')
self.result_text.place(x = 10,y = 190,width = 285,height = 165)
# 回车翻译
def submit1(self,event):
#从输入框获取用户输入的值
content = self.result_text1.get(0.0,END).strip().replace("\n"," ")
#把这个值传送给服务器进行翻译
result = self.fanyi.crawl(content)
#将结果显示在窗口中的文本框中
self.result_text.delete(0.0,END)
self.result_text.insert(END,result)
#print(content)
def submit(self):
#从输入框获取用户输入的值
content = self.result_text1.get(0.0,END).strip().replace("\n"," ")
#把这个值传送给服务器进行翻译
result = self.fanyi.crawl(content)
#将结果显示在窗口中的文本框中
self.result_text.delete(0.0,END)
self.result_text.insert(END,result)
print(content)
#清空文本域中的内容
def clean(self):
self.result_text1.delete(0.0,END)
self.result_text.delete(0.0,END)
def run(self):
self.window.mainloop()
if __name__=="__main__":
app = Application()
app.run()