diff --git a/.github/workflows/update-offical-dyn-info.yaml b/.github/workflows/update-offical-dyn-info.yaml new file mode 100644 index 0000000..a8575a6 --- /dev/null +++ b/.github/workflows/update-offical-dyn-info.yaml @@ -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" \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index eafc633..6b91fbc 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -69,6 +69,13 @@ "request": "launch", "command": "pnpm run music", "cwd": "${workspaceFolder}" + }, + { + "type": "node-terminal", + "name": "Run Script: offical_update", + "request": "launch", + "command": "pnpm run offical_update", + "cwd": "${workspaceFolder}" } ] } diff --git a/aklive2d.js b/aklive2d.js index e425eff..32a20a4 100644 --- a/aklive2d.js +++ b/aklive2d.js @@ -14,6 +14,7 @@ import directory from './libs/directory.js' import Background from './libs/background.js' import CharwordTable from './libs/charword_table.js'; import Music from './libs/music.js'; +import officalUpdate from './libs/offical_update.js'; async function main() { global.__projectRoot = path.dirname(fileURLToPath(import.meta.url)) @@ -53,6 +54,9 @@ async function main() { case 'music': await musicTable.process() process.exit(0) + case 'offical_update': + await officalUpdate() + process.exit(0) default: break } diff --git a/libs/offical_update.js b/libs/offical_update.js new file mode 100644 index 0000000..0756457 --- /dev/null +++ b/libs/offical_update.js @@ -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')) +} \ No newline at end of file diff --git a/package.json b/package.json index 6c5da07..7631c09 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "vite:preview": "vite preview", "vite:directory:dev": "vite dev", "vite:directory:build": "vite build", - "vite:directory:preview": "vite preview" + "vite:directory:preview": "vite preview", + "offical_update": "node aklive2d offical_update" }, "devDependencies": { "@perfsee/rollup": "^1.8.4",