将微博同步至 Twitter

2021/02/15 更新

由于微博的原因,导致 IFTTT 从微博上抓取内容的 OAuth 接口无法使用,所以上述方法暂时失效了,并通过 IFTTT 客服了解到,因为联系不上微博方面修复这个问题,所以他们也不知道何时才能恢复。

正文

本文需要一定的 Python 编程基础以及 AWS 使用经验。

因为同时拥有微博和推特账号,所以很多时候同一条内容既想发到两个平台上,又不想两个平台之间来回复制粘贴,之前尝试用 IFTTT 来做内容同步,即把一条新微博同步到推特上去,但效果不是很理想,比如说无法区分原创微博、转发微博和带图微博,这样导致三者同步过去的样子是一致的,要么都不带图,这样带图微博的图片就丢了,要么都带着图,纯文字微博的情况就直接放一张默认的『 image not found 』,要多难看有多难看,而转发微博会把整个转发链都搬上去,而里头的内容很可能没什么营养,除了污染推特粉丝的时间线没有任何用处。

后来在少数派上发现了一篇文章,讲解如何用 IFTTT 配合 Integromat 来分类微博内容,然后根据内容的类别发送不同的推特,而我们想要同步的一般只有原创纯文字微博和带图微博, Integromat 强大的分流机制能很好地完成这个简单的任务。然而这个方法也是有限制的,少数派上给出了一个列表,

& 字符及其之后的文字内容无法同步,原因不明;

文字数超过 Twitter 限制(140)无法同步;

受制于微博接口限制,多图微博只同步第一张图片;

因为 Twitter 不支持显示微博表情包,建议使用输入法自带的表情符号。

Integromat 免费额度每月仅有 1000 Operations,而一条原创微博消耗两次(转发微博消耗一次),故免费账户每月最多只能同步 500 条原创微博。

其实 Integromat 还有一条限制,免费版的套餐最快只能做到每 15 分钟同步一次,当然对于我们普通用户来说这不是个大问题,因为我们的时效性要求没那么高。前面四条跟微博或者推特平台自身的限制有关,作为用户几乎无计可施,所以本文的主要目的是为了解除最后一条限制,即如何用 AWS API Gateway + AWS Lambda 替换掉 Integromat ,整个过程如下图所示。

IFTTT
IFTTT
IFTTT 纯文字内容
IFTTT 纯文字内容
IFTTT 带图内容
IFTTT 带图内容
Viewer does not support full SVG 1.1

操作过程

因为很多步骤与少数派的文章是重合的,所以我就直接抄过来。

1. 设置 IFTTT

首先创建两个 Applet 分别负责发送纯文字推特和带图推特。

纯文字内容

  1. if this Webhooks –> Receive a web request –> Event Name: only_text_weibo –> Create trigger
  2. then that Twitter –> Post a tweet –> Tweet text:{{Value1}}
  3. Creat action

带图内容

  1. if this Webhooks –> Receive a web request –> Event Name: image_text_weibo –> Create trigger
  2. then that Twitter –> Post a tweet with image –> Tweet text: {{Value1}} –> image URL: {{Value2}}
  3. Creat action

然后点右上角自己的头像 -> My Services -> Webhooks -> Documentation ,在这个页面可以看到自己的 IFTTT key ,记录下来留待后用。

2. 设置 AWS

这里由 AWS API Gateway 提供一个 API endpoint ,用于接收从 IFTTT 发送过来的请求,后面用一个 Lambda 函数来进行具体的分流处理,用两者配合搭建 API 的详细过程记录在这篇文章中,在此不再赘述。只需要接收的请求方法为 POST ,选择 HTTP API 还是 Restful API 并没有什么区别。然后将这一份代码部署上线,这样 API Gateway + Lambda 的部分就完成了,其中包含了少数派文章中所描述的所有同步规则以及转发内容过滤规则。

注意在 config.json 文件中的两个 endpoint 要填入上一步中获得的 IFTTT key ,设置的 token 记好,下一步要用。

3. 设置 IFTTT

不要疑惑,标题没有写错,在这里我们需要设置第三个 Applet 来监听微博上的动静,然后触发在上一步中刚刚设置好的 API 。

  1. if this:Weibo,选择 New post by you;
  2. then that:Webhook,选择 Make a web request,URL 填写设置 Integromat 里面拿到的 Webhook 地址:<your API Endpoint>,Method 选择 POST,Content Type 选择 application/x-www-form-urlencode,Body 填写 text={{Text}}&image={{PhotoURL}}&token=<your-token-used-in-code-config>
  3. 点击 Create Action,点击 Finish

到此为止一个加强版的微博同步推特的工具就搭好了, AWS Lambda 自然是即时响应的,不必等待 15 分钟的发送队列,而限额呢?它每个月的免费额度是一百万次,也就是说可以同步一百万条微博,相当于没有限制。

4 thoughts on “将微博同步至 Twitter

  1. 博主您好,目前推特同步微博博文,按照您说的方法还能使用么?我看到您近期twitter正常同步到微博了,嘿嘿

    1. 微博那边的 API 已经不好用了, IFTTT 上也看不到微博了,微博和推特其实都是我手动发的

      1. 好吧蟹蟹大佬,想想也是,中文发微博和英文发推特,逻辑和思维点,我感觉是不一样的,因此还是手动吧

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据