前些日子逛 App Store 时,发现 App Store 首页 App Of The Day 等专题的背景图大都很漂亮,拿来当壁纸是完全没问题的,比如下面这张厨房故事的背景图。
尝试利用某个不存在的网络调试工具抓了一下包,很轻松就把需要的图片给抓出来了。
当我把这件事儿发到社交网络上之后,得到了一些朋友的回应。其中有部分朋友不太会使用这类网络调试工具,感到很困惑。后来经 @文刀漢三 提醒才发现,原来 App Of The Day 这类专题都是有分享链接的,在页面的最下方可以使用 Share Sheet 将专题页面分享出去。这就好办了,利用 Workflow 分析网页的 HTML 代码,就能够将特定的资源抓取出来了。 分析网页代码
这个 Workflow 需要在 Share Sheet 中运行,并且是从网页中抓取特定的资源,那首先要做的就是先获取网页链接及其源代码。
这里需要用到 Get Contents of URL 将网页下载下来,并通过 Make HTML from Rich Text 把网页转换成 HTML 文档,通过查找 HTML 文档中的相应字段,来获取特定资源的下载链接。直接通过 Quick Look 来阅读 HTML 文档太麻烦了,可以考虑将文档发送到电脑上,使用专门的编辑器来阅读、查找,会方便很多。
本例中是需要获取图片资源,因此查找的关键字都是图片的后缀名,比如 .jpg, .jpeg, .png。最后发现 HTML 文档中有许多 .jpg 结尾的链接,其中的某个链接可能就是我们需要的背景图下载链接。
分析处理链接
前文中查找到的图片链接都是 https://abcde12345.jpg 这种格式的,使用 Match Text 动作配合简单的正则表达式就能将所有这类型的链接抓取出来。这里用到的正则表达式是 https://(.+?)\.jpg, 其中的关键部分在于小括号中包含的内容。
英文句号 . 表示匹配除了换行符 \n 之外的任意字符,比如字母、数字、符号等等,符合本例中的需求;加号 + 表示匹配前面的表达式一次或多次,本例中链接是由一堆字母、数字、英文句号组成的,因此需要匹配多次;最后的问好 ? 表示非贪心量化,尽可能少的匹配所搜索的字符串。
如前文所说,英文句号 . 表示匹配除了换行符 \n 之外的任意字符,但此时我们需要它在正则表达式中表示它原有的意思,不去匹配字母、数字、符号,这就需要在英文句号 . 前面加上一个反斜杠 \ 来实现了。同理,如果某些时候我们需要在正则表达式中匹配加号 +, 那就需要通过使用反斜杠加上加号 \+ 来实现了。
有关正则表达式的更多介绍,可以查看维基百科上的相关页面。 获取到全部图片的下载链接后,发现这些链接 https:// 和 .jpg 中间夹着的部分,都是一致的,随便拿一个来用都行。但需要注意的是,.jpg 前面的 1200x600 代表下载下来的图片的分辨率,默认的这个分辨率拿来当壁纸可是远远不够的啊。经过测试发现,把这个参数改得大一些,Apple 的服务器就会提供分辨率更高的图片,最高能达到 4K 级别。
这里使用 Replace Text 动作加上正则表达式来查找并替换链接中的分辨率参数,为了获取最大的分辨率,本例中将参数设置成了 5000x5000(最终实际下载的图片还是 4K 分辨率的)。
此处正则表达式中的 \d 表示匹配一个数字字符,后面加上加号 + 表示前面这个 \d 要匹配至少一次。x 就是小写英文字母 x。
最终将处理好的图片链接下载下来,存入相册,就达成目标了。
结语
一个原本比较复杂的操作流程,经过各种动作的组合变形,最终实现一键操作,这就是 Workflow 的魅力和便利。
本例中所讲的只是 Workflow 一个相对基础的应用场景。经过长时间的练习,思考适合自己的应用场景,最终一定能激发出 Workflow 更大的潜力。