开篇寄语
此前,伯衡君介绍过利用inoreader获取资讯来提高生活品质的文章,具体可以参看下方的前情提要,本篇文章,则是继续沿着之前的思想,使用Scriptable这款应用,自己写js脚本,充当小组件,让你的手机桌面布置更智能,更加有实用性,让生活品质进一步提高,是以为记。
前情提要
官方网站
内容详情
仅支持iPhone和iPad,不过android用户可以下载使用MacroDroid,效果有异曲同工之妙。
伯衡君就以Scriptable为例来说说啦,简单来说就是在设备上运行JS脚本,实现各种神奇的功能,而且更为其妙的是支持以小组件功能放置在手机桌面,所以,利用这一点,可以让你免打开应用即可实时接收各种资讯,实现各种功能。
应用内置脚本博物馆,有部分脚本可以直接安装获得,这个比较简单,不多做介绍了,着重说一下,如何布置脚本,提升生活质量。
伯衡君以一张图为例,请看下图:
伯衡君设置了四个脚本,分别是获取豆瓣电影一周口碑榜,实时获取证券指数,实时获取微博热搜前10(可以自定义最多至50条),半自动获取实时汇率。
这样,每当一打开手机,就能看到足够的资讯,而不必再打开应用翻找,省时,省力,省空间(毕竟安装应用会耗费不少手机空间的),在设置小组件时,建议都是选择直接运行脚本,而不是打开APP运行,如下图所示:
因为你的时间很宝贵,不要浪费在打开APP上。
如何新建
简单来说,打开App,点击右上方的“+”,新建脚本,如下图所示:
伯衡君接下来把这些自己写的,涉及到的几个比较有用的脚本分享给大家(可以直接当小部件使用):
- 实时上证和深成指数
const w = new ListWidget() w.backgroundColor = new Color("#4169E1") const array = ["上证指数", "深圳成指"] let url = "https://cors.luckydesigner.workers.dev/?http://hq.sinajs.cn/list=sh000001,sz399001" let req = new Request(url) let result = await req.loadString() let sz = result.split(";") for(let i = 0; i<sz.length - 1; i++){ const stack = w.addStack() stack.centerAlignContent() const text = stack.addText(array[i]) text.textColor = Color.white() stack.addSpacer(20) const ratew = stack.addText(sz[i].split(",")[3]) ratew.textColor = Color.white() stack.addSpacer(20) } if(Device.isPad()){ w.presentExtraLarge() }else if(Device.isPhone()){ w.presentLarge() } Script.setWidget(w) Script.complete()
- 微博热搜Top10
- 伯衡君这里设置了两种模式,一种是网页打开模式,一种是小组件模式,可以自由选择,如果选择网页打开模式,那么建议把.slice(0,10)去掉,然后将// WebView.loadHTML(title)前面的“//”去掉
const wv = new WebView() const w = new ListWidget() w.backgroundColor = new Color("#E6162D") const url = "https://m.weibo.cn/api/container/getIndex?containerid=106003type%3D25%26t%3D3%26disable_hot%3D1%26filter_type%3Drealtimehot" const req = new Request(url) const result = await req.loadJSON() const check = result.ok var title = ` <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body{ background-color:#E6162D; } .weibohot{ color:#000000; } ul li{ list-style:none; } </style> <div calss="weibohot"> <ul> ` if (check != 1) { return } else { for (let i of result.data.cards[0].card_group.slice(0,10)) { const stack = w.addStack() stack.centerAlignContent() const text = stack.addText(i.desc) text.textColor = Color.white() text.font = Font.semiboldSystemFont(9) title += `<li>${i.desc}</li>`; } title += "</ul></div>" } // WebView.loadHTML(title) if(Device.isPad()){ w.presentExtraLarge() }else if(Device.isPhone()){ w.presentLarge() } Script.setWidget(w) Script.complete()
- 汇率展示
- 这个需要到一个网址申请api,app.exchangerate-api.com,每月有1500次请求限制而已,将代码中的url换上自己的即可
const w = new ListWidget() w.backgroundColor = new Color("#222222") const resp= await get({url:"https://v6.exchangerate-api.com/v6/your token/latest/USD"}) const arr = Object.keys(resp["conversion_rates"]).filter(x=>x=="USD" || x=="CNY" || x=="JPY") for(let rate of arr){ const stack =w.addStack() stack.centerAlignContent() const img= await loadImage("https://www.ecb.europa.eu/shared/img/flags/"+rate+".gif") const imgw =stack.addImage(img) imgw.imageSize=new Size(20, 20) stack.addSpacer(20) const textw = stack.addText(resp["conversion_rates"][rate].toFixed(2)) textw.textColor = Color.white() stack.addSpacer(20) } Script.setWidget(w) Script.complete() w.presentLarge() async function get(opts) { const request = new Request(opts.url) request.headers = { ...opts.headers, ...this.defaultHeaders } var result=await request.loadJSON() return result } async function loadImage(imgUrl) { let req = new Request(imgUrl) let image = await req.loadImage() return image }
- 豆瓣一周口碑榜
- 这里说一下,需要先以WebView.loadURL打开豆瓣官网,切换到电脑模式后再返回就可以获取了,代码中有一段注释“//”去掉就可以了,当切换到电脑端界面时返回再注释上就可以了
const w = new ListWidget() w.backgroundColor = new Color("#42a056") const wv = new WebView(); const url = 'https://movie.douban.com/'; await wv.loadURL(url) var getData = ` function getData(){ a = [] x = document.querySelectorAll(".billboard-bd .title a") for(s of x){ a.push(s.innerHTML) } return a } getData() ` let response = await wv.evaluateJavaScript(getData,false) for(let r in response){ const stack = w.addStack() stack.centerAlignContent() const text = stack.addText(response[r]) text.textColor = Color.white() stack.addSpacer(10) } if(Device.isPad()){ w.presentExtraLarge() }else if(Device.isPhone()){ w.presentLarge() } // WebView.loadURL(url) Script.setWidget(w) Script.complete()
总之,该应用的自由度非常高,可以让你的手机页面与众不同,又能提升生活品质,值得一试,其实还有很多使用场景,比如查询武汉肺炎的每日详情啦,薅羊毛信息啦,计划表啦等等等,就是要智能化生活~~~
温馨提示
更多脚本,请查看下面这篇文章:
- 我的微信
- 微信扫一扫加好友
- 我的微信公众号
- 扫描关注公众号