| import { SERPAPI_KEY, SERPER_API_KEY } from "$env/static/private"; |
|
|
| import { getJson } from "serpapi"; |
| import type { GoogleParameters } from "serpapi"; |
|
|
| |
| export async function searchWeb(query: string) { |
| if (SERPER_API_KEY) { |
| return await searchWebSerper(query); |
| } |
| if (SERPAPI_KEY) { |
| return await searchWebSerpApi(query); |
| } |
| throw new Error("No Serper.dev or SerpAPI key found"); |
| } |
|
|
| export async function searchWebSerper(query: string) { |
| const params = { |
| q: query, |
| hl: "en", |
| gl: "us", |
| }; |
|
|
| const response = await fetch("https://google.serper.dev/search", { |
| method: "POST", |
| body: JSON.stringify(params), |
| headers: { |
| "x-api-key": SERPER_API_KEY, |
| "Content-type": "application/json; charset=UTF-8", |
| }, |
| }); |
|
|
| |
| const data = (await response.json()) as Record<string, any>; |
|
|
| if (!response.ok) { |
| throw new Error( |
| data["message"] ?? |
| `Serper API returned error code ${response.status} - ${response.statusText}` |
| ); |
| } |
|
|
| return { |
| organic_results: data["organic"] ?? [], |
| knowledge_graph: data["knowledgeGraph"] ?? null, |
| answer_box: data["answerBox"] ?? null, |
| }; |
| } |
|
|
| export async function searchWebSerpApi(query: string) { |
| const params = { |
| q: query, |
| hl: "en", |
| gl: "us", |
| google_domain: "google.com", |
| api_key: SERPAPI_KEY, |
| } satisfies GoogleParameters; |
|
|
| |
| const response = await getJson("google", params); |
|
|
| return response; |
| } |
|
|