双开微信+推送≠耗电
写在前面
该方法你必须知道怎么双开了微信,并苦恼于实时推送或耗电问题,不然这篇文章很难啃。
安卓版本的可以离开了。
完美实现推送,收到微信后2秒钟左右手机收到通知,0耗电,杀死微信并不影响推送,和正版微信一样使用。
故事背景
作为自由职业必须及时响应客户,苦于IOS端无法多开微信,工作又必须实时响应,及时推送就成了问题,因为这个问题没能响应客户,还失去了好几个项目。工作台苦恼之余正打算换台手机的时候,右下角闪烁的微信图标给了我灵感。能否通过脚本判断微信图标闪烁或者声音,并推送一条通知到手机上?然后点击通知自动跳转到微信小号?思路没问题,直接开干。
代码实现
我尝试通过判断闪烁的图标来推送消息,问题就是锁屏之后就无法识别,而且我的笔记本平时只远程使用,只能通过笔记本微信发出声音我才知道收到消息,所以这里采用判断声音,来推送通知到手机。
1. 确定设备号
首先你需要确定你的声卡设备号,这段python可以列出当前设备下面所有声卡,并记下编号。
import pyaudio
# 初始化PyAudio
p = pyaudio.PyAudio()
# 获取系统中的声卡设备数量
device_count = p.get_device_count()
# 打印每个设备的信息
for i in range(device_count):
device_info = p.get_device_info_by_index(i)
print("Device {0}: {1}, {2} channels".format(i, device_info['name'], device_info['maxInputChannels']))
# 选择要监听的声卡设备索引
selected_device_index = 0 # 修改为你要监听的声卡设备索引
# 关闭PyAudio
文中例子使用的是Device 2 编号是2,请注意,后面的2 channels也要记住,下面代码需要用到。
channels是0的就不要用了,至少我测试用不了,可能我山寨本只能用立体混音。
2. Pyhton使用PyAudio库
PyAudio 是一个 Python 库,提供了与音频输入和输出设备进行交互的功能。它允许你在 Python 中录制声音、播放声音以及处理音频流。可以录制、播放、处理和设备管理。
import pyaudio
import numpy as np
import time
import requests
# 设定参数
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 48000
CHUNK = 1024
THRESHOLD = 1000 # 设置一个阈值,用于检测声音的强度
TIME_INTERVAL = 10 # 输出时间的间隔(秒)
API_URL = "https://api.day.app/tSe5Wf8zWuXXXXXX/微信小号/收到一条新消息?icon=https://cdn-images.lincloud.pro/blog/images/wechat.jpg&sound=healthnotification&group=微信通知&isArchive=0&url=pkc://"
def run_script():
while True:
try:
# 初始化 PyAudio
p = pyaudio.PyAudio()
# 获取系统中的声卡设备数量
device_count = p.get_device_count()
# 选择要监听的声卡设备索引(请修改以下行,选择合适的声卡设备索引)
selected_device_index = 2 # 修改为你想要监听的声卡设备索引
# 打开选定的声卡设备
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
input_device_index=selected_device_index,
frames_per_buffer=CHUNK)
print("Listening for any sound...")
last_detection_time = 0 # 记录上次检测到声音的时间戳
while True:
# 读取音频数据
data = stream.read(CHUNK)
# 将数据转换为numpy数组
np_data = np.frombuffer(data, dtype=np.int16)
# 计算音频数据的能量
energy = np.sum(np_data ** 2) / len(np_data)
# 如果能量超过阈值,则认为检测到了声音
if energy > THRESHOLD:
# 获取当前时间
current_time = time.time()
# 如果距离上次检测到声音的时间大于等于设定的时间间隔,则输出当前时间并发起GET请求
if current_time - last_detection_time >= TIME_INTERVAL:
# 输出当前时间
print("Sound detected at:", time.strftime("%Y-%m-%d %H:%M:%S"))
# 发起GET请求
response = requests.get(API_URL)
# 打印请求结果
print("GET request status:", response.status_code)
# 更新上次检测到声音的时间戳
last_detection_time = current_time
except Exception as e:
print("An error occurred:", e)
print("Restarting the script...")
finally:
# 停止音频流
if 'stream' in locals() and stream.is_active():
stream.stop_stream()
stream.close()
# 关闭 PyAudio
p.terminate()
run_script()
不能照抄,需要修改的内容有CHANNELS(声道数量值一般是1,2)。RATE(采样率44100,48000)。TIME_INTERVAL(间隔时间10秒推送一次)。selected_device_index(设备编号,第一步获取并记下的设备编号)
脚本解释: 这个脚本主要是监听声卡(脚本是监听立体混音),如果收到微信消息(发出声音)就推送消息(使用Bark,如不懂请参考这篇文章)到手机,最短通知间隔10秒。
实测收到消息几秒钟之后就收到推送。微信无需后台,正真做到和正版微信一样。
可能有人会问为什么不直接识别微信波形文件来推送,这样电脑发出其他声音也不会影响推送,事实是可以的,但是波形文件只有2秒钟,经过测试准确率不高,如果能结合算法优化脚本,是可以实现精准推送,如果哪位大佬愿意优化脚本,或者有更好的实现方式可以留言探讨。
进阶推送
如果成功设置了推送,还可以设置点击推送消息自动跳转到对应的微信小号,非常方便
你需要安装轻松签来修改Bundleurl 参数
注意!这步修改完之后无法被第三方应用调用!比如,无法被游戏或应用调用授权登录等等。
配置方法有两种
- 第一种
以轻松签为例,打开应用-点击需要“多开的app”-查看文件位置-点击xxx.app-查看文件-找到并点击 Info.plist-属性编辑器。
如下图所示,一级一级找到
CFBundleURLType
| --- item 0
| --- CFBundleURLSchemes
| --- itme 1 - weixin
将 weixin 改为 pkc ,保存。
最后签名安装,或者导出IPA格式
在 Safari 输入 pkc:// 即可调用多开应用了。
- 第二种
如果在 info.plist 用属性方式打开找不到 CFBundleURLTypes ,那就自己通过“文本编辑器”打开,拉到最后倒数第二行上面插入,添加以下代码:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>pkc</string>
</array>
</dict>
</array>
好了到这一步就全部结束了,可以开心愉快的玩耍了。看不惯 Bark 的原版红色推送图标的话,可以在 Bark 应用里更换其他的通知图标。
vhxbpcoocp · 2024-09-22 20:38
叼茂SEO.bfbikes.com