Sunday, December 23, 2018

如何只让你的原创文字微博,原创图片微博自动同步到其他平台?


很多人(包括我)都会使用IFTTT的同步服务来把自己的微博同步到其他第三方平台,目前来讲运行的还不错,但是其中有一个问题很困扰我:IFTTT并不能区分文字微博、图片微博、转发微博这几种类型的帖子从而同步对应类型的帖子到twitter/facebook(其实IFTTT付费用户是可以实现这一点的,但是这个需求付费199$有点不值得,所以我们可以寻求其他服务来解决这个问题),我的方法里还是以IFTTT为核心,以另一个类IFTTT工具integromat为过滤器来实现的。

原理

其实国外有很多类似IFTTT的工具,比如Zapier,integromat,Microsoft,他们都提供了比IFTTT更加强大、自定义的功能,但是使用起来门槛相对高一点,但是非程序员一定能学会并使用,因为这些平台的目标群体本来就是非程序员群体。不过,这些工具基本都是收费的,免费用户只提供一点额度,所以说IFTTT还是非常良心的。我在这个教程里面使用的是integromat的服务来配合IFTTT,integromat提供的免费额度大概每个月能同步500+条微博,如果你不是话痨的话,应该够了吧。
需要说明的是: 这个方法适合所有人,并不复杂。 该方法可以过滤掉转发微博(直接转发(不带转发理由)/转发别人的转发微博),并且区分出图片微博,原创微博(会把你直接带转发理由转发原创微博的转发微博(有点绕,我称为一级带文字转发),也当做原创微博),从而同步对应类型到其他平台。

From: https://xiaomingplus.com/note/weibo-filter-to-other-platform/
and : https://sspai.com/post/51942

操作步骤

以同步到twitter为例(你可以参照这个同步到其他任何IFTTT支持的平台
  1. 先在IFTTT创建2个Applet,分别用于同步原创文字微博到twitter和同步原创图片微博到twitter.
    • 同步原创文字微博到twitter
      • this:搜索webhook,并选择webhook->Connect->Receive a web request,Event Name填写originalWeibo,点击Create trigger
      • that:搜索twitter,并选择twitter->Post a tweet,Tweet text填写{{Value1}},点击Create action
      • finish
    • 同步原创图片微博到twitter图片tweet
      • this:搜索webhook,并选择webhook->Receive a web request,Event Name填写imageWeibo,点击Create trigger
      • that:搜索twitter,并选择twitter->Post a tweet with image,Tweet text填写{{Value1}},Image URL填写{{Value2}},点击Create action
      • finish
    • 获取webhook的触发地址:ifttt的网站右上角,点击Services,搜索Webhooks,点击Documentation,不要关闭这个网页,这里的Key,待会要用到。
  2. 登录integromat,点击Create a new scenario,作用是接收ifttt请求,并过滤之后,再分别触发上面1中的2个ifttt的webhook规则,ifttt去处理接下来的事情。
    1. webhook步骤(图片见下):点击?:搜索webhook,并选择webhooks->Custom Webhook,点击Webhooks图标,看到Webhook的下拉框,点击右侧的Add,Webhook name填写IFTTT weibo webhook,点击左下角的Show advanced settings,Data structure右侧点击Add,Data Structure name填写Weibo data structure,点击Generator,Content type选择Query String,Sample data填写:text=text&image=imageUrl,点击Save,Add data structure表单也点击Save,Add a hook也点击Save,你会在Webhooks看到一串如https://hook.integromat.com/xxx的url,并且有一个正在loading的stop标志,表示它正在等待你完成首次触发你的webhook, 如何触发呢?复制这个url,并且在这个url后面拼接一段?text=text&image=imageUrl,最终会得到一个类似这样的urlhttps://hook.integromat.com/xxxxxxxxxxxxxxx?text=text&image=imageUrl,直接在浏览器里访问这个地址,如果界面提示Successfuly determined, 说明成功了。把这个url记下来(不用加 刚拼接的那段哈,只包括https://hook.integromat.com/xxxxxxxxxxxxxxx),待会儿用于ifttt触发微博后通知integromat
    2. 点击webhook图标右边的半圆,选择Router,我们要在Router里做过滤:
      • 点击第一条分支的虚线中间部分,点击set up a filter,Lable填image weibo,点击Condition输入框,选左边的image(如果看不到image,text, 说明刚刚在触发第一次webhook的时候超时了,需要重新点击第一步里的Webhooks,点击Re-determine data structure,然后立即在浏览器中访问刚刚拼接好的地址,成功后继续刚刚的动作),下拉框选择exists,点击OK,点击这条分支的末端?号,搜索HTTP,选择HTTP,选择Make a request,https://maker.ifttt.com/trigger/imageWeibo/with/key/xxxxxx,这里的xxxxxx要换成刚刚IFTTT步骤里最后一步获取到的Key,Method选择POST,Body Type选择application/x-www-form-urlencode,点击Add item,Key填value1,点击value的输入框,选择text,点击Add item,key填写value2,点击value的输入框,选择image,点击OK;
      • 点击第二条分支的虚线中间部分,点击set up a filter,Lable填original weibo,点击Condition输入框,选左边的image,下拉框选择Does not exist,点击右下角Add and rule,点击输入框,选择text,下拉框选择Dose not matches Pattern(case insensitive),下面的输入框输入(Repost)|(转发微博)|(\/\/)|(轉發微博),点击OK,点击这条分支的末端?号,搜索HTTP,选择HTTP,选择Make a request,https://maker.ifttt.com/trigger/originalWeibo/with/key/xxxxxx,这里的xxxxxx要换成刚刚IFTTT步骤里最后一步获取到的Key,Method选择POST,Body Type选择Application/x-www-form-urlencode,点击Add item,Key填value1,点击value的输入框,选择text,点击OK;
      • 点击左下角最后一个按钮,保存。点击右上角Scenarios,在列表里找到你刚刚添加的scenarios,点击右侧的OFF/ON,打开这个任务。
  3. 回到IFTTT,创建同步微博内容到integromat的webhook的触发器。
    • this:搜索weibo,选择New post by you
    • that:搜索webhook,选择Make a web request,URL填写刚刚第2步里面拿到的https://hook.integromat.com/xxx这样的一个url,Method选择POST,Content Type选择application/x-www-form-urlencode,Body填写text={{Text}}&image={{PhotoURL}},点击Create Action,点击Finish
ok,到这里就全部搞定了!如果要同步到其他平台,只需要在IFTTT操作就可以了,步骤类似上面操作步骤里的第一步即可。其实花费这些时间去搞这些,归根结底还是因为国内的这些服务接口做的太烂,用户不得不绕一个大圈去实现一些很简单的东西。这些厂商去看看telegram,stack,github的API估计会找个洞钻下去吧。
本篇文章只介绍了关于同步微博这一个应用,其实IFTTT,Zapier,integromat这些服务还可以实现更多,更牛逼的应用,比如当你回到家,自动开灯开空调,当你在微信、微博、浏览器中看到好文章准备稍后阅读时,自动在pocket里添加这篇文章并在todolist里创建一个待办任务,甚至当xxx发生的时候,自动往数据库添加一条记录。等等等等。而这一切都不需要你编程实现。

No comments: