mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2025-04-20 12:49:33 +08:00
80 lines
2.1 KiB
JavaScript
80 lines
2.1 KiB
JavaScript
const $ = $substore;
|
|
|
|
const {onlyFlagIP = true} = $arguments
|
|
|
|
async function operator(proxies) {
|
|
const BATCH_SIZE = 10;
|
|
|
|
let i = 0;
|
|
while (i < proxies.length) {
|
|
const batch = proxies.slice(i, i + BATCH_SIZE);
|
|
await Promise.all(batch.map(async proxy => {
|
|
if (onlyFlagIP && !ProxyUtils.isIP(proxy.server)) return;
|
|
try {
|
|
// remove the original flag
|
|
let proxyName = removeFlag(proxy.name);
|
|
|
|
// query ip-api
|
|
const countryCode = await queryIpApi(proxy);
|
|
|
|
proxyName = getFlagEmoji(countryCode) + ' ' + proxyName;
|
|
proxy.name = proxyName;
|
|
} catch (err) {
|
|
// TODO:
|
|
}
|
|
}));
|
|
|
|
await sleep(1000);
|
|
i += BATCH_SIZE;
|
|
}
|
|
return proxies;
|
|
}
|
|
|
|
|
|
async function queryIpApi(proxy) {
|
|
const ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:78.0) Gecko/20100101 Firefox/78.0";
|
|
const headers = {
|
|
"User-Agent": ua
|
|
};
|
|
const result = new Promise((resolve, reject) => {
|
|
const url =
|
|
`http://ip-api.com/json/${encodeURIComponent(proxy.server)}?lang=zh-CN`;
|
|
$.http.get({
|
|
url,
|
|
headers,
|
|
}).then(resp => {
|
|
const data = JSON.parse(resp.body);
|
|
if (data.status === "success") {
|
|
resolve(data.countryCode);
|
|
} else {
|
|
reject(new Error(data.message));
|
|
}
|
|
}).catch(err => {
|
|
console.log(err);
|
|
reject(err);
|
|
});
|
|
});
|
|
return result;
|
|
}
|
|
|
|
function getFlagEmoji(countryCode) {
|
|
const codePoints = countryCode
|
|
.toUpperCase()
|
|
.split('')
|
|
.map(char => 127397 + char.charCodeAt());
|
|
return String
|
|
.fromCodePoint(...codePoints)
|
|
.replace(/🇹🇼/g, '🇨🇳');
|
|
}
|
|
|
|
function removeFlag(str) {
|
|
return str
|
|
.replace(/[\uD83C][\uDDE6-\uDDFF][\uD83C][\uDDE6-\uDDFF]/g, '')
|
|
.trim();
|
|
}
|
|
|
|
function sleep(ms) {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
}
|
|
|