This commit is contained in:
HadiCherkaoui
2025-02-28 15:16:54 +01:00
parent 4a7ca8fc68
commit f19d2e3a97
4 changed files with 57 additions and 24 deletions

View File

@ -11,6 +11,7 @@ import { searchSearxng } from '../lib/searchEngines/searxng';
import { searchGooglePSE } from '../lib/searchEngines/google_pse';
import { searchBraveAPI } from '../lib/searchEngines/brave';
import { searchYaCy } from '../lib/searchEngines/yacy';
import { searchBingAPI } from '../lib/searchEngines/bing';
import { getSearchEngineBackend } from '../config';
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
@ -107,6 +108,21 @@ async function performImageSearch(query: string) {
break;
}
case 'bing': {
const bingResult = await searchBingAPI(query);
images = bingResult.results.map((result) => {
if (result.img_src && result.url && result.title) {
return {
img_src: result.img_src,
url: result.url,
title: result.title,
source: result.url
}
}
}).filter(Boolean);
break;
}
default:
throw new Error(`Unknown search engine ${searchEngine}`);
}

View File

@ -10,7 +10,7 @@ import { StringOutputParser } from '@langchain/core/output_parsers';
import { searchSearxng } from '../lib/searchEngines/searxng';
import { searchGooglePSE } from '../lib/searchEngines/google_pse';
import { searchBraveAPI } from '../lib/searchEngines/brave';
import { searchYaCy } from '../lib/searchEngines/yacy';
import { searchBingAPI } from '../lib/searchEngines/bing';
import { getSearchEngineBackend } from '../config';
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
@ -108,6 +108,22 @@ async function performVideoSearch(query: string) {
break;
}
case 'bing': {
const bingResult = await searchBingAPI(youtubeQuery);
bingResult.results.forEach((result) => {
if (result.img_src && result.url && result.title) {
const videoId = new URL(result.url).searchParams.get('v');
videos.push({
img_src: result.img_src,
url: result.url,
title: result.title,
iframe_src: videoId ? `https://www.youtube.com/embed/${videoId}` : null
});
}
});
break;
}
default:
throw new Error(`Unknown search engine ${searchEngine}`);
}

View File

@ -32,15 +32,12 @@ interface BingAPISearchResult {
width?: number;
height?: number;
};
provider?: Array<{
name: string;
_type: string;
}>;
video?: {
allowHttpsEmbed?: boolean;
embedHtml?: string;
allowMobileEmbed?: boolean;
viewCount?: number;
duration?: string;
};
image?: {
thumbnail?: {
@ -51,29 +48,14 @@ interface BingAPISearchResult {
imageInsightsToken?: string;
imageId?: string;
};
metatags?: Array<{
[key: string]: string;
'og:type'?: string;
'og:image'?: string;
'og:video'?: string;
}>;
mentions?: Array<{
name: string;
}>;
entity?: {
entityPresentationInfo?: {
entityTypeHints?: string[];
};
};
}
export const searchBingAPI = async (query: string) => {
try {
const bingApiKey = await getBingSubscriptionKey();
const url = new URL(`https://api.cognitive.microsoft.com/bing/v7.0/search`);
url.searchParams.append('q', query);
url.searchParams.append('responseFilter', 'Webpages,Images,Videos,News');
url.searchParams.append('responseFilter', 'Webpages,Images,Videos');
const res = await axios.get(url.toString(), {
headers: {
@ -87,11 +69,13 @@ export const searchBingAPI = async (query: string) => {
}
const originalres = res.data;
// Extract web, image, and video results
const webResults = originalres.webPages?.value || [];
const imageResults = originalres.images?.value || [];
const videoResults = originalres.videos?.value || [];
const results = webResults.map((item: any) => ({
const results = webResults.map((item: BingAPISearchResult) => ({
title: item.name,
url: item.url,
content: item.snippet,
@ -102,7 +86,9 @@ export const searchBingAPI = async (query: string) => {
videoData: {
duration: item.video.duration,
embedUrl: item.video.embedHtml?.match(/src="(.*?)"/)?.[1]
}
},
publisher: item.publisher,
datePublished: item.datePublished
})
}));
@ -113,4 +99,4 @@ export const searchBingAPI = async (query: string) => {
: error.message || 'Unknown error';
throw new Error(`Bing API Error: ${errorMessage}`);
}
};
};

View File

@ -3,6 +3,7 @@ import { searchSearxng } from '../lib/searchEngines/searxng';
import { searchGooglePSE } from '../lib/searchEngines/google_pse';
import { searchBraveAPI } from '../lib/searchEngines/brave';
import { searchYaCy } from '../lib/searchEngines/yacy';
import { searchBingAPI } from '../lib/searchEngines/bing';
import { getSearchEngineBackend } from '../config';
import logger from '../utils/logger';
@ -72,6 +73,20 @@ async function performSearch(query: string, site: string) {
}))
}
case 'bing': {
const bingResult = await searchBingAPI(query);
return bingResult.results.map(item => ({
title: item.title,
url: item.url,
content: item.content,
thumbnail: item.img_src,
img_src: item.img_src,
iframe_src: null,
author: item?.publisher || site,
publishedDate: item?.datePublished
}))
}
default:
throw new Error(`Unknown search engine ${searchEngine}`);
}