在尝试了一系列自动化服务(IFTTT、Microsoft Flow、Zapier 以及 Integromat)之后,最终选择了使用 Integromat。

STEP 0 推特触发器

我们希望在用户发新推文的时候,触发 Scenario 将推文里的图片和视频保存到 OneDrive,所以首先需要添加推特触发器。点击邮件选择 add a module,选择 Twitter -> Watch Tweets

--2020-01-05--11.58.11

Integromat 的 Twitter 触发器支持 watch 自己的账号或者某个 id 的账号,可以按需选择。

--2020-01-05--11.59.59

STEP 1 迭代器

当某个用户发了一条新推之后,推特触发器会获取到这个推文相关的一些信息,这些信息被 Integromat 处理,以变量的形式提供给我们使用。

--2020-01-06--12.02.18

我们在这里重点关注的就是 EntitiesExtended entities 字段:

  • Entities 表示推文的第一个媒体文件,是一个单独的对象
  • Extended entities 表示推文的所有媒体文件,是一个对象数组
  • Media URL https 每个图片文件的链接地址

一个推文包含有多个媒体文件,所以我们需要添加一个迭代器,对每一个媒体文件进行一次单独的处理。所以 Iterator -> Flow Control -> Array 应该选择 Extended entities -> Media[]

STEP 2 OneDrive App

有了媒体文件的链接地址之后,我们就可以考虑上传到 OneDrive 了。

--2020-01-06--1.08.50

在 Iterator 之后添加一个新的 OneDrive 模块,选择 OneDrive -> Upload a file

--2020-01-06--1.13.31

不同于其他的自动化服务,比如 IFTTT 或者 Zapier,它们的 OneDrive App 都提供从URL上传文件到 OneDrive的功能,也就是说目前 Integromat 只支持将文件的二进制数据上传到 OneDrive 的功能,所以我们接下来还需要在 Iterator 和 OneDrive App 之间添加一个新的模块,来请求图片文件的二进制数据。

STEP 3 HTTP - get a file

--2020-01-06--1.18.54

在 Iterator 和 OneDrive App 之间添加一个新的模块 HTTP,并选择 Get a file

--2020-01-06--1.34.06

需要注意的是,在填写 URL 的时候,需要在 URL 末尾加上 :orig 的后缀,这样就能获取到完整尺寸的原图了。

推特的推文图片有多种尺寸:small medium large original,:orig 就是指的 original

STEP 4 Text Parser - get filename

由于我们在图片的 URL 末尾加上了 :orig 后缀,这导致最终默认保存到 OneDrive 的文件后缀名不正确(比如变成了 picture.jpg:orig),使得在 OneDrive 上显示的时候不能正确的识别为图片,也不能有预览,所以我们需要再手动处理生成一个文件名。

--2020-01-06--3.41.03

这里我们使用了 Text Parser Replace,提取文件链接的文件名部分。

STEP 5 OneDrive App

有了文件二进制数据和文件名之后,我们就可以配置 OneDrive App 了。

--2020-01-07--4.44.12

Milestone

Milestone
--2020-01-07--4.50.19

到这里我们就完成了一个基础的 Scenerio。这个基础的 Scenerio 能做到观察新推文并且自动将推文包含的图片保存到 OneDrive。接下来要考虑如何保存视频。

STEP 6 Router - media type

--2020-01-07--5.15.13

我们在 Iterator 之后添加一个 Router,这个 Router 用来区分推文包含的媒体文件的类型,如果是图片类型,就导入到上文设置好的流程,如果是视频文件,就要特别处理一下。

--2020-01-07--5.25.15

STEP 7 Merge Video Slices

保存视频的流程要相对复杂一点,因为 Twitter 并没有返回一个完整的视频文件,而是将一个视频做了分段处理。(原本 Twitter 就只允许上传大概 2~3 分钟时长的视频)

--2020-01-29--4.08.12

在 Video Router 之后再添加一个 Iterator 来处理每一个视频片段,将每一个视频片段通过 HTTP 下载下来。

--2020-01-29--4.12.19

Integromat 让我非常惊喜的地方就在于,它不仅支持 Iterator 这个组件,使得自动化流程可以做到一次触发器循环处理多个实体数据(而其他的自动化服务都不支持这个功能),而且还支持 Array Aggregator 这种骚东西。
;
当时我在处理推文视频这部分的时候还一度想要放弃,即便是我知道有这么个 Aggregator 的东西存在,也没想到居然连合并文件的功能都支持。
;
Integromat 我tm吹爆!

在拿到每一个视频片段的文件之后,通过 Aggregator 将视频文件合并为一个,然后保存到 OneDrive 就好啦

--2020-01-29--4.19.10

Final

最终的完全体 Scenerio

--2020-01-29--4.21.30-1

Integromat 是一个非常强大的自动化服务,同行基本没有能打的,但是价格也同样的昂贵。免费套餐基本做不了多少事,但是付费版最低套餐也要每个月9刀,而且给的使用配额也并没有太多。

我最初开始研究自动化是为了保存我非常喜欢的一个 coser 的推文图片,好在她并没有每天都发大量的图片和视频,所以实际上免费套餐似乎勉强能用?(发出了贫穷的声音.jpg)

--2020-01-29--4.27.06

Integromat 的免费额度有 1000 operations 和 100 MB 流量使用,我发现似乎 operations 用的反而更快一些,毕竟本文做的这个 Scenerio 也挺复杂的,我没理解错的话是 Scenerio 里的每一个步骤都算一次 operation,所以如果是watch那种经常发图片推文或者视频推文的推主的话,应该免费额度很快就会用完吧。

PS 额外的骚操作

Integromat 这货好像还支持 webhook,这也就意味着可以配合其他的自动化服务一起使用,所以如果你想要挑战一下极限的免费套餐使用,也许可以试试把一些步骤放在 IFTTT 或者 Zapier 里面(比如说在 IFTTT 里面配置触发器,判断媒体类型,然后把需要的数据拿到之后直接发给 Integromat 做文件保存处理),这样应该能节省大量的 operations。不过我也没具体尝试过,理论上应该可行的。🤔

前文也说到,Integromat 还不支持直接通过 URL 上传文件到 OneDrive,如果支持的话,至少在保存图片这一块又能节省不少的流量额度了,我也在 Integromat 的 feature request 页面提了一下这事儿,似乎有点希望?链接:https://www.integromat.com/en/requests/requests-to-update-existing-apps/p/onedrive-upload-a-file-from-url