分享

Workflow 教学 | 从头教你制作万能扫码

 新华书店好书榜 2017-01-23

引子

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

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

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

多合一

我想把所有要扫码的地方全部用一个扫码界面代替。

目前实现了如下功能:

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


淘宝、支付宝、豆瓣、京东、大众点评可以直达二维码链接界面。

但是微博、微信需要跳转到本身的扫码界面二次扫码。

虽说是二次扫码,但是也是极快的。

具体原理可以参考微信的一篇文章。微信扫码为啥那么快?

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

  • 微信登陆(二次扫码)Image
  • 淘宝登陆(扫码直达)Image

然后要安利大家一个chrome插件,可以把电脑网页转换成二维码显示在屏幕上,然后就可以愉快地扫码了。Anything to QRcode

实现原理

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

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

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

  • 淘宝:taobao://
  • 微博:weibo://qrcode
  • 微信:weixin://scanqrcode
  • 支付宝:alipayqr://platformapi/startapp?saId=10000007
  • 豆瓣:douban://
  • 京东:openApp.jdMobile://virtual?params={参数}

2. 研究调用机制

示例中分为一次扫码是如何实现的呢?

一次扫码像是淘宝、支付宝和豆瓣,App本身就支持从链接跳转到App中制定页面,但是如何获取这个「链接」就是关键了。

以情况不复杂的支付宝扫码举例。复杂的情况类似于京东需要抓包分析,本文不涉及。


这个二维码包含了一个网页

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。

随后我清空了剪贴板,这是一个个人习惯。如果不需要可以删除。

接着就是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

大众点评,提取id

dianping://shopinfo?id=<商户id> dianping://tuandeal?id=<团购单id>

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

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.\/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.\/spic\/s28049685.jpg','large':'https://img3.\/lpic\/s28049685.jpg','medium':'https://img3.\/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,这本书的豆瓣网页链接也包含了这个信息

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

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

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

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

Image

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

以上的教程单单领出来一个可能制作起来很方便,但是要怎么自动识别读到的文字呢?

这里要用到正则表达式进行判断

首先判断一下是不是ISBN码,它的特征是13位数字,978开头。

^978[0-9]{10}$

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

推荐大家两个网站可以自学,正则表达式在线测试正则表达式30分钟入门

抛砖引玉

这个workflow还远远没有完美,希望大家一起完善。

这种东西少数派的大神肯定早就做过了吧,我心里是这样想的,希望能够抛砖引玉。

我暂时还没有办法找出手机QQ扫码界面的url。微博微信的扫码还需要跳转到App本身的扫码界面二次扫码,并不像淘宝和豆瓣那样可以直达。

欢迎留言。

workflow下载地址:https:///workflows/50c68c91dfc5481689599b2c96ab98ba

Update

2017-01-23  增加大众点评扫码登陆&扫码跳转到手机大众点评

2017-01-22  增加京东扫码登陆&扫码跳转到对手机京东

2017-01-19  增加了支付宝扫码付款&扫码加好友等功能

2017-01-18  First Release,支持淘宝、微博、微信、豆瓣

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多