趁着这几天有时间,就简单的学了一下tornado框架,简单做了个自动翻译的页面

仅为自己学习参考,不作其他用途

文件夹目录结构如下:

.
├── server.py
├── static
│   └── css
│   └── bootstrap.min.css
└── templates
└── index.html

static:主要存放一些css,js及图片文件

templates:主要存放html页面文件

页面如下:(可能有点丑)

主要思路是:

本地启动tornado框架服务 - 浏览器访问127.0.0.1:8888(可自定义端口号) - 返回首页页面 - 输入想要翻译的内容 - 点击翻译 - 后台调用有道翻译的api并将结果返回 - 将结果显示在第二个框中

主要解释就放在代码中

服务端代码:

文件server.py

#coding=utf-8
import os
import json
import time
import hashlib
import random
import requests
import tornado.ioloop
import tornado.web # 首次请求直接返回index.html页面
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
# 这是下面点击翻译按钮触发的请求类
class EnglineHandler(tornado.web.RequestHandler):
  # 通过get()函数,可以获取get请求的参数,还有post()函数
def get(self):
     # get_argument()是用来获取get请求的参数
msg = self.get_argument('msg', 'msw')
     # 调用有道翻译的api,并接受翻译结果
result = self.req_data(msg)
     # 将结果返回给请求的地方
self.write(result) def req_data(self, kw):
     # 以下是破解和获取有道翻译api的过程
salt = str(random.randint(1, 10) + time.time() * 1000)
s = "fanyideskweb%s%ssr_3(QOHT)L2dx#uuGR@r" % (kw, salt)
sign = self.md5Encode(s)
youdao_url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
data = {
"i": kw,
"from": "AUTO",
"to": "AUTO",
"client": "fanyideskweb",
"salt": salt,
"sign": sign,
"keyfrom": "fanyi.web",
}
headers={
"Cookie": "OUTFOX_SEARCH_USER_ID=-536406613@103.255.228.99; JSESSIONID=aaa3-OEP9rPK9_KECL_Cw; OUTFOX_SEARCH_USER_ID_NCOO=1519777863.8355908; ___rl__test__cookies=%s" % str(time.time()*1000),
"Referer": "http://fanyi.youdao.com/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36",
}
res = requests.post(youdao_url, headers=headers, data=data).text return self.filter_content(res)
   # 将但会结果进行处理
def filter_content(self, value):
res = json.loads(value)
result = ''
result += res.get('translateResult')[0] + '\n\n\n'
if not res.get('smartResult'):
return result
result += '相关内容:\n'
for data in res.get('smartResult')['entries']:
result += (data + '\n')
return result
  # 将参数加密
def md5Encode(self,msg):
m = hashlib.md5()
m.update(msg.encode('utf-8'))
return m.hexdigest()
#
if __name__ == "__main__":
   # 运行tornado服务配置
settings = {
"template_path":os.path.join(os.path.dirname(__file__), "templates"), #模板路径
"static_path":os.path.join(os.path.dirname(__file__), "static") , #静态文件路径
"debug":True
}
app = tornado.web.Application([
(r"/", MainHandler),
(r"/engline", EnglineHandler)
], **settings)
app.listen(8888)
tornado.ioloop.IOLoop.instance().start()

开启命令: 直接运行 python3 server.py,然后打开浏览器就可以看到页面

index.html部分代码:

<html>

