时光机系统保姆级搭建指北
之前有一段时间犯了主题瘾,不想用handsome就转身投入了Gridea的怀抱(当时Gridea还没有开始做Gridea Web,是我用了小半年左右有朋友跟我说才开始的内测)。用过handsome都知道里面有个时光机功能,每次遇见有意义的事情就可以很方便的分享和记录到博客里,而在用gridea的时候有位叫黑石的大佬写了一个类似的项目叫“黑石哔哔”,原理是使用leancloud部署指定公众号发送内容,但当我想重新搭建时这位大佬的博客和他的服务很不幸的夭折了
po放一下洪佬之前作对比的图
没有了可以照搬的现成案例,我在百度上翻来覆去找到了一套基于自建服务器+公众号的时光机系统,但实际建下来还是略微曲折。为了避免有些童鞋再次踩坑,还是补一下这条即刻的flag。
感谢目的地、我若为王、Jdeal三位大佬的文章,本文主要是依靠这三位大佬的结晶凝聚出来的。在查阅资料的过程中我也了解到具有广场性质的哔哔点啥,一样可以自建前后端,有兴趣可以了解一下。
公众号&后端搭建
公众号注册过程这里不再赘述。公众号不限制任何类型,如果没有办法注册公众号可以参考《用微信公众号快速发布“说说”,源自Typecho handsome主题的时光机。》这篇文章注册一个微信公众号测试号,对于自建系统很有用。
Source:iLay1678/wechat_for_handsome & 我若为王
首先拷贝项目到你的服务器,在公众号后台面板内找到基本配置,获取AppID和AppSecret,并且将后端服务器的IP加为IP白名单。
再去高德开放平台注册账号并申请高德apikey
我是因为之前使用handsome的时候装了alicestyle插件里有个地区天气服务,所以我申请的比较早。如果嫌麻烦的话可以直接用我的,我不设白名单,毕竟我不怎么用。
请勿滥用或分享本Key
60a29d6b3d5e4c38e9f1de20edfea7d8
再回到公众号后台填写以下信息 [notice]测试安装完成以后请重新打开安全模式,让信息安全更上一层楼。[/notice]
打开 网址/install.php 按照刚刚配置的信息安装,数据库其实可以直接写在typecho博客的数据库里,只有一个cross
的表,只是保存了用户的微信信息而已,占用不大,不影响博客运行。
一个bug
如遇身份验证失败的情况,请到后端系统的cross.php
转至40行左右,将function push
的整段内容修改为如下内容
function push($content, $msg_type, $url, $timecode, $cid, $mid)
{
$desp = array('cid' => $cid, 'mid' => $mid, 'content' => $content, 'action' => "send_talk", 'time_code' => md5(/*"handsome!@#$%^&*()-=+@#$%$" . */$timecode /*. "handsome!@#$%^&*()-=+@#$%$@#$%^&*"*/), 'msg_type' => $msg_type, 'token' => 'weixin');
$res = request_post($url, $desp);
return $res;
}
具体分析可以在上文目的地 Chrison大佬的文章里可以看到
前端搭建
Source:gogobody/typecho-whisper
下载文件。拷贝文件夹times
和文件page.whisper.php
到你使用的主题目录下。 新建单页,模板选择 超级时光坤 。 在主题内的functions.php
上面加
require_once 'times/Ajax.php';
然后给单页下面新加字段,字段名time_code,是时光机的验证编码。
默认开启可以评论。如果想关闭,给单页加字段enable_comment,值为0。
补充说明
如果您参考了上文自建了时光机公众号发送系统,那么您有必要知道:
-
msg_type为
text
(对应为微信内的文字消息)的内容可以包含HTML代码及短代码,会在前台解析 -
msg_type为
image
(对应为微信内的图片消息)的发送格式为:图片网络地址
(图片会自动上传至博客,例如:https://cdn.jsdelivr.net/gh/iyear/blogpics@latest/usr/uploads/2019/12/801984719.png) 如为本地图片先上传图片
操作,再以text
类型提交并手动加上<img>
标签。实测直接发送网络图片地址无法自动上传,并以文本方式在前端输出。 -
msg_type为
link
(对应为微信内的链接消息)的发送格式为:标题#描述#URL地址(不转义)
比如:百度一下#来百度一下#https://www.baidu.com/
。实测直接发送网络地址只会以文本方式在前端输出。 -
msg_type为
mixed_talk
(对应为微信发送系统内的混合说说功能)的发送内容为UTF-8编码的JSON字符串 例如:
{
"results": [{
"type": "text",
"content": "test11"
}, {
"type": "text",
"content": "test22"
}, {
"type": "image",
"content": "https://cdn2.jianshu.io/assets/web/nav-logo-4c7bbafe27adc892f3046e6978459bac.png"
}, {
"type": "image",
"content": "https://rescdn.qqmail.com/bizmail/zh_CN/htmledition/images/bizmail/new_login/exmail_logo_1473e91.png"
}]
}
实测所有混合消息会聚集在一条消息在前端输出,并且不会自动换行,以空格分隔。
- msg_type为
location
(对应为微信内的位置消息)的后台处理方式很奇怪。格式为未知#未知#位置名称#地图图片
- 需要博客支持emoji,只需要将数据库格式从
utf8
改为utf8mb4
即可。 - 地图图片通过调用高德地图的静态地图API实现的,最终会上传至本地服务器的
time
文件夹。 接口不是很明朗,还是建议采用text
提交。形式为📌+位置名称+<img src="位置图片URL"/>
** 寻思跟脑子有坑一样,用emoji来标识位置信息。。一直失败,干脆不折腾了 **
开始使用
配置好前后端之后,我们便可以转回公众号绑定网站测试我们的系统。
1.发送 绑定 进行绑定或修改绑定信息
2.向时光机发送消息
支持文字、图片、地理位置、链接四种消息类型。
其他消息类型等后续开发,暂不支持(如果发送了,会提示不支持该类型的,如语音消息)。
如果发送的是图片会自动将图片存放到typecho 的 usr/uploads/time 目录下。
支持发送私密说说。只需要在发送内容前加入#即可。 举例发送:#这是私密的说说,仅发送者可见。
连续发送多条信息
发送【开始】,开始一轮连续发送
发送【结束】,结束当前轮的发送
3.发送文章
输入【发文章】,开始文章发送,支持多条消息,支持多条消息图文混合
输入【结束】,结束文章发送
4.其他操作
发送 博客收到你的博客地址的链接
发送 发博客收到发博文的字的链接
发送 解除绑定 或 解绑 可删除掉你的绑定信息
发送 帮助 查看帮助信息
我的绑定页面我自己改了点,所以会和原版的不一样。
cid和mid的获取方式如下
然后我们就可以快快乐乐的发送信息了
总结就是除了系统有点叛逆,其他都还好。
浏览器发送
这套系统是兼容handsome时光机的发送插件的,但是没买handsome的不能用。
所以我们直接上手破解一下。本部分内容主要针对Edge浏览器来讲
其实就是因为不想翻墙去chrome找模块
首先打开C:\Users\用户名\AppData\Local\Microsoft\Edge\User Data\Default\Extensions
找到模块的文件夹
随后打开js >- oper.js
跳转至392行将if段的callback(false);
改成和else结果一致的callback(true);
随后重新打包,在edge://extensions
内打开开发者模式并加载修改好已解压的模块文件夹。
嫌麻烦也可以用我做好的现成模块。点这里下载,不保证chrome可用性。