Skip to content

Instantly share code, notes, and snippets.

@FrogTool
Created January 17, 2022 02:55
Show Gist options
  • Save FrogTool/cd63092ae26b8fe4f4040a9ce3f339a9 to your computer and use it in GitHub Desktop.
Save FrogTool/cd63092ae26b8fe4f4040a9ce3f339a9 to your computer and use it in GitHub Desktop.
百度统计scriptable小组件
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: deep-green; icon-glyph: magic;
//自行填充下面的参数
const USERNAME = ""//百度统计账号
const PASSWORD = ""//百度统计密码
const TOKEN = ""//百度统计里面的数据导出服务token
const SITE_ID = ""//网站ID
//今天当前数据,同理可以自行修改成任何时间
let today = formatDate("yyyyMMdd");
let todayData = await loadData(today)
let widget = await createWidget()
if (!config.runsInWidget) {
widget.presentSmall()
}
Script.setWidget(widget)
Script.complete()
async function createWidget() {
let widget = new ListWidget()
let startColor = new Color("#F0F0F0")
let endColor = new Color("#FFFFFF")
let gradient = new LinearGradient()
gradient.colors = [startColor, endColor]
gradient.locations = [0.0, 1]
widget.backgroundGradient = gradient
widget.addSpacer(10)
let topStack = widget.addStack()
topStack.layoutHorizontally()
topStack.topAlignContent()
let titleStack = topStack.addStack()
let titleTxt = titleStack.addText('网站统计')
titleTxt.font = Font.semiboldSystemFont(16)
titleTxt.textColor = Color.black()
titleTxt.textOpacity = 0.5
topStack.addSpacer()
let logoStack = topStack.addStack()
let logo = await loadImage("https://tongji.baidu.com/favicon.ico")
let image = logoStack.addImage(logo)
image.imageSize = new Size(24,26)
image.rightAlignImage()
widget.addSpacer(11)
let dStack = widget.addStack()
dStack.layoutHorizontally()
dStack.topAlignContent()
//左边
let nStack = dStack.addStack()
nStack.layoutVertically()
let ipN = nStack.addText("IP:")
ipN.textColor = Color.black()
ipN.font = Font.systemFont(17)
ipN.textOpacity = 0.95
let uvN = nStack.addText("UV:")
uvN.textColor = Color.black()
uvN.font = Font.systemFont(17)
uvN.textOpacity = 0.95
let pvN = nStack.addText("PV:")
pvN.textColor = Color.black()
pvN.font = Font.systemFont(17)
pvN.textOpacity = 0.95
// dStack.addSpacer()
//中间
let tStack = dStack.addStack()
tStack.layoutVertically()
let ipT = tStack.addText(todayData['ip'].toString())
ipT.textColor = Color.black()
ipT.font = Font.systemFont(17)
ipT.textOpacity = 0.95
ipT.rightAlignText()
let uvT = tStack.addText(todayData['uv'].toString())
uvT.textColor = Color.black()
uvT.font = Font.systemFont(17)
uvT.textOpacity = 0.95
uvT.rightAlignText()
let pvT = tStack.addText(todayData['pv'].toString())
pvT.textColor = Color.black()
pvT.font = Font.systemFont(17)
pvT.textOpacity = 0.95
pvT.rightAlignText()
widget.addSpacer(15)
let utTxt = widget.addText(nowTime())
utTxt.textColor = Color.black()
utTxt.font = Font.systemFont(12)
utTxt.textOpacity = 0.5
utTxt.rightAlignText()
widget.addSpacer()
return widget
}
async function loadData(date) {
let req = new Request('https://api.baidu.com/json/tongji/v1/ReportService/getData')
req.method = "POST"
req.allowInsecureRequest = true
req.headers = {
'Content-Type': 'application/json; charset=utf-8'
}
req.body = JSON.stringify({
"header":{
"username":USERNAME,
"password":PASSWORD,
"token":TOKEN,
"account_type":1
},
"body":{
"site_id":SITE_ID,
"start_date":date,
"end_date":date,
"metrics":"pv_count,visitor_count,ip_count",
"method":"trend/time/a",
"area":""
}
})
let json = await req.loadJSON()
let baidu_data = {
'ip':json['body']['data'][0]['result']['sum'][0][2],
'uv':json['body']['data'][0]['result']['sum'][0][1],
'pv':json['body']['data'][0]['result']['sum'][0][0]
}
console.log(baidu_data)
return baidu_data
}
async function loadImage(imgUrl) {
let req = new Request(imgUrl)
req.allowInsecureRequest = true
let image = await req.loadImage()
return image
}
function nowTime(){
let date = new Date()
return date.getHours()+":"+date.getMinutes()
}
function formatDate(fmt,ts=null){
const date = ts ? new Date(ts) : new Date()
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
'q+': Math.floor((date.getMonth() + 3) / 3),
'S': date.getMilliseconds()
}
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
for (let k in o)
if (new RegExp('(' + k + ')').test(fmt))
fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
return fmt
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment