이 글에서는 주로 Python을 사용하여 번역 소프트웨어를 구현하는 방법에 대해 설명합니다. 코드를 모아서 사용해 보시기 바랍니다. .
저는 이틀 전에 핑 형제님이 여자친구를 위해 번역 소프트웨어를 써주셨는데, 정말 프로그래머로서의 로망을 느꼈습니다. 요청을 학습할 때 유사한 데모를 수행했습니다. Baidu Translate에 게시물 요청을 보내서 해당 코드를 더욱 최적화하고 오늘의 번역 소프트웨어를 사용하여 대화형 인터페이스를 추가했습니다.
먼저 다들 사진으로 느껴보시죠
프로그램의 기능은 매우 간단합니다. 번역기 모든 번역기는 단어와 문장을 번역하고, PyQt5 모듈을 사용하여 인간-컴퓨터 상호 작용을 구현하고, 요청 모듈을 사용하여 요청을 보내고, 번역 결과를 사용자에게 반환합니다.
바이두 번역을 예로 사용#🎜 🎜 #
페이지 정보를 보려면 자유롭게 번역하세요.
사진을 보시면 게시물 요청임을 알 수 있으며, 요청 헤더 데이터도 사진에 선명하게 표시되어 있습니다.
위의 데이터를 추가해야 합니다. 여기서 simple_means_flag는 고정 수량이고 쿼리는 번역할 단어를 나타냅니다. 이 정보를 기반으로 간단한 코드를 작성하여 테스트합니다.
import requests headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"} post_data={ 'query': 'Ahab杂货铺', 'from': 'zh', 'to': 'en', 'sign': '413120.175857', 'token':'64d8ce70799b54833f56b43f9d6eb3b4' } post_url="https://fanyi.baidu.com/v2transapi" r=requests.post(post_url,data=post_data,headers=headers) print(r.content.decode())
실행 후 다음 결과가 출력됩니다.
위 오류의 원인은 두 매개변수 sign과 token이 엉망이기 때문입니다. 먼저 토큰에 대해 이야기해 보겠습니다. 바이두번역 홈페이지 소스코드에서 발견:
타임스탬프가 동기화되지 않아 바이두번역 홈페이지에 직접 요청하여 얻은 토큰은 현재 표시되는 토큰값을 수동으로 복사할 수 없습니다. 웹 페이지를 열고 코드의 토큰에 할당합니다.sign 매개변수는 번역된 내용을 기반으로 프런트엔드에서 생성됩니다. 전송된 요청의 쿼리 내용과 로그인이 일치하지 않으면 수신된 응답은 오류가 됩니다. 다음으로 할 일은 Baidu Translate 표시를 깨는 것입니다. sign은 js 파일에서 생성됩니다. 아래 그림은 sign을 생성하는 js 파일입니다.
将这个代码放在格式化工具中重新排版一下,找到 sign 执行函数的代码,再用 execjs,执行这段 js 代码,在计算过程中还需要 gtk 的值,这个值在翻译首页获取一下就可以。
js = js.replace(
上边的步骤完成以后我们就可以愉快的进行翻译了。
图形化界面用的是 pyQt5 这个模块,实现起来不难。
class Demo(QWidget): def __init__(self, parent=None): super().__init__() elf.setWindowTitle('翻译软件-公众号: Ahab杂货铺') self.Label1 = QLabel('原文') self.Label2 = QLabel('译文') self.LineEdit1 = QLineEdit() self.LineEdit2 = QLineEdit() self.translateButton1 = QPushButton() self.translateButton2 = QPushButton() self.translateButton3 = QPushButton() self.translateButton1.setText('百度翻译') self.translateButton2.setText('有道翻译') self.translateButton3.setText('谷歌翻译') self.grid = QGridLayout() self.grid.setSpacing(12) self.grid.addWidget(self.Label1, 1, 0) self.grid.addWidget(self.LineEdit1, 1, 1) self.grid.addWidget(self.Label2, 2, 0) self.grid.addWidget(self.LineEdit2, 2, 1) self.grid.addWidget(self.translateButton1, 1, 2) self.grid.addWidget(self.translateButton2, 2, 2) self.grid.addWidget(self.translateButton3, 3, 2) self.setLayout(self.grid) self.resize(400, 150) self.translateButton1.clicked.connect(lambda : self.translate(api='baidu')) self.translateButton2.clicked.connect(lambda : self.translate(api='youdao')) self.translateButton3.clicked.connect(lambda : self.translate(api='google')) self.bd_translate = baidu() elf.yd_translate = youdao() self.gg_translate = google() def translate(self, api='baidu'): word = self.LineEdit1.text() if not word: return if api == 'baidu': results = self.bd_translate.translate(word) elif api == 'youdao': results = self.yd_translate.translate(word) elif api == 'google': results = self.gg_translate.translate(word) else: raise RuntimeError('Api should be <baidu> or <youdao> or <google>...') for result in results: self.LineEdit2.setText(result)</google></youdao></baidu>
相关教程:Python视频教程
위 내용은 Python은 번역 소프트웨어를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!