【教程&工具】微信同步文章到Bear

2023-05-16

在我日常工作中,我会将各种互联网以及生活中产出的信息汇总到Bear,再通过Bear的云同步使我各个终端的信息保持一致。

以前在使用有道云笔记的时候,有个功能我很喜欢,就是当看到一篇想收藏的文章的话,就可以直接右上角发送到有道云笔记,如下图:

顺便一提:熊掌记是一款优雅、灵活的写作笔记应用。

回到正题,我现在面临的需求是能不能在看到喜欢的文章的时候,也通过类似于右上角分享一下就可以直接将文章同步到我各个终端上的Bear,最终成果如下:

解决方案

要实现上述的需求,我大概思考了如下的解决方案:

1) 准备一个微信号(这里直接称作小号)专门接收待收藏到Bear的文章

2) 编写一个服务监控小号的消息,比如收到推文类型的消息就进行内容提取

3) 监控服务将提取后的内容发送到Bear(这里要求服务运行在Mac OS上)

所以在继续之前,你需要有以下条件:

•基本的Python基础知识(写小脚本Python真的很方便)•一台装有Bear的Mac OS

方案调研

上面的解决方案看起来还是挺好实现,第一步不用多说,这年头谁没个小号,第二点的话,我印象中Python是有个第三方库可以直接监听微信对应账号的消息。

因为这些第三方库都是基于Web版的微信,所以在使用之前我想验证下此方案是否可行,刚准备登录网页版微信,就直接提示:

<error><ret>1203</ret><message>To protect your account, logging in to WeChat via the web has been suspended. Use WeChat for Windows or WeChat for Mac to log in on a computer. Download WeChat for Windows or Mac at http://wechat.com.</message></error>

果不其然现在微信准备加强Web版本的限制了,心里凉凉的,第二步还没开始就已经被宣判死刑。

只能换个思路了,怎么办。其实这一步走不通我还是能接受的,因为我一直觉得依赖Web版总有一天会挂掉,毕竟多了个依赖总是会增加复杂度。

能不能依靠客户端?

我们知道,微信数据是有同步功能的,开发过客户端的都知道,这就意味着微信的数据必然保存一份在客户端本地系统上。

所以对于第二点的解决思路就转换成了如何获取微信保存在客户端本地的数据,找到某个软件的数据文件夹自然是很简单的事情,比如微信客户端的数据就存放在:

# howie6879是我的用户名,请自行替换
/Users/howie6879/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9

具体有如下目录:

├── 988eebd1078a0d794bff2b6f5c8d5176
├── Avatar
├── CGI
├── CrashReport
├── KeyValue
├── MMResourceMgr
├── checkVersionFile
├── d41d8cd93400b204e9800998ecf8427e
├── f965739b566114f907dc394322e1e826
├── topinfo.data
├── upgradeHistoryFile
├── whatsNewVersionFile
└── wx.dat


8 directories, 5 files

不知道上面那三个32位的字符串大家看起来熟悉不熟悉:

一想到32,就是md5加密,我第一反应就是对于每个登录账号的id加密值,我们先不管,直接进去看更深一层的文件夹:

├── Account
├── Avatar
├── Contact
├── Favorites
├── FileStateSync
├── FunctionMsg
├── Group
├── Message
├── RevokeMsg
├── Session
├── Stickers
├── Sync
├── complexSearch
├── mmexpt
└── newabtest


15 directories, 0 files

Message出来了,这是不是我们想要的呢?再往下看里面的目录:

├── MessageTemp
├── fts
├── msg_0.db
├── msg_0.db-backup
├── msg_0.db-shm
├── msg_0.db-wal
├── msg_1.db

如果你登录过该台电脑并同步过信息,那么不出意外会有挺多*.db后缀的文件。大胆地猜测一下,这是不是我们想要的聊天数据存放路径呢?

不要管太多,先看看总不会错,一般本地存储的数据库,咱们程序员第一反应应该就是SQLite,要不要试试?

sqlite3 Message/msg_0.db
sqlite> .schema
Error: file is not a database
sqlite>

??提示不是数据库,此时陷入了瓶颈,怎么就不是数据库了呢。反思一下,是不是打开的姿势不对。

会不会是加密了?依照这个思路,我了解到有一款基于SQLite的扩展数据库SQLCipher[1]SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能。

实践证明,我猜想的是对的,接下来主要做的怎么打开Message/msg_0.db这个文件并成功读取里面的数据。

最后我参考到一份有意思的问答,我就是参考这个问答[2]对数据库进行解密,这里我复述一下:

•打开微信,但是先不登录•打开终端,输入lldb -p $(pgrep WeChat)•会看到进入了lldb,然后输入br set -n sqlite3_key,按回车•在lldb中,输入c,按回车•打开微信并扫码登录•然后回到lldb中,输入memory read --size 1 --format x --count 32 $rsi

此时就会得到以下类似的输出:

