feat(aklive2d): added ability to store latest dynchar info from offical website

This commit is contained in:
Haoyu Xu
2023-10-08 01:10:42 -04:00
parent ddf8f01986
commit abfadd804a
5 changed files with 88 additions and 1 deletions

View File

@@ -0,0 +1,28 @@
name: Update Offical Dyn Info
on:
schedule:
- cron: '0 0 * * *'
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v3
- name: Use PNPM
uses: pnpm/action-setup@v2
with:
version: latest
- name: Install dependencies
run: pnpm i
- name: Update offical dyn info
run: pnpm run offical_update
- name: Commit changes if any
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: "chore(offical update): auto update"

7
.vscode/launch.json vendored
View File

@@ -69,6 +69,13 @@
"request": "launch", "request": "launch",
"command": "pnpm run music", "command": "pnpm run music",
"cwd": "${workspaceFolder}" "cwd": "${workspaceFolder}"
},
{
"type": "node-terminal",
"name": "Run Script: offical_update",
"request": "launch",
"command": "pnpm run offical_update",
"cwd": "${workspaceFolder}"
} }
] ]
} }

View File

@@ -14,6 +14,7 @@ import directory from './libs/directory.js'
import Background from './libs/background.js' import Background from './libs/background.js'
import CharwordTable from './libs/charword_table.js'; import CharwordTable from './libs/charword_table.js';
import Music from './libs/music.js'; import Music from './libs/music.js';
import officalUpdate from './libs/offical_update.js';
async function main() { async function main() {
global.__projectRoot = path.dirname(fileURLToPath(import.meta.url)) global.__projectRoot = path.dirname(fileURLToPath(import.meta.url))
@@ -53,6 +54,9 @@ async function main() {
case 'music': case 'music':
await musicTable.process() await musicTable.process()
process.exit(0) process.exit(0)
case 'offical_update':
await officalUpdate()
process.exit(0)
default: default:
break break
} }

47
libs/offical_update.js Normal file
View File

@@ -0,0 +1,47 @@
import jsdom from 'jsdom';
import fetch from "node-fetch";
import path from "path";
import { writeSync } from "./file.js";
export default async function () {
const f = await fetch("https://ak.hypergryph.com/archive/dynamicCompile/")
const html_text = await f.text()
const dom = new jsdom.JSDOM(html_text);
const rows = dom.window.document.body.querySelector(".dynList").querySelectorAll(".row")
const dict = {}
for (const row of rows) {
const date = row.querySelector(".date").textContent.trim()
const operators = []
const charCards = row.querySelectorAll(".charCard")
for (const charCard of charCards) {
const color = charCard.style.color
const codename = {
"zh-CN": charCard.querySelector(".info").querySelector(".name").querySelector(".text").textContent.trim(),
"en-US": charCard.querySelector(".info").querySelector(".codename").textContent.trim()
}
const rawType = charCard.querySelector(".typeIcon").querySelector("svg").querySelector("use").getAttribute("xlink:href")
let type;
switch (rawType) {
case "#skin-type-icon-hanger":
type = "skin"
break;
case "#skin-type-icon-promotion2":
type = "elite2"
break;
}
operators.push({
color,
codename,
type
})
}
dict[date] = operators
}
writeSync(JSON.stringify(dict, null, 4), path.join('offical_update.json'))
}

View File

@@ -18,7 +18,8 @@
"vite:preview": "vite preview", "vite:preview": "vite preview",
"vite:directory:dev": "vite dev", "vite:directory:dev": "vite dev",
"vite:directory:build": "vite build", "vite:directory:build": "vite build",
"vite:directory:preview": "vite preview" "vite:directory:preview": "vite preview",
"offical_update": "node aklive2d offical_update"
}, },
"devDependencies": { "devDependencies": {
"@perfsee/rollup": "^1.8.4", "@perfsee/rollup": "^1.8.4",