大家好,我是 Hirat。
这是我在少数派的第一篇文章,想在这里好好聊聊自动化这件事。
先介绍一下背景,我是一名 iOS 程序员,比较喜欢各类电子产品,平时也会玩玩摄影。
目前正在使用的主力电子设备有 Macbook Pro、iPhone xs Max、iPad Pro 12.9 2022、Apple TV 4K 2022、尼康 Z5。
初衷
出于工作及爱好的需要,经常会收集一些资料,比如图片、文章之类的,相信很多人都会有这样的需求。
这些收集来的资料,其实只是存档起来,在某个特定的时刻才会派上用场。而这些收集的操作,却各不相同,有些来自网页,有些来自不同的 App,分散在各种地方。为了解决这类需求,不同的厂商提供了各种解决方案。
但是这类方案大多有一个共同的特点:就是基本上都需要手动去操作。比如收集文章到 cubox,需要先复制链接,然后在 cubox 内导入链接,然后再解析、保存。
我是一个结果导向的人,不强求具体的解决方案,只要能解决,且实现过程足够优雅就可以了。比如我之前有收集图片的需求,当市面上有 app 能满足需求时,我就用它。当它不满足需求时,我就自己去写了一个。当自己写的 app 不太符合我需求时,我又开始寻找其他更好的解决方案。
收集工作是如此的枯燥无味,那么有没有一种方案可以实现自动化收集呢?
思考
少数派的读者们,对苹果的快捷指令一定十分熟悉了。简单来说,快捷指令就是将手机上的功能简化到极致,拆分成一个个最基本的动作,然后通过图形化的界面,按照你自己的逻辑再组装起来,实现更复杂的功能。
同时快捷指令中提供了几种自动化方案,通过时间、地点、专注模式等的变化来作为触发条件。然而这些还远远不够,比如我要在浏览小红书笔记时,如何自动记录小红书笔记内容,并且下载无水印图片?
我们可以试着用之前的思路来推演一下,使用快捷指令能否做到?
快捷指令可以通过监听剪贴板内容,来间接完成 app 间的信息传递,但是这样会涉及到 3 个问题:
- 需要在后台一直运行 1 个快捷指令(可以通过快捷指令中的「重复」这个操作来变相实现),这会导致一个问题:耗电量会增加。
- 快捷指令循环检测剪贴板内容,检测到之后还需要去解析,这又非常复杂,因为一般 app 的接口都加密了,直接通过获取的分享链接,能拿到的内容其实是很有限的。
- 浏览小红书笔记时,要实现自动解析,需要多一步操作,就是你浏览小红书笔记时,需要点击分享按钮,复制链接,这样快捷指令才会去检测到链接并开始解析。这就违背之前的初衷了,就是不做多余的操作而实现自动化收集。
此路不通,那到底应该如何做到呢?其实只要解决 2 个问题,这个难题就迎刃而解了。
- 拦截获取小红书笔记这一数据请求
- 解析数据内容
下面我们逐个击破。
拦截数据请求
这里我使用到了 Charles,接下来完成 2 步操作:
1. 移动端配置相关证书
打开 Charles -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser,接下来的弹框中会提示将手机代理设置为 192.168.1.111:8888(实际 IP 地址为 Mac 的 IP 地址,此处为演示数据),然后手机浏览器访问 chls.pro/ssl 下载证书,按照提示操作即可。
2. Mac 上需将抓包结果保存到本地。
打开 Charles,点击 Tools -> Mirror,按照下图配置,其中的保存路径请替换成你电脑上相应的路径


完成以上操作之后,你在手机上浏览小红书笔记时,会在以下路径下发现多了一些文件:
/Users/Hirat/Pictures/Charles/小红书/edith.xiaohongshu.com/api/sns/v2/note/
这些就是小红书笔记的请求数据了。
解析数据内容
接下来的问题就是当文件被保存到该目录时,Mac 是如何检测到,并进行解析的?
下面第 2 个工具该上场了,它就是 Mac 自带的工具:自动操作。也就是那个机器人头像的 App。自动操作可以监测文件夹,当文件夹中新加入文件时,就会触发操作。这一点是不是很像快捷指令的自动化?
1.自动操作 App 中,创建一个新的文件夹操作,搜索 “过滤”,将 “过滤访达项目” 拖到右侧窗口中,选择文件夹目录设置为 /Users/Hirat/Pictures/Charles/小红书/edith.xiaohongshu.com/api/sns/v2/note/ ,按照如图配置:

