mirror of
https://github.com/yoimiya-kokomi/miao-plugin.git
synced 2024-11-22 15:36:27 +00:00
142 lines
3.1 KiB
JavaScript
142 lines
3.1 KiB
JavaScript
|
import fs from "fs";
|
||
|
import cheerio from "cheerio";
|
||
|
import lodash from "lodash";
|
||
|
import fetch from "node-fetch";
|
||
|
|
||
|
const _path = process.cwd();
|
||
|
|
||
|
const artiIdx = {
|
||
|
Flower: 1,
|
||
|
Plume: 2,
|
||
|
Sands: 3,
|
||
|
Goblet: 4,
|
||
|
Circlet: 5
|
||
|
}
|
||
|
|
||
|
let getCharData = async function (url, key, name = '') {
|
||
|
|
||
|
url = "https://genshin.honeyhunterworld.com/" + url;
|
||
|
console.log('req' + key, url)
|
||
|
|
||
|
let req = await fetch(url);
|
||
|
let txt = await req.text();
|
||
|
|
||
|
const $ = cheerio.load(txt);
|
||
|
let ret = getBasic($, name);
|
||
|
|
||
|
name = ret.name;
|
||
|
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
async function saveCharData(url, key, name) {
|
||
|
|
||
|
let data = await getCharData(url, key, name);
|
||
|
|
||
|
name = name || data.name;
|
||
|
|
||
|
if (!name) {
|
||
|
console.log("角色名不存在" + url);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let charPath = `${_path}/plugins/miao-plugin/resources/meta/character/${data.name}/`
|
||
|
if (!fs.existsSync(charPath)) {
|
||
|
fs.mkdirSync(charPath);
|
||
|
}
|
||
|
|
||
|
fs.writeFileSync(`${charPath}data.json`, JSON.stringify(data, "", "\t"));
|
||
|
console.log(data.name + "下载完成");
|
||
|
}
|
||
|
|
||
|
function getEffect(txt) {
|
||
|
let regRet = /(\d) Piece:/.exec(txt);
|
||
|
if (regRet) {
|
||
|
return [regRet[1], txt.replace(regRet[0], "").trim().replace(/。$/, "")]
|
||
|
}
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
async function getSets(id) {
|
||
|
const url = `https://genshin.honeyhunterworld.com/db/art/family/a_${id}/?lang=CHS`;
|
||
|
let req = await fetch(url);
|
||
|
let txt = await req.text();
|
||
|
fs.writeFileSync("./test.html", txt);
|
||
|
let $ = cheerio.load(txt);
|
||
|
|
||
|
let sets = $(".wrappercont .add_stat_table:eq(0)");
|
||
|
let ret = {}
|
||
|
|
||
|
sets.find("td").each(function () {
|
||
|
let line = $(this);
|
||
|
let nRet = /\s*(.*?)\s+\(([^\s]+)/.exec(line.find("span").text());
|
||
|
let idRet = /a_(\d+)/.exec(line.find("a").attr("href"));
|
||
|
if (nRet && idRet) {
|
||
|
ret[`arti${artiIdx[nRet[2]]}`] = {
|
||
|
id: idRet[1],
|
||
|
name: nRet[1]
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
async function down() {
|
||
|
const url = "https://genshin.honeyhunterworld.com/db/artifact/?lang=CHS";
|
||
|
let req = await fetch(url);
|
||
|
let txt = await req.text();
|
||
|
let $ = cheerio.load(txt);
|
||
|
let char = $(".art_stat_table_new");
|
||
|
|
||
|
let ret = {}
|
||
|
let tmp = {};
|
||
|
|
||
|
char.each(function () {
|
||
|
let trs = $(this).find("tr:gt(0)");
|
||
|
trs.each(function (idx) {
|
||
|
let self = $(this);
|
||
|
if (idx % 2 === 0) {
|
||
|
let na = self.find("td:eq(2) a")
|
||
|
let idRet = /a_(\d+)/.exec(na.attr("href"))
|
||
|
if (idRet) {
|
||
|
tmp = {
|
||
|
id: idRet[1],
|
||
|
name: na.text(),
|
||
|
sets: {},
|
||
|
effect: {}
|
||
|
}
|
||
|
} else {
|
||
|
tmp = {effect: {}}
|
||
|
}
|
||
|
}
|
||
|
let et = getEffect(self.find(`td:eq(${idx % 2 === 0 ? 4 : 1})`).text());
|
||
|
if (et && et[0]) {
|
||
|
tmp.effect[et[0]] = et[1];
|
||
|
}
|
||
|
if (idx % 2 === 1 && tmp.id) {
|
||
|
ret[tmp.id] = tmp;
|
||
|
}
|
||
|
})
|
||
|
});
|
||
|
|
||
|
for (let idx in ret) {
|
||
|
let ds = ret[idx];
|
||
|
|
||
|
ds.sets = await getSets(ds.id);
|
||
|
console.log(`arti ${ds.id}:${ds.name} Done`);
|
||
|
}
|
||
|
|
||
|
let filePath = `${_path}/plugins/miao-plugin/resources/meta/reliquaries/`
|
||
|
fs.writeFileSync(`${filePath}data.json`, JSON.stringify(ret, "", "\t"));
|
||
|
}
|
||
|
|
||
|
//await saveCharData("https://genshin.honeyhunterworld.com/db/char/ayaka/?lang=CHS", "ayaka");
|
||
|
|
||
|
|
||
|
await down();
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|