山木_HK
2018-04-20 12:11:26浏览 3363
实现的主要功能
1.通过微信文件助手控制电脑关机、重启及查询微信控制程序是否启动
2.通过微信文件助手实现微信聊天机器人功能
3.控制电脑播放音乐,包括播放指定音乐、下一首、停止播放的基本功能
主要涉及的知识
1.python基础语法
2.python实现微信接口的itchat模块
3.正则表达式
4.图灵机器人的使用
import itchat
import os
import re
import time
import shortuuid
import requests
import random
通过微信文件助手控制电脑关机、重启及查询微信控制程序是否启动
直接在微信文件助手中发送:状态、关机、重启即可实现具体功能。
toUser = msg['ToUserName'] #获取信息发送者的名称
content = msg['Content'] #获取所发送的信息
if toUser == 'filehelper' and content == '状态':
itchat.send('#在线#',toUserName = 'filehelper')
if toUser == 'filehelper' and content == '关机':
os.system("shutdown -s -t 0")
if toUser == 'filehelper' and content == '重启':
os.system("shutdown -r -t 0")
通过微信文件助手实现微信聊天机器人功能
发送给机器人的信息必须以#开头以辨别信息是发送给机器人的,这涉及了python正则表达式的运用。
此外还涉及了图灵机器人的使用,使用前必须注册 链接:http://www.tuling123.com/
message = msg['Content'] # 获取微信文件助手发送过来的信息
tousername = msg['FromUserName']
path1 = '#.*'
flag0 = re.search(path1,content)
if toUser == 'filehelper' and flag0 != None:
fmessage_path = '#(.*)'
fmessage = re.compile(fmessage_path).findall(content)
url = 'http://www.tuling123.com/openapi/api'
data = {
'key': '9d05b70c91dc4c8da53588347e9e4224',
'info': fmessage[0],
'userid': shortuuid.uuid()
}
response = requests.post(url, data=data) # 获取请求
r_message = response.json()['text'] # 返回的信息
itchat.send('########################' + r_message + '\n########################', toUserName = 'filehelper')
time.sleep(0.5)
控制电脑播放音乐,包括播放指定音乐、下一首、停止播放的基本功能
music_dir是我音乐存放的路径,该路径有具体情况而定
通过结束Windows.Media.BackgroundPlayback.exe进程达到停止播放的目的
向微信文件助手发送播放音乐、播放下一首、停止播放即可实现具体功能,播放指定音乐中播放与音乐名称之间有一个空格:播放 [指定音乐名称]
播放指定音乐时可不需要写完全名,程序会根据发送的信息从所有音乐中进行具体字段匹配
music_dir = 'D:\Music'
music_list = os.listdir(music_dir) #获取目标目录下的文件及目录名并存放于music_list的列表中
if toUser == 'filehelper' and content == '播放音乐':
music_path = music_dir + '\\' + music_list[0] #默认播放第一首
os.system(music_path) #打开相应的MP3文件
#匹配以m开头的字符串
s_path = '播放 .*'
flag = re.search(s_path,str(content)) #字符串匹配,匹配不成功返回None
if toUser == 'filehelper' and flag != None:
name_path = '播放 (.*)' #用于匹配歌曲名称
name = re.compile(name_path).findall(content) #得到的name是一个列表
name_path = '.*' + name[0] + '.*'
music_yn,k = None,None #第一个用来判断是否查找到歌曲名称,第二个为True时说明列表中找不到歌曲
i = 0
while(music_yn == None and k == None):
music_yn = re.search(name_path,music_list[i]) #找到后便退出此时i+1的位置即为歌曲所在位置(下标)
i += 1
if i == (len(music_list) - 1): #找不打歌曲名称,停止循环遍历查找
k = True
music_path = music_dir + '\\' + music_yn.group() #将字符串组合成相应的路径以打开MP3文件
try:
os.system(music_path) #打开相应的MP3文件
except OSError:
print("OSError !!")
#播放下一首音乐,随机播放下一首
if toUser == 'filehelper' and content == '播放下一首':
name1 = random.choice(music_list) #从music_list列表中随机选取一个值,在这里name1被赋予的是一个字符串
music_path1 = music_dir + '\\' + name1
os.system(music_path1)
#停止播放音乐
if toUser == 'filehelper' and content == '停止播放':
os.system('taskkill /f /im "Windows.Media.BackgroundPlayback.exe"')
完整代码
import itchat
import os
import re
import time
import shortuuid
import requests
import random
@itchat.msg_register(itchat.content.TEXT)
def remote_control(msg):
toUser = msg['ToUserName'] #获取信息发送者的名称
content = msg['Content'] #获取所发送的信息
if toUser == 'filehelper' and content == '状态':
itchat.send('#在线#',toUserName = 'filehelper')
if toUser == 'filehelper' and content == '关机':
os.system("shutdown -s -t 0")
if toUser == 'filehelper' and content == '重启':
os.system("shutdown -r -t 0")
#文件助手机器人
message = msg['Content'] # 获取微信文件助手发送过来的信息
tousername = msg['FromUserName']
path1 = '#.*'
flag0 = re.search(path1,content)
if toUser == 'filehelper' and flag0 != None:
fmessage_path = '#(.*)'
fmessage = re.compile(fmessage_path).findall(content)
url = 'http://www.tuling123.com/openapi/api'
data = {
'key': '9d05b70c91dc4c8da53588347e9e4224',
'info': fmessage[0],
'userid': shortuuid.uuid()
}
response = requests.post(url, data=data) # 获取请求
r_message = response.json()['text'] # 返回的信息
itchat.send('########################' + r_message + '\n########################', toUserName = 'filehelper')
time.sleep(0.5)
# 远程控制计算机播放音乐
music_dir = 'D:\Music'
music_list = os.listdir(music_dir) #获取目标目录下的文件及目录名并存放于music_list的列表中
if toUser == 'filehelper' and content == '播放音乐':
music_path = 'D:\Music' + '\\' + music_list[0] #默认播放第一首
os.system(music_path) #打开相应的MP3文件
#匹配以m开头的字符串
s_path = '播放 .*'
flag = re.search(s_path,str(content)) #字符串匹配,匹配不成功返回None
if toUser == 'filehelper' and flag != None:
name_path = '播放 (.*)' #用于匹配歌曲名称
name = re.compile(name_path).findall(content) #得到的name是一个列表
name_path = '.*' + name[0] + '.*'
music_yn,k = None,None #第一个用来判断是否查找到歌曲名称,第二个为True时说明列表中找不到歌曲
i = 0
while(music_yn == None and k == None):
music_yn = re.search(name_path,music_list[i]) #找到后便退出此时i+1的位置即为歌曲所在位置(下标)
i += 1
if i == (len(music_list) - 1): #找不打歌曲名称,停止循环遍历查找
k = True
music_path = music_dir + '\\' + music_yn.group() #将字符串组合成相应的路径以打开MP3文件
try:
os.system(music_path) #打开相应的MP3文件
except OSError:
print("OSError !!")
#播放下一首音乐,随机播放下一首
if toUser == 'filehelper' and content == '播放下一首':
name1 = random.choice(music_list) #从music_list列表中随机选取一个值,在这里name1被赋予的是一个字符串
music_path1 = music_dir + '\\' + name1
os.system(music_path1)
#停止播放音乐
if toUser == 'filehelper' and content == '停止播放':
os.system('taskkill /f /im "Windows.Media.BackgroundPlayback.exe"')
def main():
itchat.auto_login(hotReload = True) #登陆微信
itchat.run()
if __name__ == '__main__':
main()