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

2023-10-27

在我日常工作中,我会将各种互联网以及生活中产出的信息汇总到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 的相关文章

  • 内嵌Python import时undefined symbol错误及解决

    内嵌Python import时undefined symbol错误及解决 以下代码 include lt Python h gt include lt stdio h gt include lt stdlib h gt int main
  • 动态分区分配算法(First Fit,Next Fit,Best Fit,Worst Fit)

    一 动态分区分配算法的背景 为了能将用户程序装入内存 必须为它分配一定大小的内存空间 连续分配方式是最早出现的一种存储器分配方式 曾被广泛应用于上世纪60 80 年代的OS中 该分配万式为个用户程序分配 一个连续的内存空间 即程序中代码或数
  • 十大相似图片搜索网站(以图搜图)

    十大相似图片搜索网站 以图搜图 2011 04 13 21 07 56 分类 默认分类 标签 以图搜图 图片搜索 搜图 百度搜图 搜索引擎 举报 字号 订阅 下载LOFTER客户端 如何凭着一张现有图片找出它的原始图片 或者是凭着一张小的缩
  • ROS-Noetic版本的安装(Ubuntu20.04环境)

    ROS安装 关于ROS的安装已经有很多好的博文供以参考 本文总结了一些安装过程中可能出现的报错情况已经解决方法 许多博文的教程步骤大差不差 建议是直接先按照官方步骤走 遇到问题再一步步解决 ROS官方的参考链接 http wiki ros
  • python中mgrid和meshgrid的不同

    在生成插值数据时 有时会用到 mgrid 和 meshgrid 两个函数 关于插值函数的应用参见 https blog csdn net gsgbgxp article details 116145501 t7 关于两者的差别可参见 htt
  • 李宏毅 机器学习 2016 秋:2、Regression

    二 Regression Case Study 我们今天要讲的是 Regression 等一下我会举一个例子 来讲 Regression 是怎么做的 顺便引出一些 machine learning 里面 常见的重要观念 那 regressi
  • DNS服务器

    DNS服务简介 DNS Domain Nmae Server 域名服务系统 对域名进行解析 1 域名空间 根域 代表域名命名空间的根 顶级域 直接处于根域下面 以国家或地区命名 二级域 在顶级域下面 子域 主机 FQDN完全合格的域名 如w
  • Mybatis-plus查询条件拒绝自动去重

    问题描述 当进行多表数据关联时候 使用mybatis结果集封装数据 mybatis会将主键id作为map的key值 如果后面有重复的主键id 那么将会覆盖之前的数据 很显然这不是多表关联查询数据想要看到的结果 如此以来 最终结果会比实际结果
  • 浏览器的选择建议,按照这些建议选,总能找到合适的

    浏览器可以说是电脑的标配了 几乎每台电脑都安装有浏览器 最近 很多朋友询问哪些浏览器比较好用啊 今天给大家分享一下浏览器的选择建议 让大家都能选到适合自己的浏览器 同时 系统全面的介绍各家浏览器的特点 哪些值得我们花时间试用 浏览器的选择建
  • 如何在C语言中将文字显示为花里胡哨的多种颜色

    Hello大家好 最近刚刚做完C语言的课程设计 在评分标准中有一项是展示界面美观整洁 学前端的我对花里胡哨的界面情有独钟 这里为大家简单介绍三种改变字体颜色的方法 注意 本文中所有演示截图均来自VS 2022 目录 改变C语言显示界面字体颜
  • Base64转二进制文件流以及转File、图片转Base64、二进制流转Base64

    1 Base64转二进制文件流 方法一 Base64字符串转二进制流 param String dataurl Base64字符串 字符串包含Data URI scheme 例如 data image png base64 function
  • 智能硬件开发如何选择低功耗MCU?

    本文转载至 http www iot online com IC embedded 2015 090928393 html 本文将市场上典型的低功耗MCU系列进行了比较 分析得出基于ARM Cortex M0 内核的MCU系列最适合穿戴式医
  • 【GAOPS006】CRC8串行计算原理和verilog实现

    1 定义 X P N R X 被除数 P 除数 p 1 表示p bit位宽 N 商 不关心 R 余数 CRC值 2 规则 很简单就一个 1 补零 CRC8 算出来的校验和有8bit CRC16算出来的校验和有16bit 在需要计算的数据X被
  • 十、Mybatis的choose (when, otherwise)标签使用

    choose标签的作用 按顺序判断其内部when标签中的test条件出否成立 如果有一个成立 则 choose 结束 当 choose 中所有 when 的条件都不满则时 则执行 otherwise 中的sql 类似于Java 的 swit
  • 编写Java程序,建立一个人类(Person)和学生类(Student)

    编写Java程序 建立一个人类 Person 和学生类 Student 要求如下 Person中包含4个私有的数据成员name addr sex age 分别为字符串型 字符串型 字符型 整形 表示姓名 地址 性别和年龄 用一个4参构造方法
  • vue导入图标的3种方式【阿里图标】

    第一种方式 Font class css 点击 Font class 下载至本地 解压之后导入到项目 src assets icon 这个是 iconfont css 文件 font face font family iconfont Pr
  • Java面向对象之函数式编程

    1 函数式编程 在数学中 函数就是有输入量 输出量的一套计算方案 也就是 用什么东西做什么事情 相对而言 面向对象过分强调 必须通过对象的形式来做事情 而函数式思想则尽量忽略面向对象的复杂语法 强调做什么 而不是以什么形式来做 1 1 做什
  • MongoDB 数据库操作汇总

    本篇主要用于汇总MongoDB专栏 提供快速访问链接 一 安装与基本介绍 MongoDB安装与使用 MongoDB 中的基本概念 MongoDB 数据库操作 MongoDB 集合操作 二 CRUD操作 MongoDB 插入文档 插入一个 批
  • 【论文阅读】Mixed Precision Training

    GiantPandaCV导语 混合精度是一个非常简单并且实用的技术 由百度和谷歌联合发表于ICLR2018 可以让模型以半精度的方式训练模型 既能够降低显存占用 又可以保持精度 这篇文章不是最先提出使用更低精度来进行训练 但是其影响力比较深
  • 该文件没有与之关联的应用程序来执行该操作。请安装应用,请在"默认应用设置"页面中创建关联

    最近在win10新安装的一个应用程序 在程序中打开指定文件时报了 该文件没有与之关联的应用程序来执行该操作 请安装应用 请在默认应用设置 页面中创建关联 原因是该文件没有默认的打开程序 如果是txt或xml这些文件 可以右击这个文件 设置其

