AI[ rss피드][뉴스크롤러][API 상태점검] [데이터검증 시스템]
1. RSS 피드 모니터링 시스템
주요 AI 관련 RSS 피드를 실시간으로 모니터링하는 시스템입니다.
const feedparser = require('feedparser-promised');
async function monitorRSSFeeds() {
const feeds = [
'https://blog.google/technology/ai/rss/',
'https://openai.com/blog/rss/',
'https://news.mit.edu/rss/topic/artificial-intelligence'
];
try {
for (const feed of feeds) {
const items = await feedparser.parse(feed);
const latestItems = items
.filter(item => {
const pubDate = new Date(item.pubDate);
const now = new Date();
// 24시간 이내의 글만 필터링
return (now - pubDate) < 24 * 60 * 60 * 1000;
})
.map(item => ({
title: item.title,
link: item.link,
pubDate: item.pubDate,
description: item.description
}));
// 새로운 글 발견시 처리
if (latestItems.length > 0) {
updateBlogPost(latestItems);
}
}
} catch (error) {
console.error('RSS 피드 모니터링 중 오류:', error);
}
}
// 6시간마다 실행
setInterval(monitorRSSFeeds, 6 * 60 * 60 * 1000);
2. AI 뉴스 크롤러
주요 AI 뉴스 사이트의 최신 정보를 수집하는 크롤러입니다.
const axios = require('axios');
const cheerio = require('cheerio');
async function crawlAINews() {
const sites = [
{
url: 'https://venturebeat.com/category/ai/',
selector: 'article.Article'
},
{
url: 'https://www.artificialintelligence-news.com/',
selector: '.post-title'
}
];
for (const site of sites) {
try {
const response = await axios.get(site.url);
const $ = cheerio.load(response.data);
const articles = [];
$(site.selector).each((i, elem) => {
const title = $(elem).find('h2').text().trim();
const link = $(elem).find('a').attr('href');
if (title && link) {
articles.push({ title, link });
}
});
// 새로운 기사 발견시 처리
if (articles.length > 0) {
updateBlogPost(articles);
}
} catch (error) {
console.error(`크롤링 중 오류 (${site.url}):`, error);
}
}
}
// 3시간마다 실행
setInterval(crawlAINews, 3 * 60 * 60 * 1000);
3. API 상태 모니터링
주요 AI API의 상태와 업데이트를 모니터링합니다.
const { Configuration, OpenAIApi } = require('openai');
const { GoogleAuth } = require('google-auth-library');
async function checkAPIStatus() {
const apis = [
{
name: 'OpenAI',
checkFunction: async () => {
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY
});
const openai = new OpenAIApi(configuration);
const response = await openai.listModels();
return response.data;
}
},
{
name: 'Google AI',
checkFunction: async () => {
const auth = new GoogleAuth({
keyFilename: 'path/to/service-account.json'
});
const client = await auth.getClient();
const response = await client.request({
url: 'https://api.googleapis.com/v1/models'
});
return response.data;
}
}
];
for (const api of apis) {
try {
const status = await api.checkFunction();
updateBlogPost({
apiName: api.name,
status: 'active',
lastChecked: new Date(),
details: status
});
} catch (error) {
console.error(`API 체크 중 오류 (${api.name}):`, error);
}
}
}
// 1시간마다 실행
setInterval(checkAPIStatus, 60 * 60 * 1000);
4. 데이터 검증 시스템
수집된 정보의 신뢰성을 검증하는 시스템입니다.
class DataValidator {
constructor() {
this.trustedSources = new Set([
'openai.com',
'google.com',
'arxiv.org',
'microsoft.com',
'deepmind.com'
]);
}
validateSource(url) {
try {
const domain = new URL(url).hostname;
return this.trustedSources.has(domain);
} catch {
return false;
}
}
validateDate(pubDate) {
const date = new Date(pubDate);
const now = new Date();
// 일주일 이내의 데이터만 유효
return (now - date) < 7 * 24 * 60 * 60 * 1000;
}
async validateContent(content) {
// 키워드 기반 검증
const aiKeywords = ['artificial intelligence', 'machine learning', 'deep learning', 'neural network'];
return aiKeywords.some(keyword =>
content.toLowerCase().includes(keyword)
);
}
async validate(data) {
return {
isValidSource: this.validateSource(data.url),
isValidDate: this.validateDate(data.pubDate),
isValidContent: await this.validateContent(data.content)
};
}
}
const validator = new DataValidator();
// 사용 예시
async function validateAndUpdate(data) {
const validation = await validator.validate(data);
if (validation.isValidSource &&
validation.isValidDate &&
validation.isValidContent) {
updateBlogPost(data);
}
}