2017 年 7 月 29 日更新:微博调整了自身 API,本文中使用的 API 已不能使用,Workflow 随之也不能正常工作了。现在没想到好的解决办法,请知悉。
由于 Markdown 的要求,图床是必不可少的。实际上我很多文章都是在移动设备上写的,文章配图也有很多都是在移动设备上获得的,而移动设备上没有比较好的图床应用,而全部转移到桌面端上传到图床的话,也很麻烦。一般到这个时候我都会首选用 Workflow 尝试解决。
先放一个直接能用的Workflow[1] 链接:上传图片到新浪微博图床 公有
自 Workflow 更新了 Get Contents of URL 这个动作之后,利用 Workflow 上传图片到图传并获得外链成为了可能。少数派上 @JailbreakHum 写的 Workflow 系列文章中已经举了两个例子,分别是基于 Imgur 和 sm.ms 的。好处是这两个图床都比较简单,无需太多步骤,坏处是这两个网站在大陆都访问困难,用作图床的话速度偏慢。
要想获得良好的速度和稳定性,应该尽量选择国内的平台。目前用得比较多的一个是七牛云,需要注册,并且限制流量和空间,我不太熟悉;第二个其实就是微博。每条微博的配图都是允许外链的,而且新浪可以保证稳定性和访问速度。有人可能接触过之前一个名叫「围脖是个好图床」的项目,原理也正是如此。
所以方向明确了,就是用 Workflow 实现以下内容:在相册中选取图片,发表一条微博,当然这条微博不想别人看见,然后获取到这张图片的链接。整个 Workflow 的难点在如何调用微博的 API 发微博上。
前期准备操作
能用账户发微博,实际上是取得了这个账户的某种权限,对新浪来说,这肯定需要用户进行授权。查新浪官方的 API 文档,事实也确实这样。这项 API 是这样设定的:
URL:POST https://upload.api.weibo.com/2/statuses/upload.json
支持格式:JSON
是否需要登陆:是
所请求的参数中我们需要关注的有以下几个:

这几项参数中,需要我们去提前获取的只有 access_token,也就是用户的授权回执。【评论区有用 Workflow 获取 access_token 的方法。】用户的授权回执新浪只授权给新浪的开发者,所以为了获取到这个字段,没有更好的办法,只好去当一把新浪开发者。
按照以下步骤,就能创建一个「应用」,并获取到所需数据。
注册成为新浪开发者并创建一个应用
- 登录新浪开放平台:新浪开放平台,按照网站提示注册成为开发者。
-
创建一个应用,步骤如下图。注意授权回调页这里要填写一个能打开的网址,是哪个网址无所谓。


获取 access_token
-
首先下载新浪官方 SDK,这里下载 Java 的就好。
下载地址:Java_SDK -
然后将 SDK 解压导入 Eclipse 中。首先在边栏找到 src,在其下的 config.properties 文件中填写 App Key 和 App Secret 以及你之前自己设置的授权回调页网址。

-
在边栏的 examples 下的 weibo4j.examples.oauth2 里,打开 OAuth4Code.java,在顶栏选择 Run > Run as Java Application

-
这时候会自动打开浏览器,跳转到之前在授权回调页里设置的网址,仔细观察网址栏,最后有一段
code=XXXXXX的字样,复制这段字符。回到Eclipse 里,在下方的控制台里输入之前复制的 code 后的文字,按回车。观察控制台里的内容如下,记下其中的access_token=2.00xxxxxx的字样,这就是我们要获取的字段。
注意到这里我们创建的应用是未经新浪审核的,如果你对其授权的不是创建应用使用的账户,那么这个 access_token 的有效期只有一天,而如果授权的账户和创建应用的账户一致,有效期则是五年。关于微博的前期准备工作到此结束。
制作Workflow
接下来是制作 Workflow 的过程。关键的部分仅有一步:Get Contents of URL 。根据微博文档要求,Method 需要设置成 POST ,Request Body 选 Form 。(关于这部分的文章请看少数派上的这篇文章)。其下有几个参数,分别如图填写。

其中 status 对应的变量 name 是该图片的文件名,作为微博正文。visible 的值之所以取 2(密友圈可见)是因为我在测试使用「仅自己可见」时返回错误。所以我建议是注册一个小号专门用来做图床,保持关注数为零,这样就没人会看见你发的图片了。
URL 返回的同样是 JSON 格式的数据,其中名为 original_pic的 key 里包含了图片的 URL ,但经过了特殊处理,需要将里面的反斜杠都去掉才是真正的图片链接。至此这个 Workflow 就讲述完了。
结语
这一个流程下来,其实最难的最复杂不是 Workflow 这个部分,而是前期的准备工作。
多数人看到这里,可能已经大大地翻了一个白眼,心里想这么麻烦到底是图个啥?
其实这就是折腾,愿意折腾的人总能因为一点小小的需求不辞辛苦地做很多工作。这绝对不是所谓最「效率」的办法,最效率的办法应该是找已经有的 Workflow 用着,或者购买优质的服务。但怎么说呢,折腾这个过程的乐趣,只有愿意折腾的人才能体会到。
Workflow 我把它比作一只会下金蛋的鸡,因为我发现做出一个能实现自己需求的 Workflow 是一件好事,制作 Workflow 的途中能学习到的知识和思维甚至是更有价值的部分。
本文由 Ulysses 写成,图片标注工具是 Powerpoint
-
使用这个 Workflow 时的图片都发布到了微博某账户下,该账户没有关注与被关注,发布时设置的是密友可见,所以不会有人看见发在上面的图片。请大家合理使用,不要上传不健康的图片。同样请不要泄露这个 Wrorkflow 中的
access_token,也不要将这个access_token用在别处。如果在意自己图片的隐私,又对微博图床有需求的话,我强烈建议按照文中的步骤自制一个。
