feat(amazon-shopping): scrape and filter amazon product results
This commit is contained in:
@@ -3,7 +3,9 @@
|
||||
import minimist from "minimist";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
import { searchProducts } from "./browser.js";
|
||||
import { parseNaturalLanguageRequest } from "./query-parser.js";
|
||||
import { createMarkdownReport } from "./report.js";
|
||||
import type { ProductFilters, SearchProductsRequest, SearchProductsResponse } from "./types.js";
|
||||
|
||||
export interface CliDeps {
|
||||
@@ -138,7 +140,19 @@ async function defaultSearchProducts(request: SearchProductsRequest, deps: CliDe
|
||||
if (request.dryRun) {
|
||||
return createDryRunResponse(request, deps.now ?? (() => new Date()));
|
||||
}
|
||||
throw new Error("Live Amazon search is not implemented yet. Use --dry-run until browser orchestration is installed.");
|
||||
return searchProducts(request, { now: deps.now });
|
||||
}
|
||||
|
||||
function writeResponse(response: SearchProductsResponse, output: SearchProductsRequest["output"], deps: CliDeps): void {
|
||||
if (output === "markdown") {
|
||||
deps.stdout.write(createMarkdownReport(response));
|
||||
return;
|
||||
}
|
||||
if (output === "both") {
|
||||
deps.stdout.write(`${JSON.stringify(response, null, 2)}\n\n${createMarkdownReport(response)}`);
|
||||
return;
|
||||
}
|
||||
deps.stdout.write(`${JSON.stringify(response, null, 2)}\n`);
|
||||
}
|
||||
|
||||
export async function runCli(
|
||||
@@ -156,7 +170,7 @@ export async function runCli(
|
||||
const response = deps.searchProducts
|
||||
? await deps.searchProducts(request)
|
||||
: await defaultSearchProducts(request, deps);
|
||||
deps.stdout.write(`${JSON.stringify(response, null, 2)}\n`);
|
||||
writeResponse(response, request.output, deps);
|
||||
return 0;
|
||||
} catch (error: unknown) {
|
||||
const message = error instanceof Error ? error.message : String(error);
|
||||
|
||||
Reference in New Issue
Block a user