Explore

记一次Python服务端与公众号的连接

liyunjian · 2月1日 · 2020年

起因

我在github上看到一个自动点击墨墨记单词分享连接的Python程序,正好近来有在慢慢看Python的视频,于是疯狂补课,直接跳到了视屏课的框架部分orz,看完后并没有记住大多数的代码,操作步骤倒是模糊的记得。

开始动手

在电脑上安装Py环境,很顺利。在服务器上安装了Python3.7.2环境,由于一开始是Py2的环境运行着这个网站面板,造成了不小的麻烦。

在成功运行了这个程序后,我的电脑被http代理网站ban了,无论如何打不开代理网站,好在服务器没有被ban,于是在电脑端的测试急急忙忙搬到了服务器。运行的很好,但问题是每天都需要我手动把链接和一小部分固定的命令敲进去,觉得很麻烦。

是否可以使用公众号接收消息,如果公众号收到了消息,将消息转发给服务器,然后服务器自动拼接命令后储存到一个txt文件。再使用Shell脚本定时运行这个文件,运行完毕自动清空文件,等待着下一次的记录。

 
#接入微信公众平台
import falcon
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply, ImageReply

class Connect(object):

    def on_get(self, req, resp):
        query_string = req.query_string
        query_list = query_string.split('&')
        b = {}
        for i in query_list:
            b[i.split('=')[0]] = i.split('=')[1]

        try:
            check_signature(token='这里是token', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
            resp.body = (b['echostr'])
        except InvalidSignatureException:
            pass
        resp.status = falcon.HTTP_200

    def on_post(self, req, resp):
        xml = req.stream.read()
        msg = parse_message(xml)
        if msg.type == 'text':
            reply = TextReply(content="服务器已收到!请勿重复发送。", message=msg)
            b = msg.content
            xml = reply.render()
            resp.body = (xml)
            resp.status = falcon.HTTP_200

            a = "前缀"  #这里是一个命令拼接,可能并不是全部适用
            c = "后缀"
            link = a + b + c
            with open('link.txt','r') as f:
            	f = open('记录拼接好的命令txt文件路径','a',encoding='utf-8')
            	f.write(str(link)+'\n')
            	f.close()
        
app = falcon.API()
connect = Connect()
app.add_route('/', connect)
#有关requirements.txt的文件
certifi==2018.4.16
chardet==3.0.4
falcon==1.4.1
idna==2.6
numpy==1.14.5
opencv-python==3.4.1.15
optionaldict==0.1.1
Pillow==5.1.0
pycrypto==2.6.1
python-dateutil==2.7.3
python-mimeparse==1.6.0
requests==2.18.4
six==1.11.0
urllib3==1.22
waitress==1.1.0
wechatpy==1.7.0
xmltodict==0.11.0

在微信公众号接入页面设置好token。,在代码里填写token,使用uwsi方式运行程序后。发送消息给公众号,公众号立刻返回了“服务器已收到!”测试通过。

然后添加了两条Shell命令。并且定时。
清空文件的Shell命令:cat /dev/null > (文件路径)
运行文件的Shell命令:eval $(cat 路径)

至此就解决啦,但是这么多东西结合的方式,实在是繁琐。实在是技术不够就拿各种东西来凑。

0 条回应