随机推荐

  • vscode缩进和Eslint缩进问题解决

    vscode缩进和Eslint缩进问题解决 vscode更改换行时的缩进 如果更改失效 取消该属性勾选 Eslint 缩进校验修改
  • 解决问题记录2:项目内使用lombok的@Log4j2失效

    问题描述 在使用Log4j2注解后 程序中使用log 启动加载时报错 找不到相对的依赖 检查lombok的依赖是正确的添加的 问题解决 尝试了网上的众多方法都没有解决 后想到是否是有其他的jar内做了lombok的依赖 导致依赖到了其他ja
  • JSP使用最简单的echarts图入门

    jsp使用最简单的echarts图表 jsp项目中应用最简单的一个折线图 柱状图等 一 echarts官网使用 首先打开echarts的api官方文档 官网 https echarts apache org examples zh inde
  • 算法的复杂度

    常用的算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O n2 O n2 稳定 O 1 快速排序 O n2 O n log2n 不稳定 O log2n O n 选择排序 O n2 O n2
  • 我在知乎学写作

    最懂技术的传播者 最懂传播的工程师 最近被知乎成功 忽悠 报名了一个 写作新人培养计划 的课程 写作新人 这老黄瓜未免也太能给自己刷绿漆了吧 心里头想着 还是得push自己 在内容创作的道路上 搞点事情啊 咋回事呢 为什么是知乎 从媒体江湖
  • Ubuntu20.04 ROS noetic安装教程

    注意 本贴是ros官网的方法 使用ros原版官方源 不是国内镜像 适合网络环境比较好的小伙伴 添加源 sudo sh c echo deb http packages ros org ros ubuntu lsb release sc ma
  • NUC980开源项目6-获取官方源码

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • vulnhub靶机Thoth-Tech

    下载地址 https download vulnhub com thothtech Thoth Tech ova 主机发现 arp scan l 目标 192 168 21 148 端口扫描 nmap min rate 10000 p 19
  • 页面服务器不稳定因为什么,关于网站出现“该页面因服务器不稳定可能无法正常访问”的提示...

    TOC 网站的说法 原文链接 http bbs 360 cn thread 15235172 1 1 html 关于网站出现 该页面因服务器不稳定可能无法正常访问 的提示 近期我们接到一些用户反馈 网站出现 该页面因服务器不稳定可能无法正常
  • Istio是啥?一文带你彻底了解!

    Istio是啥 一文带你彻底了解 什么是 Istio 官方对 Istio 的介绍浓缩成了一句话 An open platform to connect secure control and observe services 翻译过来 就是
  • IDEA快速搭建SpringBoot项目

    项目搭建 创建项目 配置项目信息 依赖选择 可选可不选 根据实际需求来 主要都是后期导入 先选择的话 选择Web下的SpringWeb以及Template Englines下的Thymeleaf就够用了 SQL可以勾选MySQL Drive
  • Android蓝牙连接出现133的解决办法

    代码片段 出现连接133的问题找了很久的解决办法 尝试各种亦然不行 最终的解决办法就是下面标红代码 if status BluetoothGatt GATT SUCCESS if newState gatt STATE CONNECTED
  • redis配置文件详解

    redis配置文件详解 1 开头说明 这里没什么好说的 需要注意的是后面需要使用内存大小时 可以指定单位 通常是以 k gb m的形式出现 并且单位不区分大小写 2 INCLUDES 我们知道Redis只有一个配置文件 如果多个人进行开发维
  • 新建虚拟机与本机ping不通(一招解决)

    初始新建虚拟机或者复制虚拟机后 发现虚拟机能ping通内外网 但是本机无法ping通虚拟机 xshell也无法连接虚拟机 这时候就很头疼了 因为要上传很多文件到虚拟机上面 解决办法 1 关闭虚拟机后 打开虚拟机的虚拟网络编辑器 虚拟机 编辑
  • 抖音直播伴侣使用教程

    抖音直播伴侣使用教程分享 红色框区域 管理场景 添加素材 切换横竖屏 蓝色框区域 常用直播功能 绿色框区域 开关播控制 性能占用情况 官方公告 黄色框区域 直播榜单 白色框区域 弹幕窗口 中央区域 直播画面采集预览 抖音直播伴侣功能介绍 添
  • Vue入门

    npm install g cnpm registry https registry npm taobao org cnpm install global vue cli vue init webpack my project cd my
  • 大厂 H5 开发实战手册

    京东凹凸实验室 Aotu io 英文简称 O2 创立于 2015 年 10 月 为掘金最早一批联合编辑 拥有数千关注者 O2 对内负责京东 PC 端首页 多个频道页 小程序版本京东购物 微信手 Q 京东购物 M 端京东 各类营销活动场景 H
  • Java使用TreeSet来排序学生成绩

    Java TreeSet TreeSet是一个有序的集合 它的作用是提供有序的Set集合 在java中使用 下面我们来进行一个实例来操作一下 具体看看怎么使用 我们的要求是用TreeSet集合存储多个学生对象的姓名 语文和数学成绩 然后按照
  • 一道经典面试题透彻理解面向对象编程思想和简单工厂模式

    一道经典的面试题如下 用一种面向对象编程语言实现一个计算器来满足整数的加减乘除运算 大部分人的代码如下 1 0版本 include
  • 【教程&工具】微信同步文章到Bear

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