diff --git a/packages/api-server/src/routes/kijiji.ts b/packages/api-server/src/routes/kijiji.ts index 5adba12..0fb4c06 100644 --- a/packages/api-server/src/routes/kijiji.ts +++ b/packages/api-server/src/routes/kijiji.ts @@ -5,33 +5,62 @@ import { fetchKijijiItems } from "@marketplace-scrapers/core"; * Search Kijiji marketplace for listings */ export async function kijijiRoute(req: Request): Promise { - const reqUrl = new URL(req.url); + const reqUrl = new URL(req.url); - const SEARCH_QUERY = - req.headers.get("query") || reqUrl.searchParams.get("q") || null; - if (!SEARCH_QUERY) - return Response.json( - { - message: - "Request didn't have 'query' header or 'q' search parameter!", - }, - { status: 400 }, - ); + const SEARCH_QUERY = + req.headers.get("query") || reqUrl.searchParams.get("q") || null; + if (!SEARCH_QUERY) + return Response.json( + { + message: "Request didn't have 'query' header or 'q' search parameter!", + }, + { status: 400 }, + ); - try { - const items = await fetchKijijiItems(SEARCH_QUERY, 5); - if (!items) - return Response.json( - { message: "Search didn't return any results!" }, - { status: 404 }, - ); - return Response.json(items, { status: 200 }); - } catch (error) { - console.error("Kijiji scraping error:", error); - const errorMessage = error instanceof Error ? error.message : "Unknown error occurred"; - return Response.json( - { message: errorMessage }, - { status: 400 }, - ); - } + const maxPagesParam = reqUrl.searchParams.get("maxPages"); + const maxPages = maxPagesParam ? parseInt(maxPagesParam, 10) : 5; + const priceMinParam = reqUrl.searchParams.get("priceMin"); + const priceMin = priceMinParam ? parseInt(priceMinParam, 10) : undefined; + const priceMaxParam = reqUrl.searchParams.get("priceMax"); + const priceMax = priceMaxParam ? parseInt(priceMaxParam, 10) : undefined; + + const searchOptions = { + location: reqUrl.searchParams.get("location") || undefined, + category: reqUrl.searchParams.get("category") || undefined, + keywords: reqUrl.searchParams.get("keywords") || undefined, + sortBy: reqUrl.searchParams.get("sortBy") as + | "relevancy" + | "date" + | "price" + | "distance" + | undefined, + sortOrder: reqUrl.searchParams.get("sortOrder") as + | "desc" + | "asc" + | undefined, + maxPages, + priceMin, + priceMax, + }; + + try { + const items = await fetchKijijiItems( + SEARCH_QUERY, + 1, + "https://www.kijiji.ca", + searchOptions, + {}, + ); + if (!items) + return Response.json( + { message: "Search didn't return any results!" }, + { status: 404 }, + ); + return Response.json(items, { status: 200 }); + } catch (error) { + console.error("Kijiji scraping error:", error); + const errorMessage = + error instanceof Error ? error.message : "Unknown error occurred"; + return Response.json({ message: errorMessage }, { status: 400 }); + } }