心若向诚

Github | Mailer | About | Links

时光机系统保姆级搭建指北

之前有一段时间犯了主题瘾,不想用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。

补充说明

如果您参考了上文自建了时光机公众号发送系统,那么您有必要知道:

{
    "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"
    }]
}

实测所有混合消息会聚集在一条消息在前端输出,并且不会自动换行,以空格分隔。

  1. 需要博客支持emoji,只需要将数据库格式从 utf8 改为utf8mb4即可。
  2. 地图图片通过调用高德地图的静态地图API实现的,最终会上传至本地服务器的time文件夹。 接口不是很明朗,还是建议采用text提交。形式为📌+位置名称+<img src="位置图片URL"/>

** 寻思跟脑子有坑一样,用emoji来标识位置信息。。一直失败,干脆不折腾了 **

开始使用

配置好前后端之后,我们便可以转回公众号绑定网站测试我们的系统。

1.发送 绑定 进行绑定或修改绑定信息
2.向时光机发送消息
支持文字、图片、地理位置、链接四种消息类型。
其他消息类型等后续开发,暂不支持(如果发送了,会提示不支持该类型的,如语音消息)。
如果发送的是图片会自动将图片存放到typecho 的 usr/uploads/time 目录下。
支持发送私密说说。只需要在发送内容前加入#即可。 举例发送:#这是私密的说说,仅发送者可见。
连续发送多条信息
发送【开始】,开始一轮连续发送
发送【结束】,结束当前轮的发送
3.发送文章
输入【发文章】,开始文章发送,支持多条消息,支持多条消息图文混合
输入【结束】,结束文章发送
4.其他操作
发送 博客收到你的博客地址的链接
发送 发博客收到发博文的字的链接
发送 解除绑定 或 解绑 可删除掉你的绑定信息
发送 帮助 查看帮助信息

我的绑定页面我自己改了点,所以会和原版的不一样。

cid和mid的获取方式如下

然后我们就可以快快乐乐的发送信息了

1689074470630

总结就是除了系统有点叛逆,其他都还好。

浏览器发送

这套系统是兼容handsome时光机的发送插件的,但是没买handsome的不能用。

所以我们直接上手破解一下。本部分内容主要针对Edge浏览器来讲

其实就是因为不想翻墙去chrome找模块

下载地址:handsome时光机 - Microsoft Edge Addons

首先打开C:\Users\用户名\AppData\Local\Microsoft\Edge\User Data\Default\Extensions找到模块的文件夹

随后打开js >- oper.js跳转至392行将if段的callback(false);改成和else结果一致的callback(true);

随后重新打包,在edge://extensions内打开开发者模式并加载修改好已解压的模块文件夹。

嫌麻烦也可以用我做好的现成模块。点这里下载,不保证chrome可用性。