0x600003888340: 0xd1 0x05 0x29 0x04 0x75 0xc5 0x45 0x05
0x600003888348: 0x92 0x26 0xa1 0x65 0x95 0xe5 0x15 0x3f
0x600003888350: 0xf3 0xc7 0x43 0x85 0x05 0x35 0x45 0x3d
0x600003888358: 0x84 0xc8 0x64 0xe5 0x35 0x65 0x45 0xe2

去掉冒号前面的那一串,后面是四行八列的数据,再去除掉0x空格\n等,就会得到一串64位的字符串,举个例子:

df012f587cc546000025a56599e81530f9cc49800329423d8ec460e1386549e2

这就是我们进入数据库的钥匙,接下来,请安装sqlcipher的相关软件,如:

brew install sqlcipher
brew cask install db-browser-for-sqlite

让我们用db-browser-for-sqlite打开db后缀的文件看看有什么不一样吧:

点击OK,成功打开!

随便进入一个表:

很显然,我们成功获取了本地的聊天记录,总算将第二步流程打通了,如今我们可以监控发送收藏文章的微信账户的聊天记录,只要收到此账号发来的推文消息,此时监控服务可以立马反应过来并解析发送到Bear。

有个小问题,怎么知道发推文的账号在哪个库哪个表呢?可以这样看,在电脑上登录发推文的账号,打开文件``:

cd /Users/howie6879/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/988eebd1023a0d794bff2b6f5c8d5176/Account
cat userinfo.data

大概输出如下:

":BHPpx��127417592694754732��wxid_epXXXXXXXfj12�    Howie6879�老胡的储物柜�

这里很明显我的wxid就是:wxid_epXXXXXXXfj12,那么对应需要监控的表名就是:Chat_md5(wxid_epXXXXXXXfj12),形式如同这样

Chat_f965739xxxx114fxxxxc394322exxxx

随后实现在库里面找到对应的表即可,我本机发现对应账户的表存在于库 msg_5.db中。

接下来要做的事情就很简单了,就是将提取后的内容发送到Bear,这里可以利用X callback url Scheme documentation[3],比如你在终端输入:

open 'bear://x-callback-url/create?title=Test%20Bear&text=Hello%20Bear'

立马就可以看到Bear自动建立了一篇笔记

编码实现

终于到了编码阶段,好心酸:

第一步,拿到必须要的常量:

•S_ACCOUNT_ID:微信发送账户ID,可以在Account/userinfo.data下查看•R_ACCOUNT_ID:微信接收账户ID,同上•RAW_KEY:解密Key,就是上面介绍的64位字符串•DB_PATH_TEM:定义的是消息DB路径,比如:"/Users/howie6879/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/{0}/Message/"

定义这四个常量,接下来的事情就一帆风顺了哈,我将项目开源在Github,地址见w2b[4],接下来我直接说说怎么用:

git clone https://github.com/howie6879/w2b
cd w2b
# 推荐使用pipenv 你也可以使用自己中意的环境构建方式
pipenv install --python=/Users/howie6879/anaconda3/envs/python36/bin/python3.6  --skip-lock
# 运行前需要填好配置文件
pipenv run python w2b/run.py

随后,会有日志输出:

[w2b] pipenv run python w2b/run.py                                                                                                
Loading .env environment variables…
[2019:09:13 09:16:35] INFO  w2b  目标表 Chat_f965739b676114fxxxxc394322e1e826 存在于库 msg_5.db

好,代码跑起来后,接下来电脑上登录你的小号(也就是接收微信文章的微信号),然后在手机上登录发送文章的微信号,最终成功就和文章一开始的动图一样了~

如果觉得对你有帮助,点个好看然后帮忙转发一下吧。

References