<head>
<title>fanyi-m</title>
<link type="text/css" rel="stylesheet" href="/static/css/bootstrap.min.css" /> </head> <style type="text/css">
* {
margin: 0;
padding: 0;
}
html {
height: 100%;
}
.buttonc button{
margin:20px 10px;
}
</style> <script src="http://runjs.cn//js/sandbox/jquery/jquery-1.8.2.min.js"></script> <body>
<nav class="navbar navbar-inverse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul>
</nav>
<div class="container">
<div class="row">
<div class="col-md-5">
<textarea id="lineso" class="form-control" rows=""></textarea>
</div>
<div class="col-md-2 buttonc" style="text-align:center">
<button type="button" class="btn btn-default btn-lg active">auto</button>
<button onclick="engline()" type="button" class="btn btn-primary btn-lg active">翻译</button>
</div>
<div class="col-md-5">
<textarea id="linest" class="form-control" rows=""></textarea>
</div>
</div> </div>
</body> <script>
// 没什么用,主要是美化导航栏的
$('.navbar-nav li').click(function(){
$(this).addClass('active').siblings().removeClass('active') })
// 翻译按钮的单击事件
function engline(){
var oldmsg = $('#lineso').val()
  // 判断输入框是否为空
if(oldmsg == null || oldmsg == '' || oldmsg == undefined){
alert('input content Please')
}else{
  //alert(oldmsg)
    // 不为空则向该地址,发起ajax的get请求
$.ajax({
url:"http://127.0.0.1:8888/engline",
data : {'msg':oldmsg},
type : 'GET',
timeout : 3000,
success: function(data){
if(data){
$('#linest').val(data)
}else{
alert('not result')
}
},
error: function(XMLHttpRequest, textStatus, errorThrown){
//查看错误信息
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
}) };
} </script> </html>

以上内容:仅为个人学习参考,不得用于商业用途

tornado框架学习及借用有道翻译api做自动翻译页面的更多相关文章

  1. C++调用有道翻译API实现在线翻译之发声篇

    大概半月前写了一篇博文:C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译, 得到大家的热情捧场,有人看了文章说要是能发声不是更好,我觉得说的也是哈,能听到专家的标准发音,那该是多美的 ...

  2. Java接口测试之使用有道翻译API

    写接口测试框架,找了有道翻译API来当测试数据 package com.httpGetTest; import java.beans.Encoder; import java.net.URLEncod ...

  3. [Python] 使用有道翻译API

    Python 使用youdao (有道翻译)API 想写一个给自己记录背单词状况的软件,需要获取英文单词的中文释义(基本功能).考虑使用有道翻译的API实现获取英文单词的中文释义的方法. 获取API_ ...

  4. 记微信开发(有道翻译api)

    记微信开发(有道翻译api) 记微信开发(有道翻译api) 效果: 有道翻译api申请: 地址:http://fanyi.youdao.com/openapi code: <?php/** * ...

  5. 有道翻译API

    轻奢侈品_百度百科 轻奢侈品 有道翻译API 有道翻译API申请成功 API key:72763558 keyfrom:lexus-studio

  6. 利用有道翻译Api实现英文翻译功能

    有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果.       通过调用有道翻译API数据接口,您可以在您的网站或应用中更灵活地定制翻译和查词功能. 第一步: ...

  7. C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译

    使用C++开发一个在线翻译工具,这个想法在我大脑中过了好几遍了,所以就搜了下资料,得知网络上有很多翻译API,这里我选择我平时使用较多的有道翻译API进行在线翻译工具开发的练习.翻译API返回的结果常 ...

  8. Android使用有道翻译API实如今线翻译功能

    在Android应用中,加入在线翻译的功能,这里调用的是有道翻译的API. 使用有道翻译API.首先要申请一个key,申请地址为:path=data-mode">有道翻译API申请地址 ...

  9. 调用有道翻译API

    前两天朋友说起NASA开放了数据API,今儿突然想起从来没用过外部提供的API,然而简单用得多的貌似是有道词典API,就像试试,本来觉得应该挺简单的,用urllib模块很快就实现了. 不过测试时才发现 ...

随机推荐

  1. (转)解决OSX上面PHP curl SSLRead()

    原创 2016年05月19日 19:39:04 标签: php / curl / osx 830 这个问题的原因是因为OSX curl默认使用 SecureTransport 而不是OpenSSL. ...

  2. linq 实现对象映射

    public static string GetPrintList(string data) { string[] _data = data.Split(','); string Order_No = ...

  3. centos7下安全访问远程服务器

    1. 添加普通账号 众所周知,linux下的root拥有最高权限,可以执行任何命令.在使用root身份操作时,有时的一个不注意就可能将非常重要的删除(最可怕的是 rm -rf /).而linux不像w ...

  4. debug protractor

    HTAir:protractor-cucumber-typescript kbladewht$ node --inspect-brk=0.0.0.0:1229 node_modules/protrac ...

  5. hive的使用

    1,前言 书接上回,接着对上一个hive安装后环境下的hive使用.

  6. django之 使用py文件操作django项目中的表

    要想在一个另外的py文件中操作django,可以使用如下的代码 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE",' ...

  7. 面向连接的tcp 编程

    from socket import * serverSocket=socket(AF_INET,SOCK_STREAM) serverSocket.bind(("",8899)) ...

  8. <记录> axios 模拟表单提交数据

    ajax 可以通过 FormData 对象模拟表单提交数据 第一种方式:自定义FormData信息 //创建formData对象 var formData = new FormData(); //添加 ...

  9. django 过滤器,标签

    过滤器: <p>{{ date|date:"Y-m-d" }}</p> {#2018-05-28,date是当前时间#} <p>{{ l|len ...

  10. jmeter 的安装与配置

    环境配置: 操作系统:win10 JDK:1.8 jmeter:5.0 jmeter 是 java 程序.所以要运行 jmeter 需要先安装配置 jdk. 1.安装配置 jdk 官方网站下载 jdk ...