使用 Flask 实现微信公众号自动回复 Bot

人都是被逼出来的,业务突然来了的时候才能感到全速赶工的效率。这里记录一下如何用 10 分钟快速配置一个微信公众号自动回复机器人。 一些准备工作 首先需要关闭微信提供的自动回复功能,然后登录微信公众平台,前往开发者配置的基本配置。 URL :在这里输入你的接口地址,在下方的例子中,是 https://url/wechat。 Token:你可以自己输入 Token,用于验证。 EncodingAESKey:随机生成就好,同样用于验证。 消息加密方式:只要采用了 https 协议,明文模式也已经足够安全。为了便于开发调试我直接使用了明文方式。 快速让后端跑起来 需求很重要。没有必要在部署和非逻辑层上花费太多时间。下面是我使用的框架,在 get_reply(msg) 中写下你的业务逻辑就好。 对于比较复杂的项目,你可以考虑把一些方法拆分单独的文件中。 import hashlib from flask import * import xml.etree.ElementTree as ET app = Flask(__name__, static_url_path='/static') WECHAT_TOKEN = 'YOUR TOKEN' AES_KEY = 'YOUR AES KEY' def get_reply(msg): return 'You can write your own handler here.' def send(to_user, from_user, content): reply = """ <xml><ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag></xml> """ response = make_response(reply % (to_user, from_user, str(int(time....

May 4, 2020 · Bill Chen

使用 Python 自动登录华东师范大学数据库

近期经常需要写一些和华师大数据库交互的小工具,比如导出课程表,获取绩点等。这里提供使用 Python 登录数据库的方法,将登录信息使用 request 包记录在一个 request.session 中。 这里涉及到四个函数。 main():一个示例的交互逻辑 ECNULogin()主要的登录函数 GetCode()用于获取验证码。这里把手动输入的两行注释掉了,如果不想安装tenserflow,则可以注释掉下面的识别部分,手动输入验证码。不过华师大的验证码很好识别。目前我还没有遇到 pytesseract识别失败的情况。 GetRSA()RSA 加密登录信息。这里调用的是华师大数据库中的 js 文件,并使用execjs来调用内部的 strEnc 函数。 from PIL import Image # 手动输入验证码 import pytesseract # 自动识别验证码 from lxml import etree import sys import requests import getpass import execjs # 用于加密 # 记录登录信息的 session s = requests.session() mainurl = 'https://portal1.ecnu.edu.cn/cas/login?service=http%3A%2F%2Fapplicationnewjw.ecnu.edu.cn%2Feams%2Fhome.action' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36', 'Refer': 'https://portal1.ecnu.edu.cn/cas/login?service=http%3A%2F%2Fapplicationnewjw.ecnu.edu.cn%2Feams%2Fhome.action%3Bjs'} def GetRSA(username, password): # 获取 des....

April 15, 2020 · Bill Chen

使用小米路由器 R2D 在局域网内配置 ss/ssr/v2ray

因为 2019-nCov 的蔓延,大概率要在家里呆挺长一段时间,所以试着在路由器上安装了一个全局代理,提升互联网体验。把过程整理了一下放在这里了。 我使用的小米路由器为 R2D,也就是 2015 年推出的带有硬盘的小米路由器。不过大多数其他型号的小米路由器同样支持 ssh 权限,流程大体相同。 切换至开发版系统 小米路由器默认的系统版本为稳定版, 不支持开启 ssh 权限。所以需要先升级成开发版的系统。在 http://www1.miwifi.com/miwifi_download.html 可以下载到对应型号的开发版系统: 然后在地址栏输入 http://www.miwifi.com 进入小米路由器的管理后台,在「常用设置」-「系统状态」中选择「手动升级」,选择刚刚下载的开发板系统: **值得一提的是,使用这种方式更新系统可以保留硬盘中的所有数据,不会清空。**更新完系统后路由器会自动重启,重启后可以再次进入管理后台检查路由器的系统状。 开启小米路由器的 ssh 权限 确定系统已经是开发版后进入小米路由器的开放平台 http://d.miwifi.com/rom/ssh 登录小米账号,可以检索到已经绑定了账号的路由器和初始 root 密码。点击下载工具包可以得到开启 ssh 权限的二进制文件 miwifi_ssh.bin。 接着按照官方的引导,将下载的工具包bin文件复制到U盘(FAT/FAT32格式)的根目录下,保证文件名为miwifi_ssh.bin;断开小米路由器的电源,将U盘插入USB接口;按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键。 等路由器再次重启之后在局域网内的终端上使用 ssh [email protected] 连接路由器。发现已可连接,使用网页给出的 root 密码登录即可。 配置 ss/ssr/v2ray 接着在路由器上配置 v2ray。我这里使用的是一个集成了许多工具的工具箱(项目地址 https://github.com/monlor/MIXBOX)。在路由器上执行 : sh -c "$(curl -kfsSl https://dev.tencent.com/u/monlor/p/MIXBOX/git/raw/master/install.sh)" && source /etc/profile &> /dev/null 安装成功之后输入mixbox 进入工具箱: 输入 3,在未安装插件列表中选择 shadowsocks。安装成功后回到主菜单,选择已安装插件,选择 shadowsocks(该插件可以配置 ss、ssr、v2ray 三种协议)。这里还有许多其他实用的插件可以安装,可以根据需要使用。 进入插件页面,按照提示依次配置节点即可。注意 vmess:// 格式的链接暂时不支持直接导入。 在启动的时候有四种模式可以选择: 这里的黑名单和白名单似乎和通常情况下所指的代理模式不太一样,不过经过实践一般情况下推荐使用白名单模式,可以让局域网内的所有大陆网址直连,境外网址走代理。 Now enjoy.

