一、前言
先展示视频演示效果:
在日常生活当中我们离不开微信的使用,据统计,
就每日情况而言,微信日使用时长在“4小时以上”的受访者人数最多,占比为25%;
就每周使用微信天数来看,周使用天数在“7天”的受访者人数最多,占比为88.1%[1]
可见,我们每天使用微信的时间是非常长的,而我们使用微信普遍是用来通信、传达信息,简单称之为“聊天”。既然如此,我们是否可以在使用微信聊天的同时还能学习英语呢?
我们尝试在聊天时,将需要发送的信息,转换成英文再发送。
二、技术路线
由于技术限制,这里只在微信PC端实现。
- 获取微信聊天输入框位置
- 复制将要发送的文本信息
- 翻译文本信息
- 发送翻译之后的信息
2.1 获取聊天输入框位置
这里可以参考我之前的一篇博客,里面详细讲解了获取微信聊天输入框位置的方法。
用python识别微信消息界面聊天输入框位置
这一步是非必需的,它的作用是在微信输入框没有获取焦点的时候也同样可以使用,在代码中我省略了这一步。
2.2 复制将要发送的文本信息
这里通过一种最原始直接的方式来实现:程序通过按键Ctrl+A和Ctrl+C进行全选和复制。
使用pynput
库可以实现操控电脑的鼠标和键盘
from pynput.keyboard import Controller as KeyController
key = KeyController()# 键盘按下并释放 Ctrl+A键
key.press(Key.ctrl_l)
key.press('a')
key.release('a')
key.release(Key.ctrl_l)
2.3 翻译文本信息
这里调用腾讯云的机器翻译API进行翻译。(不用花钱,免费额度已经够用了。)
文本翻译的每月免费额度为5百万字符。[2]
如果想了解API的详细使用方法可以查看官方文档。
如果不想看文档的话,我在代码中已经配置好可以使用了,前提是你需要先有一个腾讯云密钥,获取方法如下:
- 进入密钥管理界面,(进去之后需要先登录账户)
- 新建密钥
新建好密钥之后就能得到SecretId和SecretKey。这两个参数需要加到代码里面。
2.4 发送翻译之后的信息
对翻译好文本信息进行复制,在微信聊天输入框按键Ctrl+V进行粘贴,然后发送。
以上这些步骤包括按键都是由程序自动完成,你只需要在合适的时机触发程序即可。
至于如何触发?可根据自己喜好来设置按键,比如设置为Alt+Enter发送中午+英文,原本的Enter保持不变。
对于如何获取剪贴板的文本,这里使用pyperclip
库实现
import pyperclip as pc
text = pc.paste() # 获取剪贴板内容
pc.copy('text') # 复制文本
三、总结
- 这是一种可行的利用微信聊天来学习英语的方式,虽然不能成为我们专门唯一的学习英语的方式,但是在日常聊天的同时顺便学习一下英文,这也无伤大雅。
- 我们在使用这种方式的时候也要考虑对方的感受,如果面对的是上司、同事或者不熟悉的人,最好不要这样做,选择在跟家人、好朋友或者熟悉的人聊天时才使用这种方式。
四、代码
4.1 安装第三方库。
安装 pynput 和 pyperclip:
pip install pynput
pip install pyperclip
安装腾讯云SDK,也就是代码中用到的tencentcloud
pip install tencent-cloud-sdk
上面这条语句会安装腾讯云的所有产品,如果你想只安装单个腾讯云产品,请参考官方文档。
4.2 注意事项
- 程序运行请必须先获取腾讯云密钥中的SecretId和SecretKey,并且写入代码。
- 原始触发程序的按键是Alt_R+Enter,如果需要更换,可以自行修改,但是有些按键可能会出现bug。
4.3 完整代码
import time
import json
import pyperclip as pc
from pynput.keyboard import Key
from pynput.keyboard import Controller as KeyController
from pynput.keyboard import GlobalHotKeys
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.tmt.v20180321 import tmt_client, modelsSecretId = ''
SecretKey = '' # 在腾讯云获取
assert SecretId and SecretKey
cred = credential.Credential(SecretId, SecretKey)
httpProfile = HttpProfile()
httpProfile.endpoint = 'tmt.ap-guangzhou.tencentcloudapi.com'clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
client = tmt_client.TmtClient(cred, "ap-guangzhou", clientProfile)
req = models.TextTranslateRequest()key = KeyController()def set_key_ctrl_abc(k):time.sleep(0.15) # 不能省略key.press(Key.ctrl_l)key.press(k)key.release(k)key.release(Key.ctrl_l)time.sleep(0.15) # 不能省略def press_and_release(k):key.press(k)key.release(k)def translate(text):params = {'SourceText': text,'Source': 'auto','Target': 'en','ProjectId': 0}req.from_json_string(json.dumps(params))resp = client.TextTranslate(req)return resp.TargetTextdef learn_english():set_key_ctrl_abc('a')set_key_ctrl_abc('c')originalText = pc.paste()content = translate(originalText)pc.copy(originalText + '\n' + content)set_key_ctrl_abc('v')press_and_release(Key.enter)if __name__ == '__main__':print('program has started')with GlobalHotKeys({ # 监听键盘 Alt_R+Enter'<alt_gr>+<enter>': learn_english}) as listener:listener.join()
参考:
[1]. https://www.thepaper.cn/newsDetail_forward_13662510
[2]. https://cloud.tencent.com/document/product/551/35017