科学利用Scriptable小组件让你的手机/平板帮你提升生活品质

已收录   阅读次数: 1,741
2021-10-1221:40:56 发表评论
摘要

此前,伯衡君介绍过利用inoreader获取资讯来提高生活品质的文章,具体可以参看下方的前情提要,本篇文章,则是继续沿着之前的思想,使用Scriptable这款应用,自己写js脚本,充当小组件,让你的手机桌面布置更智能,更加有实用性,让生活品质进一步提高,是以为记……

分享至:
科学利用Scriptable小组件让你的手机/平板帮你提升生活品质

开篇寄语

此前,伯衡君介绍过利用inoreader获取资讯来提高生活品质的文章,具体可以参看下方的前情提要,本篇文章,则是继续沿着之前的思想,使用Scriptable这款应用,自己写js脚本,充当小组件,让你的手机桌面布置更智能,更加有实用性,让生活品质进一步提高,是以为记。

前情提要

官方网站

内容详情

仅支持iPhone和iPad,不过android用户可以下载使用MacroDroid,效果有异曲同工之妙。

伯衡君就以Scriptable为例来说说啦,简单来说就是在设备上运行JS脚本,实现各种神奇的功能,而且更为其妙的是支持以小组件功能放置在手机桌面,所以,利用这一点,可以让你免打开应用即可实时接收各种资讯,实现各种功能。

应用内置脚本博物馆,有部分脚本可以直接安装获得,这个比较简单,不多做介绍了,着重说一下,如何布置脚本,提升生活质量。

伯衡君以一张图为例,请看下图:

科学利用Scriptable小组件让你的手机/平板帮你提升生活品质

伯衡君设置了四个脚本,分别是获取豆瓣电影一周口碑榜,实时获取证券指数,实时获取微博热搜前10(可以自定义最多至50条),半自动获取实时汇率。

这样,每当一打开手机,就能看到足够的资讯,而不必再打开应用翻找,省时,省力,省空间(毕竟安装应用会耗费不少手机空间的),在设置小组件时,建议都是选择直接运行脚本,而不是打开APP运行,如下图所示:

科学利用Scriptable小组件让你的手机/平板帮你提升生活品质

因为你的时间很宝贵,不要浪费在打开APP上。

如何新建

简单来说,打开App,点击右上方的“+”,新建脚本,如下图所示:

科学利用Scriptable小组件让你的手机/平板帮你提升生活品质

伯衡君接下来把这些自己写的,涉及到的几个比较有用的脚本分享给大家(可以直接当小部件使用):

  • 实时上证和深成指数
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()

总之,该应用的自由度非常高,可以让你的手机页面与众不同,又能提升生活品质,值得一试,其实还有很多使用场景,比如查询武汉肺炎的每日详情啦,薅羊毛信息啦,计划表啦等等等,就是要智能化生活~~~

温馨提示

更多脚本,请查看下面这篇文章:

  • 我的微信
  • 微信扫一扫加好友
  • weinxin
  • 我的微信公众号
  • 扫描关注公众号
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: