0x0 杂谈
暑假里面除了在看书以外,还在维护 whtsky 的 WeRoBot 这个项目。WeRoBot 是他高一用 Python 写的一个微信的公众号开发框架,由于高考的原因他暂停了一段时间的维护。
上个学期在我的极力鼓吹下,我们一起用它申报了学院的创新创业项目,希望能得到一些经费用来继续维护。最终虽然经费不多,但是我们仍然在暑假开始之前开始了新版本的开发。
这篇文章我主要是想记录一下自己用 WeRoBot 制作进行微信公众号开发的过程,其实是非常有趣的。( ˙˘˙ )
0x1 谈谈需求
那么到底我们要做一个怎样的公众号呢?这里我要引见一个新的项目。
在上一个暑假,whtsky 在暑假作业中用 Python3.4 + 出现的新特性协程(Asyncio)写了一个 DHT 爬虫,并且把抓到的种子信息做成了一个资源站,并且取名为 傻狍子。我们的公众号便是为傻狍子开发的,我们将把用户发给我们的一切信息作为检索条件,调用傻狍子的 API 来获取所有符合的种子信息,然后把信息返回给用户。
0x2 开始干
首先,我们需要整理一下 ShaPaoZi 的 API。
我们的目的是从傻狍子搜索想要的种子信息,所以我们只需要搜索的这个 API。
这个 API 的调用方法一目了然,不多赘述。
然后我们开始写真正的公众号部分。由于 WeRoBot 现在的新版本还在开发,而我又不打算有旧的代码,所以直接从 GitHub 克隆 develop 分支的代码。1
2
3
4
5
6# Life is short so let's just download one depth
git clone https://github.com/whtsky/WeRoBot --depth=1
cd WeRoBot
python setup.py install
cd ..
sudo rm -R WeRoBot
安装好了之后我们来创建一个 app.py,具体内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53# -*- coding: utf-8 -*-
from werobot import WeRoBot
import requests
import time
token = 'YourToken'
encoding_aes_key = 'YourKey'
app_id = 'YourID'
robot = WeRoBot(token=token,
encoding_aes_key=encoding_aes_key,
app_id=app_id)
def search(message):
url = 'http://www.shapaozi.me/api/search/%s' % message.content
result = requests.get(url).json()
return_value = ''
return_value += '搜索到 %d 个结果:\n' % result['total']
for page in range(1, result['max_page'] + 1):
if page > 1:
result = requests.get(url + ('/page/%d' % page)).json()
for r in result['results']:
return_value += '=' * 5
return_value += '\n'
r['last_seen'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(r['last_seen']))
r['length'] = '%dMB' % int(r['length'] / 1024 / 1024)
return_value += '名称: %s\n' % r['title']
return_value += '大小: %s\n' % r['length']
return_value += '记录时间: %s\n' % r['last_seen']
return_value += '详情页: http://www.shapaozi.me/detail/%s\n' % r['infohash']
return_value += '=' * 5
return_value += '\n'
return return_value
def hello(message):
return '欢迎关注超级可爱的 ShaPaoZi ( ˙˘˙ )\n请直接回复查询内容。'
from bottle import Bottle
from werobot.contrib.bottle import make_view
app = Bottle()
app.route('/robot',
['GET', 'POST'],
make_view(robot))
我们总共设计了两个 handler,hello 用来发送欢迎信息,而 search 用来把用户发送的每一条消息当做搜索内容去傻狍子查询,再把查询结果调整一下返回给用户。
是不是非常的简单!最后我们使用 Bottle 来做 WEB 框架,并把访问路径设置成 /robot,这样我们的公众号就开发好了!
0x3 部署
最终我们需要把这个服务部署到服务器上,首先用 gunicorn 把服务先跑起来,当然你也可以用其他的 WSGI Server。1
setsid gunicorn app:app --bind="localhost:5000" -w 4 --access-logfile access.log
这样公众号服务就在本地的 5000 端口启动了,并启动了四个线程。接下来使用 nginx 做一个反向代理,用 80 端口代理本地的 5000 端口。
nginx 具体配置不贴了,看看文档比啥都强。
最终的效果图:
0x4 最后
嘿嘿嘿,其实非常简单。( ˙˘˙ )