mirror of
https://github.com/ItzCrazyKns/Perplexica.git
synced 2025-05-01 00:32:38 +00:00
74 lines
1.7 KiB
TypeScript
74 lines
1.7 KiB
TypeScript
import axios from 'axios';
|
|
import { getGoogleApiKey, getGoogleCseId } from '../../config';
|
|
|
|
interface GooglePSESearchResult {
|
|
kind: string;
|
|
title: string;
|
|
htmlTitle: string;
|
|
link: string;
|
|
displayLink: string;
|
|
snippet?: string;
|
|
htmlSnippet?: string;
|
|
cacheId?: string;
|
|
formattedUrl: string;
|
|
htmlFormattedUrl: string;
|
|
pagemap?: {
|
|
videoobject: any;
|
|
cse_thumbnail?: Array<{
|
|
src: string;
|
|
width: string;
|
|
height: string;
|
|
}>;
|
|
metatags?: Array<{
|
|
[key: string]: string;
|
|
'author'?: string;
|
|
}>;
|
|
cse_image?: Array<{
|
|
src: string;
|
|
}>;
|
|
};
|
|
fileFormat?: string;
|
|
image?: {
|
|
contextLink: string;
|
|
thumbnailLink: string;
|
|
};
|
|
mime?: string;
|
|
labels?: Array<{
|
|
name: string;
|
|
displayName: string;
|
|
}>;
|
|
}
|
|
|
|
export const searchGooglePSE = async (query: string) => {
|
|
try {
|
|
const [googleApiKey, googleCseID] = await Promise.all([
|
|
getGoogleApiKey(),
|
|
getGoogleCseId()
|
|
]);
|
|
|
|
const url = new URL(`https://www.googleapis.com/customsearch/v1`);
|
|
url.searchParams.append('q', query);
|
|
url.searchParams.append('cx', googleCseID);
|
|
url.searchParams.append('key', googleApiKey);
|
|
|
|
const res = await axios.get(url.toString());
|
|
|
|
if (res.data.error) {
|
|
throw new Error(`Google PSE Error: ${res.data.error.message}`);
|
|
}
|
|
|
|
const originalres = res.data.items;
|
|
|
|
const results = originalres.map((item: GooglePSESearchResult) => ({
|
|
title: item.title,
|
|
url: item.link,
|
|
content: item.snippet,
|
|
img_src: item.pagemap?.cse_image?.[0]?.src,
|
|
}));
|
|
|
|
return { results, originalres };
|
|
} catch (error) {
|
|
throw new Error('Google PSE Error:', error.response?.data || error.message);
|
|
}
|
|
};
|