微信到 Obsidian 2.0

2023-11-17

!!! 注意 新项目已发布 Obsidian 从本地到云端 obcsapi v3.0

下面文章属于 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(使用前将#替换为@)

微信到 Obsidian 2.0 的相关文章

  • Java EasyExcel高效读取保存excel文件

    文章目录 前言 JAVA解析Excel工具 网站 引入EasyExcel依赖 快速开始 读Excel 写Excel web上传 下载 前言 阿里开源出一款易上手 且比较节省内存的Excel操作框架 EasyExcel EasyExcel是一

随机推荐

  • 【c++中的细节问题】C++何时需要自定义析构函数呢?

    请见 https blog csdn net love9099 article details 43086945
  • pycharm和navigator打开时出现报错,无法正常打开

    1 navigator打开时出现提示 原因是 python exe有多个任务在占用 解决办法 1 打开cmd 2 输入 tasklist findstr pythonw 3 有几个线程就kill几个线程 使用命令 tskill PIN码 如
  • Web综合应用实验(html css javascript)

  • crontab用法

    crontab用法 几个例子 我们来看一个超级用户的crontab文件 crontab 用法 crontab 命令用于安装 删除或者列出用于驱动 cron 后台进程的表格 也就是说 用户把需要执行的命令序列放到 crontab 文件中以获得
  • MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用

    在MySQL中可以使用IF IFNULL NULLIF ISNULL 函数进行流程的控制 1 IF 函数的使用 IF expr1 expr2 expr3 如果expr1的值为true 则返回expr2的值 如果expr1的值为false 则
  • react路由使用

    1 插件添加 cnpm install react router dom S 2 app js书写 import React Component from react 路由的2种形式 hash HashRouter H5的historyAp
  • mysql最大连接数修改

    当mysql出现 Too many connections 异常时 说明mysql数据库连接数过高 增加方法如下 如果可以登录 可以使用以下语句临时增加连接数 重启后失效 set GLOBAL max connections 1024 永久
  • zbrush插件布尔运算插件perfectbool安装方法

    zbrush插件直接复制粘贴到此路径的文件夹里 D Program Files Pixologic ZBrush 2020 1 3 ZStartup ZPlugs64 安装好了后 重启zb软件 即可在右侧面板最下面找到该插件了
  • MybatisPlus常用方法

    1 in QueryWrapper
  • 如何用matlab写一个电动汽车空调仿真模型

    首先 您可以研究电动汽车空调的工作原理 并了解其相关的物理参数 例如空调系统的热量转移 制冷剂流动以及空气循环等 然后 您可以使用 MATLAB 的 Simulink 模块开发模型 Simulink 是一个基于图形的仿真工具 可以方便地模拟
  • 用顺序表实现图书信息管理(增删改查)---c语言版

    顺序表 概念 用一组地址连续的存储单元依次存储线性表的数据元素 这种存储结构的线性表称为顺序表 特点 逻辑上相邻的数据元素 物理次序也是相邻的 实现 用结构体定义一本图书 typedef struct int id char name 20
  • zotero+坚果云同步

    在使用Zotero整理文献的时候 软件自带的云同步有300M的上限 但软件还提供了Webdav同步的设置选项 在国内的众多云盘中 坚果云是为数不多甚至说唯一的支持Webdav的云盘 设置同步的流程如下 在网页端的坚果云登录之后 点击右上角的
  • 微信小程序常用表单控件

    感谢慕课网七月老师课程 如何一次性获取所有表单控件的值并且提交到服务器上去呢 from表单提交 使用form把所有子元素包含进去
  • Vue.js 学习笔记

    vue基础 显示js界面传过来的数据 v bind 绑定提示信息 v if 条件语句 v for 绑定数组数据 v on 添加一个事件监听器 通过它可以调用Vue实例中定义的方法 v model 表单输入和应用状态之间的双向绑定 Vue c
  • torch.nn.Module模块简单介绍

    torch nn是专门为神经网络设计的模块化接口 nn Module是nn中十分重要的类 在介绍该模块前 我们先看下pytorch官方对该模块的注释 根据官方注释我们了解到Module类是所有神经网络模块的基类 Module可以以树形结构包
  • 项目失败的思考

    1 鲁莽的追求新的开发框架 2 没有让组员提前学习必要的知识 3 低估项目难度 没有想到潜在的需求和技术难点 4 项目没有时间性的计划 5 任务没有很好的分割 1 项目争取阶段 做好demo 2 项目准备阶段 选择开发框架 让组员了解相关知
  • 【Python】快速处理:ModuleNotFoundError: No module named 'pygame'

    一 问题 在安装Python3 7之后 再安装Pygame却不能导入该包 报错如下 ModuleNotFoundError No module named pygame 尝试了好多方法 都不行 最后找到解决办法了 主要原因是安装的版本或者路
  • RabbitMq 报错An unexpected connection driver error occured ....Socket Closed

    An unexpected connection driver error occured java net SocketException Socket Closed at java net SocketInputStream socke
  • 自动zksync刷账户交互(附代码)

    自动化任务的 Python 代码 它使用 Selenium 库来控制浏览器 解锁小狐狸 task unlock metamask ads zk主网连接钱包 初始化 ZK主网任务1 转账 print 选择ZK主网任务1 转账 task zk
  • 微信到 Obsidian 2.0

    注意 新项目已发布 Obsidian 从本地到云端 obcsapi v3 0 下面文章属于 2 0 版本 新项目是 3 0 版本 请读者根据自身实际情况酌情选择 本文原文 https www ftls xyz posts wechat2s3
Powered by Hwhale