From fe9824bcb2ef1020c9a33f4a209678dc69b8eafc Mon Sep 17 00:00:00 2001 From: Tianpao Date: Sun, 9 Jun 2024 03:45:45 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Modrinth=E6=89=AB=E6=8F=8FMod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 80 ++++++++++++++++++++++++++++++++++ package-lock.json | 108 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 6 +++ 3 files changed, 194 insertions(+) create mode 100644 index.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/index.js b/index.js new file mode 100644 index 0000000..4666b0e --- /dev/null +++ b/index.js @@ -0,0 +1,80 @@ +const axios = require('axios'); +const fs = require('fs'); +const readline = require('readline'); + +// Modrinth API URL +const API_URL = 'https://api.modrinth.com/v2/search'; + +// 本地服务器URL +const LOCAL_SERVER_URL = 'http://192.168.1.7:5000/modid'; + +// 用于存储请求结果的数组 +let results = []; + +// 用于记录请求的次数 +let requestCount = 0; + +// 用于记录请求的间隔时间(毫秒) +const requestInterval = 3000; // 3秒 + +// 用于读取Modrinth API返回的响应 +async function fetchModrinthData(page) { + try { + // 构建查询参数 + const facets = [["project_type:mod"]]; + const params = { + facets: JSON.stringify(facets), + limit: 96, + offset: page * 96 // 更新offset以获取下一页数据 + }; + // 发送请求 + const response = await axios.get(API_URL, { + params: params + }); + + + // 处理响应数据 + response.data.hits.forEach(async (hit) => { + const modid = hit.slug; + const clientSide = hit.client_side; + const serverSide = hit.server_side; + + // 根据client_side和server_side的值计算client参数 + let client = false; + if (clientSide === "required" && serverSide === "required") { + client = "trlse"; // 两者都要求 + } else if (clientSide === "required") { + client = true; // 只有client_side要求 + } else if (serverSide === "required") { + client = false; // 只有server_side要求 + } else { + client = false; // 两者都不要求或为optional + } + + // 构建本地服务器请求的URL,包含根据client_side和server_side计算出的client值 + const localUrl = `${LOCAL_SERVER_URL}?modid=${modid}&client=${client}`; + + // 发送请求到本地服务器 + try { + const localResponse = await axios.get(localUrl); + // 处理本地服务器的响应 + console.log(`处理了modid: ${modid}`); + console.log(`本地服务器响应: ${localResponse.data}`); + } catch (localError) { + // 忽略本地服务器请求的错误 + console.log(`处理modid ${modid}时本地服务器请求失败: ${localError.message}`); + } + }); + + // 如果有下一页,继续请求 + if (response.data.offset < response.data.total_hits) { + await fetchModrinthData(page + 1); + } + } catch (error) { + // 忽略Modrinth API请求的错误 + console.log(`处理Modrinth API请求时发生错误: ${error.message}`); + } +} + +// 开始请求Modrinth API +fetchModrinthData(0); // 从第0页开始 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..255a4d9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,108 @@ +{ + "name": "modri", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "axios": "^1.7.2", + "readline": "^1.3.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..409b21e --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "axios": "^1.7.2", + "readline": "^1.3.0" + } +}