微信号与公众号使用指南

微信号与公众号开发可以为其提供新的功能。

微信号

微信机器人

Wechaty

支持多种登录方式,目前可以正常使用。

nodejs版

新手配置

可直接使用配置好的Google Cloud Shell或Gitpod环境,如下。

1
2
3
4
5
# Google Cloud Shell
https://ssh.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https%3A%2F%2Fgithub.com%2Fwechaty%2Fwechaty-getting-started&cloudshell_open_in_editor=examples/ding-dong-bot.ts&cloudshell_workspace=.&cloudshell_tutorial=examples/tutorials/google-cloud-shell-tutorial.md

# Gitpod
https://gitpod.io/#https://github.com/wechaty/wechaty-getting-started
配置到服务器

建议在Linux环境下运行,需要提前安装node和npm。

在终端输入以下命令以克隆新手仓库。

1
2
git clone https://github.com/wechaty/wechaty-getting-started
cd wechaty-getting-started

输入以下命令以安装缺少的依赖。

1
sudo apt install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

输入以下命令即可启动。

1
2
export WECHATY_PUPPET=wechaty-puppet-wechat
npm start

python版

在终端输入以下命令。

1
2
3
4
5
6
7
8
9
10
11
12
# 克隆仓库
git clone https://github.com/wechaty/python-wechaty-getting-started
cd python-wechaty-getting-started

# 安装依赖
pip install -r requirements.txt
# 或直接pip install wechaty

# 运行
export WECHATY_PUPPET_SERVICE_TOKEN=python-wechaty-uos-token
export WECHATY_PUPPET=wechaty-puppet-wechat
python examples/ding-dong-bot.py

编程

API
1
https://wechaty.github.io/wechaty/

ItChat

用于与微信连接。

注意,该库使用微信网页版作为接口。若登录时提示為了你的帳號安全,此 WeChat ID 不能登入 WeChat 網頁版,则无法使用此库。

安装

可通过以下命令安装。

1
pip install itchat

代码

自动回复
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
#-*-coding:utf-8 -*-
import itchat, re
from itchat.content import *
from time import sleep
import random

# 注册消息类型为文本(即只监控文本消息,不监控语音/图片/表情包/文件等)
# isGroupChat=True开启群聊模式,即只监控群聊内容 (不开启则只监控个人聊天)
@itchat.msg_register ([TEXT], isGroupChat=True)
# @itchat.msg_register ([TEXT])
def text_reply(msg):
# msg是消息体,msg['Text']用来获取消息内容
# 第一个单引号中的内容是关键词,使用正则匹配,可以自行更改,使用.*表示任意内容
# 若使用中文,2.x版本的Python会报错,需要u前缀表示unicode编码
message = msg ['Text']
print (message)
match = re.search ('.*', message)
# match = re.search (u'年 | 春 | 快乐', message)
# 随机等待一定秒数再回复
second = random.randint (1,10)
sleep (second)
if match:
# msg['FromUserName']用来获取用户名,发送消息给对方
from_user_name = msg ['FromUserName']
print (from_user_name)
itchat.send (('====test message'), from_user_name)
# 第一个单引号中的内容是回复的内容,可以自行更改
# 热启动,退出一定时间内重新登录不需要扫码 (把二维码图片存下来,下次接着使用)
itchat.auto_login (hotReload=True)
# 开启命令行的二维码
itchat.auto_login (enableCmdQR=True)
# 部分系统可能字幅宽度有出入,可以通过将enableCmdQR赋值为特定的倍数进行调整
# 如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为 2
# itchat.auto_login (enableCmdQR=2)
# 默认控制台背景色为黑色,若背景色为白色,可以将enableCmdQR赋值为负值
itchat.auto_login (enableCmdQR=-1)
# 用于Mac
itchat.auto_login (enableCmdQR=-2)
# 运行
itchat.run ()
接入机器人
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
#-*-coding:utf-8 -*-
import itchat, requests
from itchat.content import *
from time import sleep
import random
# 机器人的 apikey
APIKEY = '376cb2ca51d542c6b2e660f3c9ea3754'

# 封装一个根据内容调用机器人接口,返回回复的方法
def get_response(msg):
# 构造了要发送给服务器的数据
apiUrl = 'http://www.tuling123.com/openapi/api'
data = {
'key' : APIKEY,
'info' : msg,
'userid' : 'wechat-robot',
}
try:
r = requests.post (apiUrl, data=data).json ()
# 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常
return r.get ('text')
# 为了防止服务器没有正常响应导致程序异常退出,用try-except捕获异常
# 如果服务器没能正常交互(返回json或无法连接),进入下面的return
except Exception,err:
# 打印一下错误信息
print (err)
# 将会返回一个None
return