接下来添加一个工作流程到自动操作中,如下图所示:

注意到工作流程目前还没有创建,先留空,等下一步创建解析数据的工作流程后再改过来。
保存在这一步骤中创建的文件夹操作。
2.接下来在自动操作 App 中创建一个工作流程用于解析小红书笔记,文件 -> 新建 -> 工作流程 -> 运行 shell 脚本,配置如下:

清空脚本内容,将以下脚本内容粘贴进去:
#!/bin/bash
#定义变量
author= cat "$1" | sed -e $'s/,/\\\n/g' | grep author_name | awk -F "\"" '{print $4}' | sed -e $'s/.$//'
title= cat "$1" | sed -e $'s/,/\\\n/g' | grep title | head -n 1 | awk -F "\"" '{print $4}'
desc= cat "$1" | sed -e $'s/,/\\\n/g' | grep desc | head -n 1 | awk -F "\"" '{print $4}'
thumb= cat "$1" | sed -e $'s/,/\\\n/g' | grep thumb | head -n 1 | awk -F "\"" '{print $4}'
webpage_url= cat "$1" | sed -e $'s/,/\\\n/g' | grep webpage_url | head -n 1 | awk -F "\"" '{print $4}'
avatar= cat "$1" | sed -e $'s/,/\\\n/g' | grep image | head -1 | awk -F "\"" '{print $4}'
file_name= basename "$1"
source_root="/Users/Hirat/Pictures/Charles/存档/小红书/"${author}"/"${title}"/"
source_file_path="${source_root}"/"${file_name}"
root_dir="/Users/Hirat/Pictures/小红书"
author_dir="${root_dir}/"${author}"/"
image_dir="${root_dir}/"${author}"/"${title}"/"
mkdir -p "${source_root}"
mkdir -p "${author_dir}"
mkdir -p "${image_dir}"
#下载文章内容
echo $title > ${image_dir}/content.txt
#echo $avatar > ${image_dir}/content.txt
echo $desc >> ${image_dir}/content.txt
#echo $webpage_url >> ${image_dir}/content.txt
#下载图片
for line in cat "$1" | sed -e $'s/,/\\\n/g' | grep original | awk -F "\"" '{print $4}' ; do
curl -O "$line" --output-dir "${image_dir}"
echo ${line} >> "${image_dir}"/image.txt
done
#复制 API 结果文件
cp "$1" ${image_dir}/response.json
mv "$1" "${source_file_path}"
#给图片加后缀
find "${image_dir}" -type f ! -name ".jpg" ! -name ".txt" ! -name "*.json" -exec mv '{}' '{}'.jpg ;
#下载封面图片
curl -o "${image_dir}"/folder.jpg "$thumb"
curl -o "${author_dir}"/folder.jpg "$avatar"
#scp -r "${author_dir}" /Volumes/photo/小红书/"${author}"/
#rm -rf "${author_dir}"/"${title}"/*.jpg
至此,所有设置都搞定了。接下来你打开手机开始刷小红书,图片就会自动下载到 Mac 上,笔记相关的文字内容也会被写入相关文档。
以上通过一个简单的实例,介绍了如何打通 iPhone 跟 Mac,实现自动化收集数据。
事实上,我们可以根据这一套方案,来构建更为复杂的系统。
总结一下:
我们可以通过 Charles 抓包市面上绝大部分 app,也就是说 app 上的任意一个点击,一系列操作,都可能被 Charles 捕获,这不就是 IFTTT 的 service 吗?
接下来通过自动操作的文件夹检测,将上一步捕获的数据进行解析再处理,再加上自动操作中苹果提供的各种功能,是不是可以像搭积木一样组建一个更为复杂的系统。
最后,自动操作中可以执行 shell、Apple Script 等脚本语言,shell 可以直接调用快捷指令,能直接无缝对接 Mac 中的各种 App,再搭配 iCloud 同步,将处理完的数据保存到备忘录、相册、提醒事项、日历等,会自动同步回 iPhone/iPad,实现了完美闭环。
这是我在少数派的第一篇文章,后面还会有一系列文章,涉及到 iPhone 以及 Mac 上的自动化操作,来帮助你更好的收集、整理资料,更大程度解放自己的大脑。感兴趣的可以关注一下,留意后续的更新。