February 11, 2020 · Bill Chen

计算机网络 Computer Networks​ 💻 期末复习总提纲

平时不学习,期末火葬场。 一周时间靠王道考研和各路 pdf 自学计网,留下的提纲都在这里了。全是干货。全文 pdf 可以在这里下载:http://cloud.billc.io/s/xNHarppQPGi3gSz 文章很长,建议在左侧打开目录导航。 水平有限,如有错误,敬请指正。祝你备考愉快。 Collected by Bill Chen, 2019.12, East China Normal University Chapter 1 Overview 7 - layer OSI Model 计算机网络:将分散的,具有独立功能的计算机系统通过通信设备与线路连接起来有完整的软件实现资源共享和信息传递 计算机网络是互联的,自治的 概念和组成 计算机网络的功能 数据通信 数据在信道上的传输 资源共享 硬件、软件和数据 分布式处理 多台计算机共同处理同一个任务 提高可靠性 负载均衡(多台计算机可以更亲密的沟通) 计算机网络的组成 硬件、软件、协议 工作方式 - 边缘部分、核心部分 功能组成 - 通信子网(OSI下三层通信子网)、资源子网网(上三层的处理) 分类 广域网WAN、城域网MAN、局域网WAN、个人区域网PAN 按照使用者分类:公用网、专用网(军队、政府、铁路、公安) 按照交换技术:电路交换、报文交换、分组交换 按照拓补结构分: 按传输方式:广播式、点对点 标准化 标准化相关工作 法定标准:Eg. OSI 事实标准:Eg. TCP/IP 指定标准的流程: RFC (Request For Comments):经过四个阶段 Internet Draft > Proposed Standard > (Draft Standard) > Internet Standard 因特尔草案 - 建议标准 - 因特尔草案 组织 国际标准化组织 ISO 国际电信联盟 ITU 国际电气电子工程师协会 IEEE - 学术标准、IEE802相关标准 Internet 工程任务组 IETF 传输指标 速率:数据传输率 / 比特率 b/s kb/s Mb/s Gb/s Tb/s 1Byte = 8bit 带宽:原本:某个信号具有的频带宽度,即最高频率与最低频率之差 计算机网络中:指传送数据的能力,最高数据率,网络设备所支持的最高速度 单位:比特率 b/s kb/s Mb/s 带宽变大:指的是能够注入的数据变多了,不能说是比特传输的速度变快了 吞吐量 (throughput):单位时间内通过某个网络或接口的数据量 受到网络的带宽或网络的额定速率的限制 吞吐量指的是实际的数据量(不是最大承载能力 时延:Latency,数据从网络一端到另一端所需要的时间 发送时延(数据长度/信道带宽),传播时延(信道长度/电磁波的传播速率),排队时延(等待输出/输入链路可用的时间),处理时延(校验、寻找出口的时间) 高速链路只能改变发送时延 时延带宽积:实验带宽积=传播时延 * 带宽 描述:某段链路现在有多少比特 往返时延:RTT 指的是从发送方发送数据开始,到发送发收到接收方的确认,总共经历时延 可以通过ping命令测试RTT RTT 越大,可以发送的数据越多(在等待收到接收方的确认之前) = 末端处理时间 + 传播时延 * 2 利用率:分为信道利用率 & 网络利用率 信道利用率:有数据通过的时间 / 有+无数据通过的时间 网咯利用率:信道利用率的加权平均值 通常:利用率特别高的时候会增加时间,反倒会降低速度 分层结构 Background:将网络通信的问题化为小问题解决...

January 10, 2020 · Bill Chen