2017年2月13日星期一

从头教你用制作 Workflow 万能扫码 | Matrix 精选

从头教你用制作 Workflow 万能扫码 | Matrix 精选
在复杂的世界里一个就够了:ONE一个- 少数派  /  森二

240279550db542c7f7c05d68dc52928c5911a_mw


Matrix 是少数派的全新产品,一个纯净、小众的写作平台,我们主张分享真实的产品体验,有实用价值的互联网领域经验、思考。欢迎忠于写作,喜好分享的朋友参与内测。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

本文内容仅代表作者本人观点,文章对标题和排版略作修改,原文链接

引子

「二维码真是越来越多了」一如既往我拿起手机准备 3D touch 微博的 ICON 扫码登录,突然觉得这个动作似曾相识,好像我如此重复的时候还有很多,比如:

  • 电脑逛淘宝想用手机接着看的时候我要用手机淘宝扫一下
  • 偶尔登一下万年不用的 QQ 邮箱时我要用手机 QQ 扫一下
  • 我要做书籍记录的时候我要点开豆瓣扫一下
  • 支付宝、微信支付的时候我要扫一下
  • 电脑上用微信登录的时候我要扫一下
  • ……

天哪,这实在太麻烦了,我要做一个 Workflow 完成所有的扫码动作。

多合一

