Wechatsync icon indicating copy to clipboard operation
Wechatsync copied to clipboard

feature:程序化调用

Open linonetwo opened this issue 4 years ago • 9 comments

我希望能在我的开源 Electron 笔记工具里,暴露一个把 markdown 内容传给 wechatsync 的 API,调用后显示现有的账号添加等界面,这需要对现有代码做哪些修改呢?

不方便直接嵌入扩展,因为Electron应用上没有一个栏用来放扩展,而且唤起扩展的按钮可能是自定义的。

我在想是不是得把现有写在扩展里的 UI 部分重构出来?不过这是 vue 写的,要嵌入 react 应用也不是很方便…

linonetwo avatar Apr 30 '21 05:04 linonetwo

可以本地提供内容库API,Web端读取本地库然后再使用Chrome扩展提供的API来同步

具体可以参考: https://github.com/wechatsync/Wechatsync/blob/master/packages/markdown-editor/src/Main.vue https://www.wechatsync.com/md/

插件会向页面注入window.$syncerAPI

  • getAccounts 获取账号列表 详见
  • addTask 提交同步任务 详见

除此之外就是插件和本地应用通过websocket建立通讯,插件把账号信息推送给本地应用并且接送同步任务的推送。

lljxx1 avatar Apr 30 '21 14:04 lljxx1

正在计划把发布API抽出一个包来,但是需要开发者自己注入各个平台登陆后的Cookie

lljxx1 avatar Jun 15 '21 00:06 lljxx1

我感觉我可以在我的APP里加上这个插件,只要我写个在electron里嵌入浏览器插件的功能就好。 不过在electron里怎么调用你的插件还是个问题

linonetwo avatar Nov 04 '21 17:11 linonetwo

我最近发现 wecatalog 增加了导入 chrome 插件的功能,我研究一下或许能把 wechatsync 带到 electron 里,这样就方便用你注入到 window 上的 api 了,通过你新发布的那个 SDK 来调用你的 API,不需要把实际功能单独抽出来发 npm 了。

说来惭愧,因为我一整年没写过任何文章了,所以还没用过你的插件。到时候是不是electron里点一下登录按钮,就可以在electron里弹出一个窗口登录第三方网站?

在 electron 里登录各个第三方网站好像也有点麻烦,不过这样的话也插件就不需要支持火狐了,让火狐用户也能用 electron 版文章编辑器来发布东西。

linonetwo avatar Dec 15 '21 02:12 linonetwo

可以本地提供内容库API,Web端读取本地库然后再使用Chrome扩展提供的API来同步

其实这个想法不错,能不能加一个填本地 CMS 地址的框,然后我填 localhost:xxxx ,你和它建立 websocket 通信之后,它可以以规定格式向你推送文章草稿?

或者更麻烦点儿,像 webclipper 一样加插件系统适配不同CMS,但是一是写插件麻烦你还得补充文档(webclippper 的插件我至今还没写出来…因为文档不清楚,代码有点没精力读),二是其实要求CMS那边写插件提供websocket接口插件跟你对接就行了。

linonetwo avatar Dec 15 '21 02:12 linonetwo

哇,很丰富的想法

  • wecatalog 的想法是让 electron 应用支持 chrome 插件,electron 里去做登录和 cookie 维护
  • 本地 websocket 通信想法还是依托于浏览器,需要在打开浏览器并且安装 wechatSync 的情况下,推送触发发布

不知道我的理解是否有误?

curly210102 avatar Dec 15 '21 03:12 curly210102

没错的,各有取舍吧。

为了方便用户不用每个网站在electron里都重新登录一遍,我觉得还是 websocket 的思路比较好,但是火狐用户就用不了了。

linonetwo avatar Dec 15 '21 17:12 linonetwo

走Websocket的话, 需要CMS跑个WS Server, 插件支持设置推送端WS URL

通讯流程(草稿)

接口

  • 广播推送任务的接口 broadcastSyncTask
  • 广播识别到的登录账户的状态信息的接口 setSyncAccounts
  • 同步任务执行状态 updateSyncTaskStatus

插件端

通过设置的WS URL和CMS端建立链接

  • 每次检查登陆账户状态后, 通过 setSyncAccounts 发送账户信息给CMS端
  • CMS端通过 broadcastSyncTask 广播推送任务
  • 插件端通过 updateSyncTaskStatus 接口反馈同步状态给CMS端

lljxx1 avatar Dec 17 '21 03:12 lljxx1

setSyncAccounts 是为了在 CMS 那边显示出平台列表,方便用户点选某一个来发布吗?

选择平台+文章之后,通过 broadcastSyncTask 调用

linonetwo avatar Dec 17 '21 05:12 linonetwo