# [Obcsapi v1] 微信使用 Remotely Save S3 兼容 发送到 Obsidian 使用微信公众号实现,发送到腾讯COS。Obsidian 获取到消息。 最新版见 [Obsidian 从本地到云端 obcsapi v3.0](https://www.ftls.xyz/posts/obcsapi-fc-simple/) !!! 注意 新项目已发布 [Obsidian 从本地到云端 obcsapi v3.0](https://www.ftls.xyz/posts/obcsapi-fc-simple/) 下面文章属于 2.0 版本,新项目是 3.0 版本。请读者根据自身实际情况酌情选择 ## 基础要求 1. 带公网ip的服务器并装有python3环境 2. 微信公众号的测试号 3. 腾讯云 COS ## 准备数据 1. 微信公众号测试号APP_ID 2. 微信公众号测试号APP_SECRET 3. 腾讯云 secret_id 4. 腾讯云 secret_key 5. 腾讯云 COS 相关信息 包括 region,Bucket 名 ## 服务端搭建 1. 服务器安装依赖模块 pip3 install werobot 和 pip3 install cos-python-sdk-v5 2. 将准备的数据填写至程序 # 相关信息 中 ,如果想要改服务器端口可以在 robot.config["PORT"] = "8008" 更改 3. 开放 Linux 服务器8008端口 ; 开放 腾讯云安全组 8008 端口 4. 运行程序并挂后台 ,我使用的是 宝塔面板 python 项目管理器 运行的该项目 ```python # -*- coding=utf-8 # werobot cos-python-sdk-v5 from qcloud_cos import CosConfig from qcloud_cos import CosS3Client import werobot import time import requests # 相关信息 token = "token" # 自定义 APP_ID = "wxxxxxxxxxxxxxxxxx" # 微信公众号测试号APP_ID APP_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 微信公众号测试号APP_SECRET secret_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 腾讯云 secret_id secret_key = "xxxxxxxxxxxxxxxxxxxxxxxxx" # 腾讯云 secret_key region = "ap-nanjing" # 腾讯云 COS cos_token = None # 腾讯云 COS token scheme = "https" # 腾讯云 COS 访问模式 bucket = "test-0123456789" # 腾讯云 Bucket # werobot 配置 robot = werobot.WeRoBot(token=token) robot.config["APP_ID"] = APP_ID robot.config["APP_SECRET"] = APP_SECRET # cos 配置 config = CosConfig( Region=region, SecretId=secret_id, SecretKey=secret_key, Token=cos_token, Scheme=scheme, ) client = CosS3Client(config) # rob_client = robot.client # rob_client.create_menu({ # "button":[{ # "type": "click", # "name": "用户信息", # "key": "info" # }] # }) # 菜单点击 输入信息 这个菜单影响快速输入信息 不方便 # @robot.key_click("info") # def music(message): # return '你点击了“用户信息”按钮' # 关注回复 @robot.subscribe def subscribe(message): return "这是恐咖兵糖的测试公众号" # 文字消息回复 put_object append_object @robot.text def text_reply(message): yaml_str = message.content yaml = ( "---\ncontent: " + yaml_str.replace("\n", "
") + "\n---\n" ) # 将内容存入 yaml 字段 方便 dataview 使用 替换换行防止出错 btyes = bytes(yaml + message.content, encoding="utf8") name = time.strftime("%Y%m%d%H%M%S", time.localtime()) response = client.put_object( Bucket=bucket, Body=btyes, Key="微信收藏/" + name + ".md", ) return response["ETag"] # 图片消息 @robot.image def image_reply(message): # btyes = bytes("![]("+message.img+")", encoding = "utf8") # 直接使用腾讯链接显示图片 file = requests.get(message.img) name = time.strftime("%Y%m%d%H%M%S", time.localtime()) response1 = client.put_object( Bucket=bucket, Body=file.content, Key="微信收藏/附件/" + name + ".jpg", ) conent = "![[附件/" + name + ".jpg]]" yaml = "---\ncontent: " + conent + "\n---\n" btyes = bytes(yaml + conent, encoding="utf8") response2 = client.put_object( Bucket=bucket, Body=btyes, Key="微信收藏/" + name + ".md", ) return response1["ETag"] + response2["ETag"] @robot.error_page def make_error_page(url): return "404" @robot.handler def error_message(message): return "不支持的消息类型" robot.config["HOST"] = "0.0.0.0" robot.config["PORT"] = "8008" robot.run() ``` ## 基本使用 扫码测试号二维码,然后可以看到用户列表中多了一个人。然后就可以发送消息了。 {{< image src="https://cdn.ftls.xyz/images/2022/02/微信图片_20220210210446.jpg" caption="微信公众号样子" >}} {{< image src="https://cdn.ftls.xyz/images/2022/02/ob_test1.png" caption="发送的信息保存到 Obsidian" >}} {{< image src="https://cdn.ftls.xyz/images/2022/02/ob_test3.png.png" caption="图片会保存两个文件 一个在附件里 一个是 md" >}} {{< image src="https://cdn.ftls.xyz/images/2022/02/ob_test2.png" caption="配合 dataview 能够显示所有信息" >}} ## 问题和缺点 1. 公众号毕竟有公众属性,并不是为个人服务准备的。或许可以使用鉴别用户 id 的方法防止不相干的人关注和发送消息,但是最好的解决方法是使用用户系统。 2. 上面这个程序有时候会报错,甚至有崩溃过。毕竟只是顺手写的。 3. 发送图片时,后台能获取到一个图片链接。但是图片会被压缩。 4. 接收图片以![](https://abc.com/123.jpg)形式保存至 yaml 中时是能被 dataview 显示出来的。但是上面程序选择了保存图片至本地附件文件夹并且使用的是 ![[]]的形式。 5. 关于 dataview 不会显示 md 中图片这个问题,我尝试了很久,也没解决这个问题。dataview 没有找到显示正文的函数,yaml 显示还有一点问题。如果有人解决了希望 [发邮件](mailto:0@ftls.xyz) 告诉我一声,或者通过 [哔哩哔哩](https://space.bilibili.com/100300809) 联系我,我会在本文中记录。 ## 相关资料 使用的框架文档 [werobot说明文档](https://werobot.readthedocs.io/zh_CN/latest/index.html) [cos上传文档](https://cloud.tencent.com/document/product/436/65820) 公众号搭建可以在 哔哩哔哩网站 搜索 werobot 学习 COS 和 Obsidian 插件 Remotely Save 使用说明: [Obsidian 同步 Remotely Save S3 配置指南](https://www.ftls.xyz/posts/obsidiannote/)