client.mjs•2.57 kB
import path from "node:path";
import process from "node:process";
import { fileURLToPath } from "node:url";
import { config as loadEnv } from "dotenv";
const __filename = fileURLToPath(import.meta.url);
loadEnv({ path: path.resolve(process.cwd(), ".env"), override: false });
function parseArgs(argv = process.argv.slice(2)) {
const options = {};
for (let i = 0; i < argv.length; i++) {
const arg = argv[i];
if (arg.startsWith("--")) {
const key = arg.slice(2);
const value = argv[i + 1] && !argv[i + 1].startsWith("--") ? argv[++i] : "true";
options[key] = value;
}
}
return {
region: options.region || "서울",
target: options.target || undefined,
keywords: options.keywords || undefined,
page: options.page ? Number.parseInt(options.page, 10) : 1,
pageSize: options.pageSize ? Number.parseInt(options.pageSize, 10) : 20,
baseUrl: options.baseUrl || options.base_url || process.env.BIZINFO_HTTP_URL || "http://localhost:3000",
};
}
async function callSearchEndpoint({ baseUrl, region, target, keywords, page, pageSize }) {
const url = new URL("/search", baseUrl);
url.searchParams.set("region", region);
if (target) url.searchParams.set("target", target);
if (keywords) url.searchParams.set("keywords", keywords);
if (page) url.searchParams.set("page", String(page));
if (pageSize) url.searchParams.set("page_size", String(pageSize));
const response = await fetch(url, {
headers: {
Accept: "application/json",
},
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`HTTP ${response.status} ${response.statusText}: ${errorText}`);
}
return response.json();
}
async function main() {
const { baseUrl, region, target, keywords, page, pageSize } = parseArgs();
if (!region) {
console.error("--region 옵션은 필수입니다.");
process.exit(1);
return;
}
try {
const payload = await callSearchEndpoint({ baseUrl, region, target, keywords, page, pageSize });
if (payload?.summary) {
console.log(payload.summary);
} else {
console.log(JSON.stringify(payload, null, 2));
}
} catch (error) {
console.error(error instanceof Error ? error.message : String(error));
process.exit(1);
}
}
const isMainModule = process.argv[1] && path.resolve(process.argv[1]) === __filename;
if (isMainModule) {
main().catch((error) => {
console.error(error instanceof Error ? error.message : String(error));
process.exit(1);
});
}
export { parseArgs, callSearchEndpoint };