[R.M.C] 用python实现微信控制电脑端虾米音乐(1)

前言

这个计划的代号叫RMC,至于什么意思呢,你猜嘿嘿。。

嘛,用微信控制虾米这个想法的起源是:有一天,我躺在宿舍的床上,我们宿舍是标准的上床下桌,我的电脑在下面,插着扬声器在外放音乐,当时随机到一首特别嘈杂的歌,听得很难受,我想切歌,又不想下床orz,实在没办法只好自己下床换了一首歌。。

嗯。。于是呢,我就想,有没有什么方法可以用手机控制我电脑换歌的。当然可以用各种vnc远程控制桌面,但感觉太小题大做了,而且要专门控制鼠标去点击播放键实在有点麻烦,一点都不优雅。我就想如果手机端的虾米能控制电脑端的虾米就好了。。当然,用过电脑版虾米的人都知道,电脑版虾米就是个x(笑。这种功能靠虾米官方肯定是不存在的。。

就在这时,我看到了一篇文章,是使用python+微信来实现运维报警的。他是用微信企业号,使用python向企业号api发送消息,来实现运维报警的。我于是想到,我能不能也弄个微信企业号或公众号什么的,通过给它发消息,来控制我的电脑。

想了想感觉还是可以实现的,于是去学习了一下微信公众号的开发,通过这篇文章,简单了解了微信公众号的开发方法。

先来看看整体的思路:

使用微信发送消息至企业号,企业号转发给我的服务器(这里用新浪SAE),服务器管理着用户发的指令,电脑端程序访问新浪SAE来请求新的指令,然后执行相应操作来控制虾米音乐。

下面是详细的流程图

接下来,我来说下实现微信控制电脑端虾米的具体步骤了。

准备

  1.  申请一个微信企业号(订阅号和服务号理论上都可以,企业号的话比较安全,个人申请的话选组织-》没有组织机构代码证,继续注册
  2.  申请一个新浪SAE云应用
  3.  电脑端需要安装python(我这里使用的是python3.6但SAE上使用的是python2.7
  4.  电脑端需要安装python模块pyautogui用来控制虾米(可以直接在命令行中使用pip install pyautogui命令来安装)

具体步骤

第一步、SAE的基本配置

1、在SAE上创建一个python云应用,这里我给它起名叫wx01

(因为我已经创建过了,所以提示名称已占用)

2、打开应用的管理界面,点数据库与缓存服务-》Memcached-》创建memcached,申请一个最小的空间即可,这个是为接下来做准备,在这一节中暂时不会用到。

3、打开应用的管理界面,点应用-》代码管理-》创建版本

SAE是个好东西,相当于小型的web服务器,我们可以通过网页版的代码编辑器来编辑SAE的代码,也可以使用git或svn来进行代码管理。这里我们为了方便直接使用网页版编辑器。

首先编写config.yaml配置文件,打开网页版编辑器,新建一个文件config.yaml,并将下面的代码复制进去,保存。该配置文件指定了SAE上python使用的模块的版本,如果提示python找不到某某模块一般是这个配置文件设置错了。

name: trystanlei
version: 1

libraries:
- name: webpy 
  version: "0.36"

- name: lxml
  version: "2.3.4"

- name: PyCrypto
  version: "2.6"

...

第二步、微信的对接

登录企业微信后台,企业应用-》自建应用-》创建应用,填写好应用名称,在可见范围中选好自己

创建完后,就可以在应用管理这个界面中看到应用的AgentIdSecret,这两个就是这个应用的标识了。

然后我们点 接收消息设置API接收 

按照根据自己情况设置:

这时候点保存会报错:回调URL测试失败。 别紧张,是因为我们SAE上面还没设置完呢~

我们再打开SAE的在线代码编辑器,我们来写ndex.wsgi这个文件:

# encoding: UTF-8

import sae
import web
import os

from weixinInterface import WeixinInterface # 我们即将创建,不要担心

urls = (
'/weixin','WeixinInterface'
) # 将 "你的域名/weixin" 这个地址指向WeixinInterface这个应用


app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)

app = web.application(urls, globals()).wsgifunc()
application = sae.create_wsgi_app(app)

这里使用的是webpy框架,想了解的话就百度一下吧,这里我们不需要详细的理解它就能实现我们的应用。

现在我们下载企业微信的python加密库,可以在这个连接中找到。将下载的python.zip直接上传到SAE代码库。可以直接在SAE应用的代码管理界面上传。

上传完以后是这样的:

其中WXBizMsgCrypt.py就是企业微信的加密库 Readme.txt和Sample.py是介绍和演示可以右键删除掉。

我们再来创建一个weixinInterface.py文件,在里面写上

# -*- coding: utf-8 -*-
import hashlib
import web
import lxml
import time
import os
import urllib2, json, urllib
from lxml import etree
from WXBizMsgCrypt import WXBizMsgCrypt

sCorpID = 'YOUR_CORPID' # 企业微信的CorpID在 我的企业-》企业信息 中可以找到
AGENTID_RMC = 'YOUR_AGENTID' # 应用的AgentId
SECRET_RMC = 'YOUR_SECRET' # 应用的Secret
sToken = 'Token00000' # 设置接收消息时的Token
sEncodingAESKey = 'EncodingAESKey00000000000000000000000000000' # 设置接收消息时的EncodingASEKey


class WeixinInterface:
    def __init__(self):
        self.app_root = os.path.dirname(__file__)
        self.templates_root = os.path.join(self.app_root, 'templates')
        self.render = web.template.render(self.templates_root)
        self.wxcpt = WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID)

    def GET(self):
        # 获取URL参数
        params = web.input()

        try: # 来自微信的请求
            signature = params.msg_signature
            timestamp = params.timestamp
            nonce = params.nonce
            echostr = params.echostr
            ret, echostr = self.wxcpt.VerifyURL(signature, timestamp, nonce, echostr)

            # 如果是来自微信的请求,则回复echostr
            if ret == 0:
                return echostr
            
        except:
            pass

之后点击全部保存

我们再切换到微信设置接收消息的页面,点击保存试试能不能保存成功吧~

如果保存成功,说明前面的设置都没问题啦 🙂

最后可以看到,接收消息这里显示已启用API接收

好了,现在我们准备工作就做完了。我们下一篇见~

用python实现微信控制电脑端虾米音乐(2)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据