python 自制搜狗翻译工具

一、登陆搜狗翻译页面,分析请求

1、url地址:https://fanyi.sogou.com/
在里面输入中文翻译

在这里插入图片描述
可以看出,请求的地址为 https://fanyi.sogou.com/reventondc/translateV1

2、输入英文翻译
在这里插入图片描述

综合上述分析,当改变里面内容时,Form Data(向后台发送的数据)中to、uuid、s的值在变化,其他几个没有变化

二、找到请求的JS

在这里插入图片描述
主要是 https://dlweb.sogoucdn.com/translate/pc/static/js/app.05eb3174.js
备注:现在这个地址是最新的,和图片上的js地址不一样

三、从JS中分析相关内容

在这里插入图片描述

从 uuid的值 “a953132c-77de-4029-95df-d592d4cd9bfa” 可以分析出来,这个大体是 16 进制的格式,于是从下面开始找相应的算法:

在这里插入图片描述
F 的加密算法,主要是下面有一些 md5 的字眼,所有我大致推测应该是做的md5格式的加密

四、构造Form Data 信息
#!/usr/bin/env python
#-*- coding:utf-8 -*-

import math, random, hashlib, re,requests

def translate(content):
    '''
    加密:var F = s("" + L + O + B + "front_9ee4f0a1102eee31d09b55e4d66931fd")
    L:from
    O:to
    B:文本内容
    '''

    # 判断输入是中文还是英文
    zhPattern = re.compile(u'[\u4e00-\u9fa5]+')  # 匹配中文
    match = zhPattern.search(content)  #判断用户输入的是不是中文
    if match:
        O = 'en'
    else:
        O = 'zh-CHS'

    #构建uuid
    M = []
    for i in range(9):
        M.append(hex(math.floor((random.random() + 1) * 65536)).split('0x1')[1])
    uuid = M[0] + M[1] + '-' + M[2] + '-' + M[3] + '-' + M[4] + '-' + ''.join(M[-3:])

    #构建加密算法
    sign = '' + 'auto' + O + content + '41ee21a5ab5a13f72687a270816d1bfd'   #这个是最新的字符串
    m = hashlib.md5()
    m.update(sign.encode('utf-8'))

    data = {
        "from": "auto",
        "to": O,
        "client": "pc",
        "fr": "browser_pc",
        "text": content,
        "pid": "sogou-dict-vr",
        "useDetect": "on",
        "useDetectResult": "on",
        "needQc": 1,
        "uuid": uuid,
        "oxford": "on",
        "isReturnSugg": "on",
        "s": m.hexdigest(),
    }

    #发送相关请求
    url = "https://fanyi.sogou.com/reventondc/translateV1"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
    }
    res = requests.post(url=url,headers=headers,data=data).json()
    print(res['data']['translate']['dit'])

# translate('hello world')
translate('我的故乡')

五、利用tkinter组件构建可视化窗口
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from tkinter import *
import math, random, hashlib, re,requests

def translate():
    '''
    加密:var F = s("" + L + O + B + "front_9ee4f0a1102eee31d09b55e4d66931fd")
    L:from
    O:to
    B:文本内容
    '''

    entry1.delete(0, END)
    content = entry.get()

    # 判断输入是中文还是英文
    zhPattern = re.compile(u'[\u4e00-\u9fa5]+')  # 匹配中文
    match = zhPattern.search(content)  #判断用户输入的是不是中文
    if match:
        O = 'en'
    else:
        O = 'zh-CHS'

    #构建uuid
    M = []
    for i in range(9):
        M.append(hex(math.floor((random.random() + 1) * 65536)).split('0x1')[1])
    uuid = M[0] + M[1] + '-' + M[2] + '-' + M[3] + '-' + M[4] + '-' + ''.join(M[-3:])

    #构建加密算法
    sign = '' + 'auto' + O + content + '41ee21a5ab5a13f72687a270816d1bfd'
    m = hashlib.md5()
    m.update(sign.encode('utf-8'))

    data = {
        "from": "auto",
        "to": O,
        "client": "pc",
        "fr": "browser_pc",
        "text": content,
        "pid": "sogou-dict-vr",
        "useDetect": "on",
        "useDetectResult": "on",
        "needQc": 1,
        "uuid": uuid,
        "oxford": "on",
        "isReturnSugg": "on",
        "s": m.hexdigest(),
    }

    #发送相关请求
    url = "https://fanyi.sogou.com/reventondc/translateV1"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
    }
    res = requests.post(url=url,headers=headers,data=data).json()
    response = res['data']['translate']['dit']
    rest.set(response)


def sougou_translate():
    # 创建窗口
    root = Tk()

    # 窗口标题
    root.title("中英互译")

    # 窗口大小、小写x
    root.geometry('390x100+500+300')

    # 标签控件
    lable = Label(root, text="请输入要翻译的内容:", font=("微软雅黑"), fg="red")
    lable.grid()
    lablel1 = Label(root, text="翻译后的内容为:", font=("微软雅黑"), fg="green")
    lablel1.grid()

    global rest
    rest = StringVar()

    # 输入控件
    global entry
    entry = Entry(root, font=("微软雅黑", 14))
    entry.grid(row=0, column=1)
    # 翻译之后的结果
    global entry1
    entry1 = Entry(root, font=("微软雅黑", 14), textvariable=rest)
    entry1.grid(row=1, column=1)

    # 按钮控件   sticky对齐方式  N S E W - 上下左右
    button = Button(root, text="翻译", font=("微软雅黑", 13), command=translate)
    button.grid(row=2, column=0, sticky=W,padx=10)
    button1 = Button(root, text="退出", font=("微软雅黑", 13), command=root.quit)
    button1.grid(row=2, column=1, sticky=E,padx=10)

    # 消息循环、显示窗口
    root.mainloop()

if __name__ == '__main__':
    sougou_translate()
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值