我想把所有要扫码的地方全部用一个扫码界面代替。目前实现了如下功能:

  1. 扫描二维码登录淘宝、微博、微信、支付宝、京东
  2. 扫描电脑版淘宝页面二维码跳转到手机淘宝相关页面
  3. 扫描电脑版京东页面二维码跳转到手机淘宝相关页面
  4. 扫描书籍 ISBN 码跳转到手机豆瓣相关页面
  5. 微信扫码支付、加好友等
  6. 支付宝扫码支付、加好友等
  7. 如果既不是网页也不是 ISBN 码那就复制到剪贴板(万一你对象给你写了悄悄话藏在二维码里呢٩( ᐖ )و

淘宝、支付宝、豆瓣可以直达二维码链接界面。但是微博、微信需要跳转到本身的扫码界面二次扫码。虽说是二次扫码,但是也是极快的。具体原理可以参考微信的一篇文章。微信扫码为啥那么快?

也可以通过两张动图对比一下。

 微信登陆(二次扫码)

淘宝登陆(扫码直达) 

实现原理

实现这个 Workflow 的原理主要基于 URL SCHEME 的应用和豆瓣 API 的调用。

1. 首先获取各个 App 的 URL SCHEME

这些信息部分网上都可以搜到。

2. 研究调用机制

示例中分为一次扫码是如何实现的呢?一次扫码像是淘宝、支付宝和豆瓣,App 本身就支持从链接跳转到 App 中制定页面,但是如何获取这个「链接」就是关键了。以情况不复杂的支付宝扫码举例。复杂的情况类似于京东需要抓包分析,本文不涉及。

Image

这个二维码包含了一个网页:https://qr.alipay.com/a6x00588utz0thcokf77vv7d然后我试着直接打开看看。

Image

这是一个新的网址,有没有觉得有点眼熟?

https://ds.alipay.com/?from=mobilecodec&scheme=alipays%3A%2F%2Fplatformapi%2Fstartapp%3FsaId%3D10000007%26clientVersion%3D3.7.0.0718%26qrcode%3Dhttps%253A%252F%252Fqr.alipay.com%252Fa6x00588utz0thcofk77v7d%253F_s%253Dweb-other

这个 URL 经过了编码,首先来解码。

https://ds.alipay.com/?from=mobilecodec&scheme=alipays://platformapi/startapp?saId=10000007&clientVersion=3.7.0.0718&qrcode=https://qr.alipay.com/a6x00588utz0thcofk77v7d?_s=web-other

将其分段便于理解。

https://ds.alipay.com/?from=mobilecodec  &scheme=alipays://platformapi/startapp?saId=10000007  &clientVersion=3.7.0.0718  &qrcode=https://qr.alipay.com/a6x00588utz0thcofk77v7d?_s=web-other

从上至下一眼便知,第二行是支付宝客户端的 URL SCHEME,第四行是刚刚二维码内含的网页。把第二行和第四行结合起来去跑一下看看:

alipays://platformapi/startapp?saId=10000007&qrcode=https://qr.alipay.com/a6x00588utz0thcofk77v7d?_s=web-other

果然成功了!直接进入了我的个人主页。

Image

然后就可以在 Workflow 里开工了。首先扫描二维码,把扫描到的内容保存到一个变量中,我的 Workflow 里起名叫做 code。

Image

随后我清空了剪贴板,这是一个个人习惯。如果不需要可以删除。接着就是 Get Variable 用 If 语句判断刚刚读到的内容里面是否含有:

qr.alipay.com

这个元素,如果有的话,那刚刚读到的应该是一个调用支付宝打开的链接。那么我们给他在他前面加上一端:

alipays://platformapi/startapp?saId=10000007&qrcode=

使得链接变成这样:

alipays://platformapi/startapp?saId=10000007&qrcode=https://qr.alipay.com/xxxxxxxxxxxxxxxxxxxxxx

最后使用 Open URLS 就可以了。

Image

为了展示效果简化了判断是否为链接的判断,也是同样用 IF 判断即可。

3. 罗列一下其它 App 的解决方案

淘宝,替换链接中 https 为 taobao:

taobao://taobao.com/xxxxxx     //淘宝页面  taobao://tb.cn/xxxxx           //淘宝扫描二维码登陆

微信,如包含以下关键字,调用weixin://scanqrcode二次扫码:

tenpay.com                     //微信支付  weixin.qq.com                  //微信公众号、小程序、个人名片链接 

微博,如包含以下关键字,调用weibo://qrcode二次扫码:

weibo.cn                       //微博扫码登陆

豆瓣,替换链接中 https 为 douban:

douban://douban.com/book/xxxx  //豆瓣读书

京东,替换商品 id 或者登录 Key。

阅读前文后可以自己尝试看看。

4.调用豆瓣API

有兴趣的可以研究一下。在这个 Workflow 里是扫描书背后的条形码跳转到豆瓣的页面里。

Image

豆瓣的 API 页面:豆瓣图书Api V2

当我们扫到了书的条形码,就是那个 978xxxxxxxxxx 的 13 位数字之后,如何将它变成一个豆瓣可以打开的链接呢?这里以《岛上书店》举例。这本书的 ISBN 号是 9787539971810。

打开这个链接:

https://api.douban.com/v2/book/isbn/9787539971810

我们可以获得如下的信息:

{"rating":{"max":10,"numRaters":49715,"average":"7.7","min":0},"subtitle":"","author":["[美] 加布瑞埃拉·泽文"],"pubdate":"2015-5","tags":[{"count":8523,"name":"小说","title":"小说"},{"count":6457,"name":"外国文学","title":"外国文学"},{"count":4281,"name":"好书,值得一读","title":"好书,值得一读"},{"count":4024,"name":"美国文学","title":"美国文学"},{"count":3438,"name":"文学","title":"文学"},{"count":3267,"name":"生活","title":"生活"},{"count":3070,"name":"美国","title":"美国"},{"count":2878,"name":"深夜读书","title":"深夜读书"}],"origin_title":"The Storied Life of A. J. Fikry","image":"https://img3.doubanio.com\/mpic\/s28049685.jpg","binding":"平装","translator":["孙仲旭","李玉瑶"],"catalog":"第一部\n《待宰的羔羊》 \/ 3\n《像里兹饭店那样大的钻石》 \/ 27\n《咆哮营的幸运儿》 \/ 41\n《世界的感觉》 \/ 81\n《好人难寻》 \/ 89\n《卡拉维拉县驰名的跳蛙》 \/ 135\n《穿夏裙的女孩》 \/ 167\n第二部\n《与父亲的对话》 \/ 183\n《逮香蕉鱼的最佳日子》 \/ 197\n《泄密的心》 \/ 209\n《铁头》 \/ 223\n《当我们谈论爱情时我们在谈论什么》 \/ 249\n《书店老板》 \/ 257\n--\n注:整本书的章节标题都是文学作品的标题。\n《岛上书店》是一部小说。","ebook_URL":"https:\/\/read.douban.com\/ebook\/9580262\/","pages":"271","images":{"small":"https://img3.doubanio.com\/spic\/s28049685.jpg","large":"https://img3.doubanio.com\/lpic\/s28049685.jpg","medium":"https://img3.doubanio.com\/mpic\/s28049685.jpg"},"alt":"https:\/\/book.douban.com\/subject\/26340138\/","id":"26340138","publisher":"江苏凤凰文艺出版社","isbn10":"7539971819","isbn13":"9787539971810","title":"岛上书店","URL":"https:\/\/api.douban.com\/v2\/book\/26340138","alt_title":"The Storied Life of A. J. Fikry","author_intro":"加布瑞埃拉·泽文 Gabrielle Zevin\n译作目录:http:\/\/book.douban.com\/doulist\/14076\/\n译文小集:http:\/\/www.douban.com\/note\/34107135\/\n李玉瑶,编辑,译者。七十年代生人,现任职于上海译文出版社。译有《阿克拉手稿》《与狼共舞》《房间》《激情》等作品。","summary":"岛上书店是间维多利亚风格的小屋,门廊上挂着褪色的招牌,上面写着: 没有谁是一座孤岛。","ebook_price":"16.80","series":{"id":"34361","title":"全球顶级畅销小说文库:加·泽文作品"},"price":"CNY 35.00"}

很长的一段信息,包含了这本书的封面图片、简介等信息。这一次要提取的信息是《岛上书店》这本书的豆瓣 id:

"title":"岛上书店","URL":"https:\/\/api.douban.com\/v2\/book\/26340138",

URL 下有这本书的 id,这本书的豆瓣网页链接也包含了这个信息:

26340138  https://book.douban.com/subject/26340138/

接下来进行文字替换,打开链接即可。

https://api.douban.com/v2/book/26340138    douban://douban.com/book/26340138

下面用 Workflow 来完成这个动作。

Image

5.如何把以上东西全部放到一个 Workflow里

以上的教程单单领出来一个可能制作起来很方便,但是要怎么自动识别读到的文字呢?这里要用到正则表达式进行判断,首先判断一下是不是 ISBN 码,它的特征是 13 位数字,978 开头。

^978[0-9]{10}$

再可以判断是不是 http 开头的链接,这里就不展开了,这需要一些耐心琢磨。

推荐大家两个网站可以自学:

抛砖引玉

这个 Workflow 还远远没有完美,希望大家一起完善。这种东西少数派的大神肯定早就做过了吧,我心里是这样想的,希望能够抛砖引玉。我暂时还没有办法找出手机 QQ 扫码界面的 URL。微博微信的扫码还需要跳转到 App 本身的扫码界面二次扫码,并不像淘宝和豆瓣那样可以直达。

欢迎留言。

👉🏻 Workflow 下载

Update

  • 2017-01-23  增加大众点评扫码登陆 & 扫码跳转到手机大众点评
  • 2017-01-22  增加京东扫码登陆 & 扫码跳转到对手机京东
  • 2017-01-19  增加了支付宝扫码付款 & 扫码加好友等功能
  • 2017-01-18  First Release,支持淘宝、微博、微信、豆瓣



文章来源 少数派 ,原作者 森二 ,转载请注明原文链接



喜欢少数派?欢迎关注我们的微博:@少数派sspai ,微信公众号: sspaime
少数派( http://sspai.com )

563e52347ff5d5c57c40ca5b0f2780eb58257_mw



Original Article: http://sspai.com/37132


I

没有评论:

发表评论