引子“二维码真是越来越多了…”一如既往我拿起手机准备3D touch微博的icon扫码登录,突然觉得这个动作似曾相识,好像我如此重复的时候还有很多,比如:
天哪,这实在太麻烦了,我要做一个workflow完成所有的扫码动作。 多合一我想把所有要扫码的地方全部用一个扫码界面代替。 目前实现了如下功能:
淘宝、支付宝、豆瓣、京东、大众点评可以直达二维码链接界面。 但是微博、微信需要跳转到本身的扫码界面二次扫码。 虽说是二次扫码,但是也是极快的。 具体原理可以参考微信的一篇文章。微信扫码为啥那么快? 也可以通过两张动图对比一下。
然后要安利大家一个chrome插件,可以把电脑网页转换成二维码显示在屏幕上,然后就可以愉快地扫码了。Anything to QRcode 实现原理实现这个workflow的原理主要基于URL SCHEME的应用和豆瓣API的调用。 1. 首先获取各个App的URL SCHEME这些信息部分网上都可以搜到。
2. 研究调用机制示例中分为一次扫码是如何实现的呢? 一次扫码像是淘宝、支付宝和豆瓣,App本身就支持从链接跳转到App中制定页面,但是如何获取这个「链接」就是关键了。 以情况不复杂的支付宝扫码举例。复杂的情况类似于京东需要抓包分析,本文不涉及。 这个二维码包含了一个网页 https://qr.alipay.com/a6x00588utz0thcokf77vv7d 然后我试着直接打开看看 这是一个新的网址,有没有觉得有点眼熟? 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 果然成功了!直接进入了我的个人主页。 然后就可以在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就可以了。 为了展示效果简化了判断是否为链接的判断,也是同样用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里是扫描书背后的条形码跳转到豆瓣的页面里。 豆瓣的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来完成这个动作。 5.如何把以上东西全部放到一个workflow里以上的教程单单领出来一个可能制作起来很方便,但是要怎么自动识别读到的文字呢? 这里要用到正则表达式进行判断 首先判断一下是不是ISBN码,它的特征是13位数字,978开头。 ^978[0-9]{10}$ 再可以判断是不是http开头的链接,这里就不展开了,这需要一些耐心琢磨。 推荐大家两个网站可以自学,正则表达式在线测试,正则表达式30分钟入门 抛砖引玉这个workflow还远远没有完美,希望大家一起完善。 这种东西少数派的大神肯定早就做过了吧,我心里是这样想的,希望能够抛砖引玉。 我暂时还没有办法找出手机QQ扫码界面的url。微博微信的扫码还需要跳转到App本身的扫码界面二次扫码,并不像淘宝和豆瓣那样可以直达。 欢迎留言。 workflow下载地址:https:///workflows/50c68c91dfc5481689599b2c96ab98ba Update2017-01-23 增加大众点评扫码登陆&扫码跳转到手机大众点评 2017-01-22 增加京东扫码登陆&扫码跳转到对手机京东 2017-01-19 增加了支付宝扫码付款&扫码加好友等功能 2017-01-18 First Release,支持淘宝、微博、微信、豆瓣 |
|