利神翻译接口调用文档


一、制作背景

在我的观念里,编程是一个通过查文档解决实际问题、最终不断完善产品的过程,理所应当要借助于网络,否则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()

文章作者: 彭韦浩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭韦浩 !
  目录