Created
January 17, 2022 02:55
-
-
Save FrogTool/cd63092ae26b8fe4f4040a9ce3f339a9 to your computer and use it in GitHub Desktop.
百度统计scriptable小组件
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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