下面文章属于 2.0 版本,新项目是 3.0 版本。请读者根据自身实际情况酌情选择
本文原文 https://www.ftls.xyz/posts/wechat2s32/
开源网址 https://gitee.com/kkbt/wechat2obsidian
注意请按照上面开源地址代码部署以获取更好的体验效果
微信到 Obsidian 2.0
微信到 Obsidian 2.0,以前出过一个1.0版本。最近发现了一个 Obsidian 的 Memos 插件,跟 flomo 界面非常像,或者说一样。不过数据来源用的是 Obsidian 。我使用了多端同步插件 remotely save插件,选择腾讯云COS同步。我想,如果能够在微信测试号中,信息发送过去,然后存储到COS中。在 Obsidian 中一刷新就能看到了。
1.0 版本 微信使用 Remotely Save S3 兼容 发送到 Obsidian 1.0版本。不太好用
2.0 说明
因此我写下了2.0版本。实现了以下功能:
- 支持图片和文字
- 图片下载到存储本地,而非链接(微信发送的图片,会给咱们的服务器返回图片URL)
- 对用户的判断,仅限特定用户存储笔记。(根据 OpenID 判断)
- 检索文字中含有 “todo” ,则生成勾选框。如
- [ ] 13:11 somethingtodo
- 正常生成
- 13:11 something
- 内容能在 Memos 中正常显示
- 支持收藏链接(部分支持),位置,语音(转文字存储)。(2.1 新增)
- 返回可点击的链接,可以在微信内置浏览器中使用 Memos (2.1 新增,需要kkbt/obweb支持,参考页面,支持查看三天,修改一天)
BUG:
- 不推荐批量传图片,推荐显示已保存后依次上传。
- 不推荐一秒内上传多个文件,图片命名精确到1S。1S内多图片会覆盖。
- 不要使用微信自带的表情符号,请使用输入法表情。
- 如果微信输入框换行或分段,只会在这一条消息最开始有
- 13:11
。也就是说,第二行、第二段不会在 Memos 中显示。
说明: 不推荐批量传图片,程序对图片处理非常粗糙。。例如1M带宽服务器,连续传五个图片时。造成费时间会超过五秒,触发微信重传机制。这个机制带来的问题有很多。比如会多上传几份重复的文件,并且在微信测试号显示服务故障。(其实解决方案有很多,如使用任务队列或者是异步的方式。先返回success,另外开线程上传文件。留着以后有机会解决吧)。
程序
开源地址: https://gitee.com/kkbt/wechat2obsidian
依赖
- werobot
- cos-python-sdk-v5
程序思路
程序思路运行一个测试号服务器,使用werobot。根据message的公共属性source,即微信用户的唯一openid,判断用户。是自己的ID,如果是文字消息,判断消息字符串是否包含todo,包含则在消息字符串增加勾选框markdown语法,否则使用无序列表。然后根据当日时间,判断当日日志是否存在。若存在,下载本日日志并添加处理好的字符串,然后上传。不存在则直接上传处理好的字符串。
如果是图片消息,从消息中获取图片url并下载。下载完成之后上传至COS中,图片命名为当前的时间精确到秒。图片名包装成md图片链接。处理好的字符串按照文字消息的处理方法保存。
注意:以下代码仅为参考,最新代码请带 https://gitee.com/kkbt/wechat2obsidian 获取。
主文件 wechat.py 和 get_add.py 需要放到同一级目录下。运行 python wechat.py
# -*- coding=utf-8
# README
# 需要安装的依赖
# werobot cos-python-sdk-v5
# 可用 Alist 或其他可挂载 S3 的开源网盘 实现web编辑.md
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import werobot
import time
import get_add as cosga
# 相关信息
token = "token" # 自定义
APP_ID = "wxxxxxxxxxxxxxxxxx" # 微信公众号测试号APP_ID
APP_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 微信公众号测试号APP_SECRET
# werobot 配置
robot = werobot.WeRoBot(token=token)
robot.config["APP_ID"] = APP_ID
robot.config["APP_SECRET"] = APP_SECRET
rob_client = robot.client
rob_client.delete_menu()
#
# rob_client.create_menu({
# "button":[{
# "type": "click",
# "name": "今日",
# "key": "info"
# }]
# })
# message.source 为 OpenID 。获取->测试号二维码->用户列表(最多100个)->微信号
@robot.key_click("info")
def menu_click(message):
if (message.source != "o6_bmjrPTlm6_2sgVt7hMZOPfL2M"):
return '你不是恐咖兵糖'
return cosga.get_daily_today()
# 关注回复
@robot.subscribe
def subscribe(message):
return "这是恐咖兵糖的测试公众号"
# 文字消息回复 put_object append_object
@robot.text
def text_reply(message):
if (message.source != "o6_bmjrPTlm6_2sgVt7hMZOPfL2M"):
return '你不是恐咖兵糖'
str = cosga.add_memos_in_daily(message.content) # ETag
return "
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)