Files
awg-openwrt/index.js
2024-08-13 21:27:15 +07:00

85 lines
2.2 KiB
JavaScript

const axios = require('axios');
const cheerio = require('cheerio');
const fs = require('fs');
const version = process.argv[2]; // Получение версии OpenWRT из аргумента командной строки
const url = `https://downloads.openwrt.org/releases/${version}/targets/`;
async function fetchHTML(url) {
try {
const { data } = await axios.get(url);
return cheerio.load(data);
} catch (error) {
console.error(`Error fetching HTML for ${url}: ${error}`);
throw error;
}
}
async function getTargets() {
const $ = await fetchHTML(url);
const targets = [];
$('table tr td.n a').each((index, element) => {
const name = $(element).attr('href');
if (name && name.endsWith('/')) {
targets.push(name.slice(0, -1));
}
});
return targets;
}
async function getSubtargets(target) {
const $ = await fetchHTML(`${url}${target}/`);
const subtargets = [];
$('table tr td.n a').each((index, element) => {
const name = $(element).attr('href');
if (name && name.endsWith('/')) {
subtargets.push(name.slice(0, -1));
}
});
return subtargets;
}
async function getDetails(target, subtarget) {
const packagesUrl = `${url}${target}/${subtarget}/packages/`;
const $ = await fetchHTML(packagesUrl);
let vermagic = '';
let pkgarch = '';
$('a').each((index, element) => {
const name = $(element).attr('href');
if (name && name.startsWith('kernel_')) {
const vermagicMatch = name.match(/kernel_5\.\d+\.\d+-\d+-([a-f0-9]+)_([a-zA-Z0-9_-]+)\.ipk$/);
if (vermagicMatch) {
vermagic = vermagicMatch[1];
pkgarch = vermagicMatch[2];
}
}
});
return { vermagic, pkgarch };
}
async function main() {
const targets = await getTargets();
const results = [];
for (const target of targets) {
const subtargets = await getSubtargets(target);
for (const subtarget of subtargets) {
const { vermagic, pkgarch } = await getDetails(target, subtarget);
results.push({
tag: version,
target,
subtarget,
vermagic,
pkgarch,
});
}
}
fs.writeFileSync('results.json', JSON.stringify(results, null, 2), 'utf-8');
console.log('Results written to results.json');
}
main().catch(console.error);