/**
* @file Servicio para obtener artículos de APIs médicas reales
* @description Integra con NewsAPI y otras fuentes para obtener artículos médicos reales
*/
/**
* @function obtenerArticulosDePubMed
* @description Obtiene artículos de PubMed (API pública)
* @async
* @param {string} query - Término de búsqueda
* @returns {Promise<Array>} Artículos del servidor PubMed
*/
export async function obtenerArticulosDePubMed(query = 'mental health') {
try {
const response = await fetch(
`https://pubmed.ncbi.nlm.nih.gov/coreapi/v1/search/?query=${encodeURIComponent(query)}&pageSize=20`,
{ method: 'GET', mode: 'cors' }
);
if (!response.ok) throw new Error('Error en PubMed');
const data = await response.json();
return data.articles || [];
} catch (error) {
console.error('Error en PubMed API:', error);
return [];
}
}
/**
* @function obtenerArticulosDeNewsAPI
* @description Obtiene artículos de NewsAPI (requiere API key)
* @async
* @param {string} query - Término de búsqueda
* @returns {Promise<Array>} Artículos de NewsAPI
*/
export async function obtenerArticulosDeNewsAPI(query = 'mental health medicine') {
try {
// NewsAPI requiere API key - usando endpoint público si está disponible
const apiKey = process.env.REACT_APP_NEWSAPI_KEY || '';
if (!apiKey) {
console.warn('NewsAPI key no configurada');
return [];
}
const response = await fetch(
`https://newsapi.org/v2/everything?q=${encodeURIComponent(query)}&sortBy=publishedAt&language=es&pageSize=20&apiKey=${apiKey}`
);
if (!response.ok) throw new Error('Error en NewsAPI');
const data = await response.json();
return data.articles || [];
} catch (error) {
console.error('Error en NewsAPI:', error);
return [];
}
}
/**
* @function obtenerArticulosDeMedicalAPIs
* @description Obtiene artículos de APIs médicas públicas
* @async
* @returns {Promise<Array>} Artículos médicos
*/
export async function obtenerArticulosDeMedicalAPIs() {
try {
// Usando APIs públicas de salud
const endpoints = [
{
url: 'https://api.covid19api.com/',
mapper: null // Puede adaptarse según necesidad
}
];
const articulos = [];
// Obtener de múltiples fuentes
for (const endpoint of endpoints) {
try {
const response = await fetch(endpoint.url);
if (response.ok) {
// Procesar datos según la API
}
} catch (error) {
console.error('Error fetching from:', endpoint.url);
}
}
return articulos;
} catch (error) {
console.error('Error obteniendo artículos médicos:', error);
return [];
}
}
/**
* @function obtenerArticulosLocales
* @description Obtiene artículos de una base de datos local simulada
* @returns {Array} Artículos locales
*/
export function obtenerArticulosLocales() {
return [
{
id: 1,
titulo: "Nuevos tratamientos para la ansiedad generalizada",
descripcion: "Investigadores descubren enfoques innovadores para el tratamiento de trastornos de ansiedad",
contenido: "Un estudio reciente muestra que las terapias cognitivo-conductuales combinadas con tecnología pueden ser más efectivas.",
autor: "Journal of Clinical Psychology",
fuente: "Fuente Médica",
fecha: new Date(),
categoria: "Ansiedad",
imagen: "https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
},
{
id: 2,
titulo: "Importancia de la higiene del sueño en pacientes depresivos",
descripcion: "Estudio clínico demuestra la relevancia de establecer rutinas de sueño adecuadas",
contenido: "Los pacientes que mantienen horarios regulares de sueño presentan una reducción del 40% en síntomas depresivos.",
autor: "Sleep Medicine Reviews",
fuente: "Fuente Médica",
fecha: new Date(Date.now() - 86400000),
categoria: "Sueño",
imagen: "https://images.unsplash.com/photo-1434086144198-c0ec304386f0?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
},
{
id: 3,
titulo: "Mindfulness y meditación en el tratamiento del estrés",
descripcion: "Evidencia científica de los beneficios de técnicas de atención plena",
contenido: "Meta-análisis de 150 estudios confirman que el mindfulness reduce significativamente los niveles de cortisol.",
autor: "Mindfulness Journal",
fuente: "Fuente Médica",
fecha: new Date(Date.now() - 172800000),
categoria: "Mindfulness",
imagen: "https://images.unsplash.com/photo-1506126613408-eca07ce68773?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
},
{
id: 4,
titulo: "Ejercicio aeróbico mejora salud mental en adultos",
descripcion: "Nuevo estudio demuestra correlación entre actividad física y bienestar emocional",
contenido: "30 minutos de ejercicio diario pueden ser tan efectivos como algunos antidepresivos.",
autor: "Sports Medicine International",
fuente: "Fuente Médica",
fecha: new Date(Date.now() - 259200000),
categoria: "Ejercicio",
imagen: "https://images.unsplash.com/photo-1532521185607-c4b7b0b90d00?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
},
{
id: 5,
titulo: "Eje intestino-cerebro: nueva perspectiva en psiquiatría",
descripcion: "La microbiota intestinal influye directamente en la salud mental",
contenido: "Nuevas investigaciones revelan que ciertos probióticos pueden mejorar síntomas de depresión.",
autor: "Gut Microbiota Journal",
fuente: "Fuente Médica",
fecha: new Date(Date.now() - 345600000),
categoria: "Nutrición",
imagen: "https://images.unsplash.com/photo-1512621776951-a57141f2eefd?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
},
{
id: 6,
titulo: "Gestión del estrés digital en la era moderna",
descripcion: "Estrategias para mantener la salud mental en un mundo hiperconectado",
contenido: "Expertos recomiendan establecer límites con la tecnología para prevenir el burnout digital.",
autor: "Digital Wellness Report",
fuente: "Fuente Médica",
fecha: new Date(Date.now() - 432000000),
categoria: "Estrés",
imagen: "https://images.unsplash.com/photo-1516534775068-bb8155a6b250?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
},
{
id: 7,
titulo: "Signos de depresión: Guía de reconocimiento temprano",
descripcion: "Identificar síntomas de depresión a tiempo puede salvar vidas",
contenido: "Una intervención temprana puede prevenir complicaciones graves y mejorar el pronóstico.",
autor: "Psychiatry Today",
fuente: "Fuente Médica",
fecha: new Date(Date.now() - 518400000),
categoria: "Depresión",
imagen: "https://images.unsplash.com/photo-1489749798305-4fea3ba63d60?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
},
{
id: 8,
titulo: "Terapia de pareja efectiva para problemas relacionales",
descripcion: "Las relaciones saludables son fundamentales para la salud mental",
contenido: "La terapia de pareja muestra una efectividad del 85% en mejorar la comunicación y el bienestar.",
autor: "Journal of Couples Therapy",
fuente: "Fuente Médica",
fecha: new Date(Date.now() - 604800000),
categoria: "Relaciones",
imagen: "https://images.unsplash.com/photo-1529156069898-49953e39b3ac?w=500&h=300&fit=crop",
url: "https://ejemplo.com"
}
];
}
/**
* @function procesarArticulosDePubMed
* @description Formatea artículos de PubMed a nuestro esquema
* @param {Array} articulos - Artículos crudos
* @returns {Array} Artículos formateados
*/
export function procesarArticulosDePubMed(articulos) {
return articulos.map((art, idx) => ({
id: idx,
titulo: art.title || 'Sin título',
descripcion: art.snippet || 'Sin descripción',
contenido: art.snippet || 'Contenido no disponible',
autor: art.authors?.join(', ') || 'Autor desconocido',
fuente: 'PubMed',
fecha: new Date(art.pub_date || Date.now()),
categoria: clasificarCategoria(art.title),
imagen: 'https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=500&h=300&fit=crop',
url: art.uid ? `https://pubmed.ncbi.nlm.nih.gov/${art.uid}/` : '#'
}));
}
/**
* @function procesarArticulosDeNewsAPI
* @description Formatea artículos de NewsAPI a nuestro esquema
* @param {Array} articulos - Artículos crudos
* @returns {Array} Artículos formateados
*/
export function procesarArticulosDeNewsAPI(articulos) {
return articulos.map((art, idx) => ({
id: idx,
titulo: art.title || 'Sin título',
descripcion: art.description || art.content || 'Sin descripción',
contenido: art.content || art.description || 'Contenido no disponible',
autor: art.author || art.source?.name || 'Autor desconocido',
fuente: art.source?.name || 'NewsAPI',
fecha: new Date(art.publishedAt),
categoria: clasificarCategoria(art.title + ' ' + (art.description || '')),
imagen: art.urlToImage || 'https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=500&h=300&fit=crop',
url: art.url || '#'
}));
}
/**
* @function clasificarCategoria
* @description Clasifica un artículo por su contenido
* @param {string} texto - Texto del artículo
* @returns {string} Categoría identificada
*/
function clasificarCategoria(texto) {
const texto_lower = texto.toLowerCase();
const categorias = {
'Ansiedad': ['ansiedad', 'anxiety', 'anxious', 'worry'],
'Depresión': ['depresión', 'depression', 'depressive', 'depressed'],
'Ejercicio': ['ejercicio', 'exercise', 'workout', 'physical', 'fitness'],
'Estrés': ['estrés', 'stress', 'stressed', 'burnout'],
'Mindfulness': ['mindfulness', 'meditación', 'meditation', 'mindful'],
'Nutrición': ['nutrición', 'nutrition', 'diet', 'food', 'eat'],
'Relaciones': ['relación', 'relationship', 'pareja', 'couple', 'family'],
'Sueño': ['sueño', 'sleep', 'insomnia', 'sleeping']
};
for (const [categoria, palabras] of Object.entries(categorias)) {
if (palabras.some(palabra => texto_lower.includes(palabra))) {
return categoria;
}
}
return 'Estrés';
}
const medicalAPIs = {
obtenerArticulosDePubMed,
obtenerArticulosDeNewsAPI,
obtenerArticulosDeMedicalAPIs,
obtenerArticulosLocales,
procesarArticulosDePubMed,
procesarArticulosDeNewsAPI
};
export default medicalAPIs;