feat: solution for 'Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)'

This commit is contained in:
2026-06-29 16:44:12 +03:00
parent 56c15b71cc
commit 87575da55f
3 changed files with 137 additions and 63 deletions
+99
View File
@@ -0,0 +1,99 @@
import fetch from 'node-fetch';
const API_KEY = process.env.TAVILY_API_KEY;
if (!API_KEY) {
console.error('Error: TAVILY_API_KEY environment variable is not set.');
process.exit(1);
}
const API_URL = 'https://api.tavily.com/search';
const ENTITIES = [
'Apple Inc.',
'Microsoft Corporation',
'Google LLC'
];
const ATTRIBUTES = ['Title', 'URL', 'Snippet', 'Score'];
async function fetchEntityData(entity) {
try {
const response = await fetch(API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`
},
body: JSON.stringify({
query: entity,
search_depth: 'basic',
include_raw_content: false,
top_k: 1
})
});
if (!response.ok) {
console.error(`Failed to fetch data for "${entity}". Status: ${response.status}`);
return null;
}
const data = await response.json();
if (!data.results || data.results.length === 0) {
console.warn(`No results found for "${entity}".`);
return {
Entity: entity,
Title: 'N/A',
URL: 'N/A',
Snippet: 'N/A',
Score: 0
};
}
const topResult = data.results[0];
return {
Entity: entity,
Title: topResult.title || 'N/A',
URL: topResult.url || 'N/A',
Snippet: topResult.snippet || 'N/A',
Score: topResult.score || 0
};
} catch (error) {
console.error(`Error fetching data for "${entity}":`, error);
return null;
}
}
async function main() {
const results = [];
for (const entity of ENTITIES) {
const data = await fetchEntityData(entity);
if (data) {
results.push(data);
}
}
if (results.length === 0) {
console.error('No data to display.');
return;
}
// Determine the highest score for verdict
const maxScore = Math.max(...results.map(r => r.Score));
// Add verdict column
const tableData = results.map(r => ({
Entity: r.Entity,
Title: r.Title,
URL: r.URL,
Snippet: r.Snippet,
Score: r.Score,
Verdict: r.Score === maxScore ? 'Best' : ''
}));
// Print table
console.log('\nComparison Table (3xN with Verdict):\n');
console.table(tableData);
}
main();