[1] SQLCipher: [https://github.com/sqlcipher/sqlcipher](https://github.com/sqlcipher/sqlcipher
[2] 问答: https://www.v2ex.com/t/466053#reply15
[3] X callback url Scheme documentation: https://bear.app/faq/X-callback-url%20Scheme%20documentation/
[4] w2b: https://github.com/howie6879/w2b

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【教程&工具】微信同步文章到Bear 的相关文章

随机推荐

  • Linux下使用rclone挂载网盘到本地

    Linux下使用rclone挂载网盘到本地 Rclone是一个支持挂载多数国外网盘的工具 Rclone官网传送们 目前Rclone支持挂载的网盘有 xff1a Google Drive Dropbox Google Cloud Storag
  • kvm 虚拟化安装 Ubuntu 18.04 server

    本文续上篇 裸金属服务器 kvm 虚拟化安装 win10 继续记录使用 KVM 在 Centos 7 5 裸金属服务器上安装 Ubuntu 18 04 Server的过程及遇到的问题 资源准备 首先要配置好 KVM 环境 xff0c 上文已
  • 创建回调函数

    1 新建一个空的工程 xff0c 在工程中随便创建一个类 xff0c 比如 h文件 import lt UIKit UIKit h gt typedef void resultBlock void 64 interface MyView U
  • 虚拟机的复制

    虚拟机的复制 xff08 1 xff09 虚拟机复制需要的两个重要文件 etc libvirt qemu xml文件 虚拟机的配置文件 xff0c 前端管理文件 xff0c 可以使用前端文件回到相应位置寻找后端硬盘文件 var lib li
  • 关于C++循环依赖问题的理解

    简介 如果有两个类 xff0c 类A和类B xff0c A类中有一个B类的对象b作为数据成员 xff0c B类中又有一个A类对象a作为数据成员 xff0c 像这样的情况就叫做循环依赖 那么如何解决类之间的循环依赖问题呢 xff1f 代码实例
  • AndroidStudio配置maven阿里云镜像

    写1行不行 xff0c 要写5行 xff0c 不要写 jcenter google xff0c 半天完不了 Android配置maven阿里云镜像 海阔天空185的博客 CSDN博客 android maven 阿里云 buildscrip
  • Android获取设备唯一标识

    一 IMEI xff1a 国际移动设备识别码的缩写 xff0c 其总长为15位 xff0c 每位数字仅使用0 xff5e 9的数字 双卡双待会有两个IMEI值 xff0c 并且在Android10以后就无法获取到了 xff0c 而且在模拟器
  • 排序之冒泡排序

    话不多说先上代码 package main import 34 fmt 34 func bubleSort arr 5 int for i 61 0 i lt len arr 1 i 43 43 for j 61 0 j lt len ar
  • 如何深入理解计算机视觉?(附思维导图)

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 设为星标 xff0c 与你不见不散 编辑 xff1a Sophia 联盟学习笔记 计算机视觉联盟 报道 公众号 CVLianMeng 人工智能资源 xff08 书籍 43 视频 xff09 全
  • 汇编语言指令详解

    指令 xff08 instruction xff09 是一种语句 xff0c 它在程序汇编编译时变得可执行 汇编器将指令翻译为机器语言字节 xff0c 并且在运行时由 CPU 加载和执行 一条指令有四个组成部分 xff1a 标号 xff08
  • fprintf 输出矩阵到txt的方法

    a 61 1 2 3 4 5 6 是一个2 3矩阵 1 2 3 4 5 6 fid 61 fopen 39 d chr txt 39 39 wt 39 本命令用法网上可以查到 xff0c 帮助文件里讲的也很清楚 fprintf fid 39
  • Android重新挂载镜像文件或者分区为光盘模式,让电脑能够识别并可读写(android cdrom by driverdroid)

    旧版本安卓实现 通常指Android8以下 span class token builtin class name cd span sys class android usb android0 span class token builti
  • 阿里云服务器申请免费试用图文教程(个人和企业均可申请)

    文章目录 一 进入阿里云使用中心二 根据自己账户认证情况选择进入 xff0c 个人选择开发者使用中心 xff0c 企业用户选择企业使用中心 个人基本试用配置 xff1a 企业基本试用配置 xff1a 三 本次以个人开发者 申请流程 1 需要
  • 钡铼技术BL302 ARM工控机QT图形化界面开发的实践

    QT是一种跨平台的应用程序框架 xff0c 用于开发图形用户界面 GUI 网络应用程序和嵌入式应用程序 QT提供了丰富的GUI组件和工具 xff0c 使开发人员能够轻松地创建专业级别的应用程序 QT使用C 43 43 编写 xff0c 支持
  • Ubuntu WSL Docker 踩坑记录:Cannot connect to the Docker daemon at unix:///var/run/docker.sock

    问题 xff1a VSCode WSL xff0c docker指令无效 xff0c 提示Cannot connect to the Docker daemon at unix var run docker sock Is the dock
  • 试用 GitLab 14 以及中国发行版:极狐

    时值 GitLab 14 大版本更新 xff0c 官方对于这个版本给出了非常高的评价 xff0c 让我非常好奇 xff0c 所以为了探究新版本到底有哪些变化 xff0c 我对 GitLab 社区版 极狐版做了试用对比 写在前面 作为一个 G
  • Debian 搭建简单的 FTP 服务器

    Debian 搭建简单的 FTP 服务器 安装配置 1 安装 apt get install vsftpd 2 查看网络服务状态 netstat npl 显示结果 tcp6 span class hljs number 0 span spa
  • 什么是XCB

    lt 64 page margin 2cm P margin bottom 0 21cm gt 简单看了下XCB的功能 xff0c 作用 xff0c 大致总结如下 xff0c 不知道是否正确 暂时如此理解吧 XCB 是用来替代Xlib 当期
  • 怎么压缩pdf文档大小?在线pdf压缩工具分享

    大多数公司使用 PDF 格式文档来共享信息 存储文件 传递数据等等 xff0c 但是由于PDF文档体积较大 xff0c 上传和下载速度较慢 xff0c 限制了PDF文档的使用 xff0c 那么这时候就需要用到pdf压缩 xff08 http
  • 【教程&工具】微信同步文章到Bear

    在我日常工作中 xff0c 我会将各种互联网以及生活中产出的信息汇总到Bear xff0c 再通过Bear的云同步使我各个终端的信息保持一致 以前在使用有道云笔记的时候 xff0c 有个功能我很喜欢 xff0c 就是当看到一篇想收藏的文章的