# @itchat.msg_register ([TEXT], isGroupChat=True)
@itchat.msg_register ([TEXT])
def tuling_reply(msg):
message = msg ['Text']
print (message
second = random.randint (1,10)
sleep (second)
# 为了保证在图灵apikey出现问题的时候仍旧可以回复,设置一个默认回复
defaultReply = 'I received:' + message
# 如果图灵apikey出现问题,那么reply将会是None
reply = get_response (message)
# a or b指如果a有内容则返回a,否则返回b
return reply or defaultReply

itchat.auto_login (hotReload=True)
itchat.auto_login (enableCmdQR=True)
itchat.run ()

公众号

图文排版

编辑器自动保存

点击Chrome浏览器的TamperMonkey扩展程序,选择添加新脚本,复制以下内容并保存即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
// ==UserScript==
// @name 微信推文编辑器自动保存
// @version 0.1
// @description 微信推文编辑器自动保存
// @author 内咸禾方皇
// @match https://mp.weixin.qq.com/*
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';
var time = window.setInterval(function(){document.querySelector("#js_submit").click()},60000);
})();

Markdown to 公众号一键转换器

可用Markdown语法进行公众号排版。打开以下链接,完成编写后点击转换,然后将预览区中的内容复制到微信图文编辑器即可。

1
https://knb.im/mp/

公众号开发

服务器绑定

服务器用于处理发送到公众号的消息请求,并完成消息发送。

准备好VPS后通过SSH连接,以CentOS为例,进入root用户后执行以下命令以安装必要依赖。

1
2
3
4
5
6
7
8
9
10
11
12
yum install vim
yum install libxml2
yum install libxslt
yum install python
pip install --upgrade pip

# 对于python2
pip install web.py==0.51
# 对于python3
pip install web.py

pip install lxml

完成后输入以下命令新建py文件。

1
vim main.py

内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle

urls = (
'/wx', 'Handle',
)

if __name__ == '__main__':
app = web.application(urls, globals())
app.run()

保存后继续新建文件。

1
vim handle.py

内容如下,其中token可任意填写。

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
# -*- coding: utf-8 -*-
# filename: handle.py

import hashlib
import web

class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "hello, this is handle view"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "xxxx" #可任意

list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest()
print "handle/GET func: hashcode, signature: ", hashcode, signature
if hashcode == signature:
return echostr
else:
return ""
except Exception, Argument:
return Argument

保存后运行以下命令执行脚本。如果提示socket错误,则需要开启80端口。

1
python main.py 80

在浏览器输入以下链接以访问刚才运行脚本所搭建的网页,若显示hello, this is handle view,则成功。

1
http://[外网IP]/wx

进入公众号后台并选择开发-基本配置-修改配置,内容如下,然后提交即可。

选项 内容
URL http://[外网IP]/wx
Token 刚才填写的内容
消息加解密方式 明文模式

小游戏

跳一跳脚本

1
2
https://github.com/wangshub/wechat_jump_game
https://www.jianshu.com/p/ff973a5910ae

WebDriverAgent

安装

在终端输入以下命令以下载仓库并切换路径。

1
2
git clone https://github.com/appium/WebDriverAgent
cd WebDriverAgent
【过时】旧版的附加步骤

在终端输入以下命令,以安装Carthage并运行初始化脚本。

1
2
brew install carthage
./Scripts/bootstrap.sh

双击打开WebDriverAgent.xcodeproj,切换到WebDriverAgentRunner,选择真机并运行。若跳出签名问题,则添加签名并更改App的BundleID。

常见问题

Building for iOS Simulator, but the linked and embedded framework ‘My. framework’ was built for iOS + iOS Simulator.

点击工程文件,选择TARGETS下的App项目,在Build Settings下将Validate Workspace设置为Yes。

‘assign’ property of object type may become a dangling reference; consider using ‘unsafe_unretained’

将assign改为strong即可。

参考教程

公众号开发指南

1
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Getting_Started_Guide.html

ATX 文档 - iOS 真机如何安装 WebDriverAgent

1
https://testerhome.com/topics/7220

Building for iOS Simulator, but the linked framework ‘**.framework’ was built for iOS

1
https://stackoverflow.com/questions/63267897/building-for-ios-simulator-but-the-linked-framework-framework-was-built

WebDriverAgent常见错误

1
https://www.jianshu.com/p/d4609fbb6a87

ubuntu下运行Puppeteer

1
https://www.cnblogs.com/mokliu/p/12401265.html

python-wechaty: 免费微信机器人

1
https://zhuanlan.zhihu.com/p/365629085