{"id":245,"date":"2025-06-21T20:33:57","date_gmt":"2025-06-21T18:33:57","guid":{"rendered":"https:\/\/festivos.cl\/?page_id=245"},"modified":"2025-06-21T20:39:15","modified_gmt":"2025-06-21T18:39:15","slug":"noticias-de-chile","status":"publish","type":"page","link":"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/","title":{"rendered":"Noticias de Chile"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Noticias Feriados Chile &#8211; Noticias en Tiempo Real<\/title>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        body {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            background: #f8f9fa;\n        }\n\n        \/* Header *\/\n        header {\n            background: linear-gradient(135deg, #2c3e50, #3498db);\n            color: white;\n            padding: 1rem 0;\n            box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n            position: sticky;\n            top: 0;\n            z-index: 1000;\n        }\n\n        .header-container {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 0 20px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n\n        .logo {\n            font-size: 1.8em;\n            font-weight: bold;\n            display: flex;\n            align-items: center;\n            gap: 10px;\n        }\n\n        .refresh-btn {\n            background: rgba(255,255,255,0.2);\n            color: white;\n            border: none;\n            padding: 10px 15px;\n            border-radius: 8px;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            transition: background 0.3s ease;\n        }\n\n        .refresh-btn:hover {\n            background: rgba(255,255,255,0.3);\n        }\n\n        .refresh-btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n        }\n\n        \/* Hero Section *\/\n        .hero {\n            background: linear-gradient(135deg, #667eea, #764ba2);\n            color: white;\n            padding: 40px 0;\n            text-align: center;\n        }\n\n        .hero h1 {\n            font-size: 2.5em;\n            margin-bottom: 15px;\n            text-shadow: 2px 2px 4px rgba(0,0,0,0.3);\n        }\n\n        .hero p {\n            font-size: 1.1em;\n            max-width: 600px;\n            margin: 0 auto 20px;\n            opacity: 0.9;\n        }\n\n        .status-bar {\n            background: rgba(255,255,255,0.1);\n            padding: 10px 20px;\n            border-radius: 10px;\n            display: inline-block;\n            margin-top: 10px;\n        }\n\n        \/* Main Content *\/\n        .container {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 40px 20px;\n        }\n\n        .content-grid {\n            display: grid;\n            grid-template-columns: 2fr 1fr;\n            gap: 40px;\n            margin-bottom: 50px;\n        }\n\n        \/* Source Filters *\/\n        .source-filters {\n            display: flex;\n            gap: 10px;\n            margin-bottom: 30px;\n            flex-wrap: wrap;\n        }\n\n        .source-btn {\n            background: #ecf0f1;\n            color: #2c3e50;\n            padding: 8px 15px;\n            border: none;\n            border-radius: 20px;\n            cursor: pointer;\n            font-size: 0.9em;\n            transition: all 0.3s ease;\n        }\n\n        .source-btn:hover, .source-btn.active {\n            background: #3498db;\n            color: white;\n            transform: translateY(-2px);\n        }\n\n        \/* Loading State *\/\n        .loading-container {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            padding: 60px 20px;\n            flex-direction: column;\n            gap: 20px;\n        }\n\n        .spinner {\n            width: 50px;\n            height: 50px;\n            border: 5px solid #ecf0f1;\n            border-top: 5px solid #3498db;\n            border-radius: 50%;\n            animation: spin 1s linear infinite;\n        }\n\n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n\n        \/* News Grid *\/\n        .news-grid {\n            display: grid;\n            gap: 25px;\n        }\n\n        .news-item {\n            background: white;\n            border-radius: 15px;\n            overflow: hidden;\n            box-shadow: 0 5px 15px rgba(0,0,0,0.1);\n            transition: transform 0.3s ease;\n            opacity: 0;\n            animation: fadeInUp 0.6s ease forwards;\n        }\n\n        .news-item:hover {\n            transform: translateY(-5px);\n        }\n\n        .news-item.featured {\n            grid-column: 1 \/ -1;\n            display: grid;\n            grid-template-columns: 1fr 2fr;\n            gap: 0;\n        }\n\n        .news-image {\n            height: 200px;\n            background: linear-gradient(45deg, #3498db, #2980b9);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 3em;\n            color: white;\n            position: relative;\n            overflow: hidden;\n        }\n\n        .news-image img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n        }\n\n        .news-item.featured .news-image {\n            height: 300px;\n        }\n\n        .news-content {\n            padding: 25px;\n        }\n\n        .news-meta {\n            display: flex;\n            gap: 15px;\n            margin-bottom: 15px;\n            font-size: 0.9em;\n            color: #7f8c8d;\n            flex-wrap: wrap;\n        }\n\n        .news-source {\n            background: #e74c3c;\n            color: white;\n            padding: 4px 12px;\n            border-radius: 15px;\n            font-size: 0.8em;\n            font-weight: bold;\n        }\n\n        .news-source.emol { background: #c0392b; }\n        .news-source.cooperativa { background: #e67e22; }\n        .news-source.google_chile { background: #4285f4; }\n        .news-source.bing_chile { background: #00bcf2; }\n\n        .news-title {\n            font-size: 1.4em;\n            font-weight: bold;\n            margin-bottom: 15px;\n            color: #2c3e50;\n            line-height: 1.3;\n            display: -webkit-box;\n            -webkit-line-clamp: 3;\n            -webkit-box-orient: vertical;\n            overflow: hidden;\n        }\n\n        .news-item.featured .news-title {\n            font-size: 1.8em;\n            -webkit-line-clamp: 2;\n        }\n\n        .news-excerpt {\n            color: #5a6c7d;\n            margin-bottom: 15px;\n            line-height: 1.6;\n            display: -webkit-box;\n            -webkit-line-clamp: 3;\n            -webkit-box-orient: vertical;\n            overflow: hidden;\n        }\n\n        .news-footer {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-top: 15px;\n            padding-top: 15px;\n            border-top: 1px solid #ecf0f1;\n        }\n\n        .read-more {\n            color: #3498db;\n            text-decoration: none;\n            font-weight: 600;\n            transition: color 0.3s ease;\n        }\n\n        .read-more:hover {\n            color: #2980b9;\n        }\n\n        .news-date {\n            font-size: 0.8em;\n            color: #95a5a6;\n        }\n\n        \/* Sidebar *\/\n        .sidebar {\n            display: flex;\n            flex-direction: column;\n            gap: 30px;\n        }\n\n        .widget {\n            background: white;\n            border-radius: 15px;\n            padding: 25px;\n            box-shadow: 0 5px 15px rgba(0,0,0,0.1);\n        }\n\n        .widget-title {\n            font-size: 1.3em;\n            font-weight: bold;\n            margin-bottom: 20px;\n            color: #2c3e50;\n            border-bottom: 3px solid #3498db;\n            padding-bottom: 10px;\n        }\n\n        .trending-topics {\n            display: flex;\n            flex-direction: column;\n            gap: 10px;\n        }\n\n        .trending-item {\n            padding: 10px;\n            background: #ecf0f1;\n            border-radius: 8px;\n            font-size: 0.9em;\n            color: #2c3e50;\n            cursor: pointer;\n            transition: background 0.3s ease;\n        }\n\n        .trending-item:hover {\n            background: #d5dbdb;\n        }\n\n        .trending-count {\n            float: right;\n            background: #3498db;\n            color: white;\n            padding: 2px 8px;\n            border-radius: 10px;\n            font-size: 0.8em;\n        }\n\n        \/* Error States *\/\n        .error-message {\n            background: #e74c3c;\n            color: white;\n            padding: 15px;\n            border-radius: 10px;\n            text-align: center;\n            margin: 20px 0;\n        }\n\n        .no-news {\n            text-align: center;\n            padding: 60px 20px;\n            color: #7f8c8d;\n        }\n\n        \/* Animations *\/\n        @keyframes fadeInUp {\n            from {\n                opacity: 0;\n                transform: translateY(30px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        \/* Responsive *\/\n        @media (max-width: 768px) {\n            .content-grid {\n                grid-template-columns: 1fr;\n                gap: 30px;\n            }\n\n            .hero h1 {\n                font-size: 2em;\n            }\n\n            .news-item.featured {\n                grid-template-columns: 1fr;\n            }\n\n            .source-filters {\n                justify-content: center;\n            }\n\n            .news-meta {\n                flex-direction: column;\n                gap: 8px;\n            }\n        }\n\n        \/* Footer *\/\n        footer {\n            background: #2c3e50;\n            color: white;\n            padding: 30px 0 15px;\n            margin-top: 50px;\n            text-align: center;\n        }\n\n        .footer-content {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 0 20px;\n        }\n\n        .footer-stats {\n            display: flex;\n            justify-content: center;\n            gap: 30px;\n            margin-bottom: 20px;\n            flex-wrap: wrap;\n        }\n\n        .stat-item {\n            text-align: center;\n        }\n\n        .stat-number {\n            font-size: 1.5em;\n            font-weight: bold;\n            color: #3498db;\n        }\n\n        .stat-label {\n            font-size: 0.9em;\n            color: #bdc3c7;\n        }\n    <\/style>\n<\/head>\n<body>\n    <!-- Header -->\n    <header>\n        <div class=\"header-container\">\n            <div class=\"logo\">\n                \ud83c\udde8\ud83c\uddf1 FeriadosNews.cl\n            <\/div>\n            <button class=\"refresh-btn\" onclick=\"loadAllNews()\" id=\"refreshBtn\">\n                <span id=\"refreshIcon\">\ud83d\udd04<\/span>\n                <span id=\"refreshText\">Actualizar<\/span>\n            <\/button>\n        <\/div>\n    <\/header>\n\n    <!-- Hero Section -->\n    <section class=\"hero\">\n        <div class=\"container\">\n            <h1>\ud83d\udcf0 Noticias en Tiempo Real<\/h1>\n            <p>Informaci\u00f3n actualizada autom\u00e1ticamente desde m\u00faltiples fuentes de noticias<\/p>\n            <div class=\"status-bar\">\n                <span id=\"statusText\">\ud83d\udd04 Cargando noticias&#8230;<\/span>\n                <span id=\"lastUpdate\"><\/span>\n            <\/div>\n            <div style=\"margin-top: 10px; font-size: 0.9em; opacity: 0.8;\">\n                \ud83d\udca1 Si las fuentes RSS no est\u00e1n disponibles, se mostrar\u00e1n noticias de demostraci\u00f3n\n            <\/div>\n        <\/div>\n    <\/section>\n\n    <!-- Main Content -->\n    <div class=\"container\">\n        <!-- Source Filters -->\n        <div class=\"source-filters\">\n            <button class=\"source-btn active\" onclick=\"filterBySource('all')\">\ud83d\udcf0 Todas las fuentes<\/button>\n            <button class=\"source-btn\" onclick=\"filterBySource('emol')\">\ud83d\udcfa Emol<\/button>\n            <button class=\"source-btn\" onclick=\"filterBySource('cooperativa')\">\ud83d\udcfb Cooperativa<\/button>\n            <button class=\"source-btn\" onclick=\"filterBySource('google_chile')\">\ud83d\udcf1 Google News<\/button>\n            <button class=\"source-btn\" onclick=\"filterBySource('bing_chile')\">\ud83c\udf10 Bing News<\/button>\n        <\/div>\n\n        <div class=\"content-grid\">\n            <!-- Main News Area -->\n            <main>\n                <div id=\"loadingContainer\" class=\"loading-container\">\n                    <div class=\"spinner\"><\/div>\n                    <p>Cargando noticias desde m\u00faltiples fuentes&#8230;<\/p>\n                <\/div>\n                <div class=\"news-grid\" id=\"newsGrid\" style=\"display: none;\">\n                    <!-- Las noticias se cargar\u00e1n aqu\u00ed din\u00e1micamente -->\n                <\/div>\n                <div id=\"errorContainer\" style=\"display: none;\">\n                    <div class=\"error-message\">\n                        \u26a0\ufe0f Error al cargar las noticias. <button onclick=\"loadAllNews()\" style=\"background:none;border:none;color:white;text-decoration:underline;cursor:pointer;\">Intentar de nuevo<\/button>\n                    <\/div>\n                <\/div>\n            <\/main>\n\n            <!-- Sidebar -->\n            <aside class=\"sidebar\">\n                <!-- Real-time Stats -->\n                <div class=\"widget\">\n                    <h3 class=\"widget-title\">\ud83d\udcca Estad\u00edsticas en Vivo<\/h3>\n                    <div class=\"footer-stats\">\n                        <div class=\"stat-item\">\n                            <div class=\"stat-number\" id=\"totalNews\">0<\/div>\n                            <div class=\"stat-label\">Noticias<\/div>\n                        <\/div>\n                        <div class=\"stat-item\">\n                            <div class=\"stat-number\" id=\"sourcesCount\">0<\/div>\n                            <div class=\"stat-label\">Fuentes<\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- Trending Topics -->\n                <div class=\"widget\">\n                    <h3 class=\"widget-title\">\ud83d\udd25 Temas Populares<\/h3>\n                    <div class=\"trending-topics\" id=\"trendingTopics\">\n                        <div class=\"trending-item\">\n                            Feriados <span class=\"trending-count\">15<\/span>\n                        <\/div>\n                        <div class=\"trending-item\">\n                            Gobierno <span class=\"trending-count\">12<\/span>\n                        <\/div>\n                        <div class=\"trending-item\">\n                            Legislaci\u00f3n <span class=\"trending-count\">8<\/span>\n                        <\/div>\n                        <div class=\"trending-item\">\n                            Turismo <span class=\"trending-count\">6<\/span>\n                        <\/div>\n                        <div class=\"trending-item\">\n                            Econom\u00eda <span class=\"trending-count\">4<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- News Sources -->\n                <div class=\"widget\">\n                    <h3 class=\"widget-title\">\ud83d\udce1 Fuentes Activas<\/h3>\n                    <div id=\"sourcesStatus\">\n                        <div style=\"display: flex; align-items: center; gap: 10px; margin-bottom: 10px;\">\n                            <span class=\"news-source emol\">Emol<\/span>\n                            <span id=\"status-emol\">\ud83d\udd04<\/span>\n                        <\/div>\n                        <div style=\"display: flex; align-items: center; gap: 10px; margin-bottom: 10px;\">\n                            <span class=\"news-source cooperativa\">Cooperativa<\/span>\n                            <span id=\"status-cooperativa\">\ud83d\udd04<\/span>\n                        <\/div>\n                        <div style=\"display: flex; align-items: center; gap: 10px; margin-bottom: 10px;\">\n                            <span class=\"news-source google_chile\">Google News<\/span>\n                            <span id=\"status-google_chile\">\ud83d\udd04<\/span>\n                        <\/div>\n                        <div style=\"display: flex; align-items: center; gap: 10px;\">\n                            <span class=\"news-source bing_chile\">Bing News<\/span>\n                            <span id=\"status-bing_chile\">\ud83d\udd04<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/aside>\n        <\/div>\n    <\/div>\n\n    <!-- Footer -->\n    <footer>\n        <div class=\"footer-content\">\n            <p>&copy; 2025 FeriadosNews.cl &#8211; Noticias autom\u00e1ticas desde medios chilenos<\/p>\n            <p style=\"font-size: 0.9em; color: #95a5a6; margin-top: 10px;\">\n                \u00daltima actualizaci\u00f3n: <span id=\"footerLastUpdate\">Cargando&#8230;<\/span>\n            <\/p>\n        <\/div>\n    <\/footer>\n\n    <script>\n        let allNews = [];\n        let currentFilter = 'all';\n\n        \/\/ Configuraci\u00f3n de fuentes RSS verificadas y alternativas\n        const newsSources = {\n            emol: {\n                name: 'Emol',\n                url: 'https:\/\/api.rss2json.com\/v1\/api.json?rss_url=http:\/\/www.emol.com\/rss\/noticias.xml',\n                icon: '\ud83d\udcfa'\n            },\n            cooperativa: {\n                name: 'Cooperativa',\n                url: 'https:\/\/api.rss2json.com\/v1\/api.json?rss_url=https:\/\/cooperativa.cl\/rss\/site.xml',\n                icon: '\ud83d\udcfb'\n            },\n            google_chile: {\n                name: 'Google News Chile',\n                url: 'https:\/\/api.rss2json.com\/v1\/api.json?rss_url=https:\/\/news.google.com\/rss\/search?q=chile+feriados&hl=es-CL&gl=CL&ceid=CL:es-419',\n                icon: '\ud83d\udcf1'\n            },\n            bing_chile: {\n                name: 'Bing News Chile', \n                url: 'https:\/\/api.rss2json.com\/v1\/api.json?rss_url=https:\/\/www.bing.com\/news\/search?q=chile+feriados&format=rss',\n                icon: '\ud83c\udf10'\n            }\n        };\n\n        \/\/ Palabras clave relacionadas con feriados\n        const holidayKeywords = [\n            'feriado', 'feriados', 'festivo', 'celebraci\u00f3n', 'fiesta',\n            'patrias', 'navidad', 'a\u00f1o nuevo', 'semana santa', 'corpus christi',\n            'virgen del carmen', 'independencia', 'glorias navales', 'trabajo',\n            'santos', 'inmaculada', 'asunci\u00f3n', 'legislaci\u00f3n laboral', 'vacaciones',\n            'puente', 'd\u00eda libre', 'descanso', 'congreso', 'ley', 'gobierno'\n        ];\n\n        \/\/ Funci\u00f3n para verificar si una noticia es relevante\n        function isRelevantNews(title, description) {\n            const text = (title + ' ' + description).toLowerCase();\n            return holidayKeywords.some(keyword => text.includes(keyword));\n        }\n\n        \/\/ Funci\u00f3n para obtener noticias de una fuente\n        async function fetchNewsFromSource(sourceKey, sourceConfig) {\n            try {\n                updateSourceStatus(sourceKey, '\ud83d\udd04');\n                \n                const response = await fetch(sourceConfig.url);\n                \n                if (!response.ok) {\n                    throw new Error(`HTTP ${response.status}`);\n                }\n                \n                const data = await response.json();\n                \n                if (data.status === 'ok' && data.items && data.items.length > 0) {\n                    const relevantNews = data.items\n                        .filter(item => item.title && (\n                            isRelevantNews(item.title, item.description || '') || \n                            Math.random() < 0.3 \/\/ Include some random news for diversity\n                        ))\n                        .slice(0, 8) \/\/ Limitar a 8 noticias por fuente\n                        .map(item => ({\n                            title: item.title,\n                            description: item.description || item.content || 'Sin descripci\u00f3n disponible',\n                            link: item.link,\n                            pubDate: new Date(item.pubDate || Date.now()),\n                            source: sourceKey,\n                            sourceName: sourceConfig.name,\n                            thumbnail: item.thumbnail || item.enclosure?.link || null\n                        }));\n                    \n                    updateSourceStatus(sourceKey, `\u2705 ${relevantNews.length}`);\n                    return relevantNews;\n                } else {\n                    \/\/ If RSS fails, use demo content for this source\n                    const demoNews = getDemoNewsForSource(sourceKey, sourceConfig.name);\n                    updateSourceStatus(sourceKey, `\u26a0\ufe0f Demo`);\n                    return demoNews;\n                }\n            } catch (error) {\n                console.error(`Error fetching from ${sourceKey}:`, error);\n                \/\/ Fallback to demo content\n                const demoNews = getDemoNewsForSource(sourceKey, sourceConfig.name);\n                updateSourceStatus(sourceKey, '\u26a0\ufe0f Demo');\n                return demoNews;\n            }\n        }\n\n        \/\/ Funci\u00f3n para generar noticias demo cuando las fuentes reales fallan\n        function getDemoNewsForSource(sourceKey, sourceName) {\n            const demoTitles = [\n                'Gobierno anuncia nuevo feriado para conmemorar el D\u00eda de la Diversidad Cultural',\n                'Senado aprueba proyecto que extiende feriados de Fiestas Patrias',\n                'Ministerio del Trabajo aclara normativa sobre trabajo en d\u00edas festivos',\n                'Turismo aumenta 40% durante feriados largos del primer semestre',\n                'Proponen crear puente en mayo para impulsar turismo interno',\n                'Direcci\u00f3n del Trabajo fiscaliza cumplimiento de feriados irrenunciables',\n                'Comercio reporta ventas r\u00e9cord durante \u00faltimos feriados largos',\n                'Congreso debate nueva ley sobre feriados regionales'\n            ];\n\n            const demoDescriptions = [\n                'La medida busca reconocer la importancia de la diversidad cultural en el pa\u00eds y fomentar la inclusi\u00f3n social durante las celebraciones nacionales.',\n                'La iniciativa parlamentaria propone extender las celebraciones patrias para impulsar el turismo interno y fortalecer la identidad nacional.',\n                'Las nuevas directrices establecen claridad sobre los derechos laborales durante d\u00edas festivos y las compensaciones correspondientes.',\n                'El sector tur\u00edstico celebra el aumento significativo de visitantes durante los feriados largos, especialmente en destinos costeros.',\n                'La propuesta legislativa busca crear un puente estrat\u00e9gico en mayo para dinamizar la econom\u00eda y el sector tur\u00edstico.',\n                'Autoridades laborales intensifican las fiscalizaciones para garantizar el cumplimiento de los derechos de los trabajadores.',\n                'El retail y servicios muestran cifras positivas durante los feriados, impulsando la recuperaci\u00f3n econ\u00f3mica post-pandemia.',\n                'Diputados analizan ampliar los feriados regionales para fortalecer las identidades locales y el desarrollo territorial.'\n            ];\n\n            return Array.from({ length: 3 }, (_, i) => ({\n                title: demoTitles[Math.floor(Math.random() * demoTitles.length)],\n                description: demoDescriptions[Math.floor(Math.random() * demoDescriptions.length)],\n                link: '#',\n                pubDate: new Date(Date.now() - Math.random() * 86400000 * 3), \/\/ Random date within last 3 days\n                source: sourceKey,\n                sourceName: sourceName + ' (Demo)',\n                thumbnail: null\n            }));\n        }\n\n        \/\/ Funci\u00f3n para generar todas las noticias demo cuando ninguna fuente funciona\n        function getAllDemoNews() {\n            const allDemo = [];\n            Object.entries(newsSources).forEach(([key, config]) => {\n                allDemo.push(...getDemoNewsForSource(key, config.name));\n            });\n            return allDemo;\n        }\n\n        \/\/ Funci\u00f3n para actualizar el estado de las fuentes\n        function updateSourceStatus(sourceKey, status) {\n            const statusElement = document.getElementById(`status-${sourceKey}`);\n            if (statusElement) {\n                statusElement.textContent = status;\n            }\n        }\n\n        \/\/ Funci\u00f3n para cargar todas las noticias\n        async function loadAllNews() {\n            const refreshBtn = document.getElementById('refreshBtn');\n            const refreshIcon = document.getElementById('refreshIcon');\n            const refreshText = document.getElementById('refreshText');\n            const loadingContainer = document.getElementById('loadingContainer');\n            const newsGrid = document.getElementById('newsGrid');\n            const errorContainer = document.getElementById('errorContainer');\n            \n            \/\/ Mostrar estado de carga\n            refreshBtn.disabled = true;\n            refreshIcon.textContent = '\u23f3';\n            refreshText.textContent = 'Cargando...';\n            loadingContainer.style.display = 'flex';\n            newsGrid.style.display = 'none';\n            errorContainer.style.display = 'none';\n            \n            updateStatus('\ud83d\udd04 Obteniendo noticias de m\u00faltiples fuentes...');\n            \n            try {\n                \/\/ Cargar noticias de todas las fuentes en paralelo\n                const newsPromises = Object.entries(newsSources).map(([key, config]) => \n                    fetchNewsFromSource(key, config)\n                );\n                \n                const newsArrays = await Promise.all(newsPromises);\n                allNews = newsArrays.flat();\n                \n                \/\/ Ordenar por fecha (m\u00e1s recientes primero)\n                allNews.sort((a, b) => b.pubDate - a.pubDate);\n                \n                if (allNews.length > 0) {\n                    displayNews();\n                    updateStats();\n                    const realNewsCount = allNews.filter(news => !news.sourceName.includes('Demo')).length;\n                    const demoNewsCount = allNews.length - realNewsCount;\n                    \n                    if (demoNewsCount > 0) {\n                        updateStatus(`\u26a0\ufe0f ${realNewsCount} noticias reales + ${demoNewsCount} noticias demo cargadas`);\n                    } else {\n                        updateStatus(`\u2705 ${allNews.length} noticias cargadas exitosamente`);\n                    }\n                    \n                    loadingContainer.style.display = 'none';\n                    newsGrid.style.display = 'grid';\n                } else {\n                    \/\/ If no news at all, create some demo content\n                    allNews = getAllDemoNews();\n                    displayNews();\n                    updateStats();\n                    updateStatus('\u26a0\ufe0f Mostrando noticias de demostraci\u00f3n - Verifique su conexi\u00f3n');\n                    loadingContainer.style.display = 'none';\n                    newsGrid.style.display = 'grid';\n                }\n                \n            } catch (error) {\n                console.error('Error loading news:', error);\n                updateStatus('\u274c Error al cargar noticias');\n                loadingContainer.style.display = 'none';\n                errorContainer.style.display = 'block';\n            } finally {\n                \/\/ Restaurar bot\u00f3n\n                refreshBtn.disabled = false;\n                refreshIcon.textContent = '\ud83d\udd04';\n                refreshText.textContent = 'Actualizar';\n                \n                \/\/ Actualizar timestamp\n                updateLastUpdate();\n            }\n        }\n\n        \/\/ Funci\u00f3n para mostrar las noticias\n        function displayNews() {\n            const newsGrid = document.getElementById('newsGrid');\n            const filteredNews = currentFilter === 'all' \n                ? allNews \n                : allNews.filter(news => news.source === currentFilter);\n            \n            if (filteredNews.length === 0) {\n                newsGrid.innerHTML = '<div class=\"no-news\">\ud83d\udcf0 No hay noticias disponibles para esta fuente<\/div>';\n                return;\n            }\n            \n            newsGrid.innerHTML = '';\n            \n            filteredNews.forEach((news, index) => {\n                const newsItem = createNewsElement(news, index === 0 && currentFilter === 'all');\n                newsGrid.appendChild(newsItem);\n                \n                \/\/ Animar entrada\n                setTimeout(() => {\n                    newsItem.style.animationDelay = `${index * 0.1}s`;\n                }, 50);\n            });\n        }\n\n        \/\/ Funci\u00f3n para crear elemento de noticia\n        function createNewsElement(news, isFeatured = false) {\n            const article = document.createElement('article');\n            article.className = `news-item ${isFeatured ? 'featured' : ''}`;\n            \n            const cleanDescription = news.description ? \n                news.description.replace(\/<[^>]*>\/g, '').substring(0, 200) + '...' : \n                'Sin descripci\u00f3n disponible';\n            \n            const timeAgo = getTimeAgo(news.pubDate);\n            \n            article.innerHTML = `\n                ${news.thumbnail ? \n                    `<div class=\"news-image\"><img decoding=\"async\" src=\"${news.thumbnail}\" alt=\"Noticia\" onerror=\"this.parentElement.innerHTML='\ud83d\udcf0'\"><\/div>` :\n                    `<div class=\"news-image\">\ud83d\udcf0<\/div>`\n                }\n                <div class=\"news-content\">\n                    <div class=\"news-meta\">\n                        <span class=\"news-source ${news.source}\">${news.sourceName}<\/span>\n                        <span class=\"news-date\">\ud83d\udd50 ${timeAgo}<\/span>\n                    <\/div>\n                    <h3 class=\"news-title\">${news.title}<\/h3>\n                    <p class=\"news-excerpt\">${cleanDescription}<\/p>\n                    <div class=\"news-footer\">\n                        <a href=\"${news.link}\" target=\"_blank\" rel=\"noopener\" class=\"read-more\">Leer completa \u2192<\/a>\n                        <span class=\"news-date\">${news.pubDate.toLocaleDateString('es-CL')}<\/span>\n                    <\/div>\n                <\/div>\n            `;\n            \n            return article;\n        }\n\n        \/\/ Funci\u00f3n para calcular tiempo transcurrido\n        function getTimeAgo(date) {\n            const now = new Date();\n            const diffInHours = Math.floor((now - date) \/ (1000 * 60 * 60));\n            \n            if (diffInHours < 1) return 'Hace menos de 1 hora';\n            if (diffInHours < 24) return `Hace ${diffInHours} hora${diffInHours > 1 ? 's' : ''}`;\n            \n            const diffInDays = Math.floor(diffInHours \/ 24);\n            return `Hace ${diffInDays} d\u00eda${diffInDays > 1 ? 's' : ''}`;\n        }\n\n        \/\/ Funci\u00f3n para filtrar por fuente\n        function filterBySource(source) {\n            currentFilter = source;\n            \n            \/\/ Actualizar botones activos\n            document.querySelectorAll('.source-btn').forEach(btn => btn.classList.remove('active'));\n            event.target.classList.add('active');\n            \n            \/\/ Mostrar noticias filtradas\n            displayNews();\n        }\n\n        \/\/ Funci\u00f3n para actualizar estad\u00edsticas\n        function updateStats() {\n            document.getElementById('totalNews').textContent = allNews.length;\n            \n            const activeSources = Object.keys(newsSources).filter(source => \n                allNews.some(news => news.source === source)\n            ).length;\n            document.getElementById('sourcesCount').textContent = activeSources;\n        }\n\n        \/\/ Funci\u00f3n para actualizar estado\n        function updateStatus(message) {\n            document.getElementById('statusText').textContent = message;\n        }\n\n        \/\/ Funci\u00f3n para actualizar timestamp\n        function updateLastUpdate() {\n            const now = new Date();\n            const timeString = now.toLocaleString('es-CL');\n            document.getElementById('lastUpdate').textContent = ` | \u00daltima actualizaci\u00f3n: ${timeString}`;\n            document.getElementById('footerLastUpdate').textContent = timeString;\n        }\n\n        \/\/ Inicializaci\u00f3n\n        document.addEventListener('DOMContentLoaded', function() {\n            console.log('FeriadosNews.cl cargado - Iniciando obtenci\u00f3n de noticias...');\n            loadAllNews();\n            \n            \/\/ Auto-refresh cada 15 minutos\n            setInterval(loadAllNews, 15 * 60 * 1000);\n        });\n\n        \/\/ Manejar errores de red\n        window.addEventListener('online', () => {\n            updateStatus('\ud83c\udf10 Conexi\u00f3n restaurada - Actualizando noticias...');\n            loadAllNews();\n        });\n\n        window.addEventListener('offline', () => {\n            updateStatus('\ud83d\udcf5 Sin conexi\u00f3n a internet');\n        });\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Noticias Feriados Chile &#8211; Noticias en Tiempo Real \ud83c\udde8\ud83c\uddf1 FeriadosNews.cl \ud83d\udd04 Actualizar \ud83d\udcf0 Noticias en Tiempo Real Informaci\u00f3n actualizada autom\u00e1ticamente desde m\u00faltiples fuentes de noticias \ud83d\udd04 Cargando noticias&#8230; \ud83d\udca1 Si las fuentes RSS no est\u00e1n disponibles, se mostrar\u00e1n noticias de demostraci\u00f3n \ud83d\udcf0 Todas las fuentes \ud83d\udcfa Emol \ud83d\udcfb Cooperativa \ud83d\udcf1 Google News \ud83c\udf10 Bing News [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-245","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Noticias de Chile -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Noticias de Chile -\" \/>\n<meta property=\"og:description\" content=\"Noticias Feriados Chile &#8211; Noticias en Tiempo Real \ud83c\udde8\ud83c\uddf1 FeriadosNews.cl \ud83d\udd04 Actualizar \ud83d\udcf0 Noticias en Tiempo Real Informaci\u00f3n actualizada autom\u00e1ticamente desde m\u00faltiples fuentes de noticias \ud83d\udd04 Cargando noticias&#8230; \ud83d\udca1 Si las fuentes RSS no est\u00e1n disponibles, se mostrar\u00e1n noticias de demostraci\u00f3n \ud83d\udcf0 Todas las fuentes \ud83d\udcfa Emol \ud83d\udcfb Cooperativa \ud83d\udcf1 Google News \ud83c\udf10 Bing News [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-21T18:39:15+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/\",\"url\":\"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/\",\"name\":\"Noticias de Chile -\",\"isPartOf\":{\"@id\":\"https:\/\/festivos.cl\/#website\"},\"datePublished\":\"2025-06-21T18:33:57+00:00\",\"dateModified\":\"2025-06-21T18:39:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/festivos.cl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Noticias de Chile\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/festivos.cl\/#website\",\"url\":\"https:\/\/festivos.cl\/\",\"name\":\"Feriados y festivos en Chile\",\"description\":\"Todos los feriados de Chile en sitio interactivo\",\"publisher\":{\"@id\":\"https:\/\/festivos.cl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/festivos.cl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/festivos.cl\/#organization\",\"name\":\"Festivos.cl\",\"url\":\"https:\/\/festivos.cl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/festivos.cl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/festivos.cl\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-18-may-2025-09_16_40-p.m.png\",\"contentUrl\":\"https:\/\/festivos.cl\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-18-may-2025-09_16_40-p.m.png\",\"width\":1024,\"height\":1024,\"caption\":\"Festivos.cl\"},\"image\":{\"@id\":\"https:\/\/festivos.cl\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/instagram.com\/festivosdechile\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Noticias de Chile -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/","og_locale":"en_US","og_type":"article","og_title":"Noticias de Chile -","og_description":"Noticias Feriados Chile &#8211; Noticias en Tiempo Real \ud83c\udde8\ud83c\uddf1 FeriadosNews.cl \ud83d\udd04 Actualizar \ud83d\udcf0 Noticias en Tiempo Real Informaci\u00f3n actualizada autom\u00e1ticamente desde m\u00faltiples fuentes de noticias \ud83d\udd04 Cargando noticias&#8230; \ud83d\udca1 Si las fuentes RSS no est\u00e1n disponibles, se mostrar\u00e1n noticias de demostraci\u00f3n \ud83d\udcf0 Todas las fuentes \ud83d\udcfa Emol \ud83d\udcfb Cooperativa \ud83d\udcf1 Google News \ud83c\udf10 Bing News [&hellip;]","og_url":"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/","article_modified_time":"2025-06-21T18:39:15+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/","url":"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/","name":"Noticias de Chile -","isPartOf":{"@id":"https:\/\/festivos.cl\/#website"},"datePublished":"2025-06-21T18:33:57+00:00","dateModified":"2025-06-21T18:39:15+00:00","breadcrumb":{"@id":"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/festivos.cl\/index.php\/noticias-de-chile\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/festivos.cl\/index.php\/noticias-de-chile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/festivos.cl\/"},{"@type":"ListItem","position":2,"name":"Noticias de Chile"}]},{"@type":"WebSite","@id":"https:\/\/festivos.cl\/#website","url":"https:\/\/festivos.cl\/","name":"Feriados y festivos en Chile","description":"Todos los feriados de Chile en sitio interactivo","publisher":{"@id":"https:\/\/festivos.cl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/festivos.cl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/festivos.cl\/#organization","name":"Festivos.cl","url":"https:\/\/festivos.cl\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/festivos.cl\/#\/schema\/logo\/image\/","url":"https:\/\/festivos.cl\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-18-may-2025-09_16_40-p.m.png","contentUrl":"https:\/\/festivos.cl\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-18-may-2025-09_16_40-p.m.png","width":1024,"height":1024,"caption":"Festivos.cl"},"image":{"@id":"https:\/\/festivos.cl\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/instagram.com\/festivosdechile"]}]}},"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/pages\/245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/comments?post=245"}],"version-history":[{"count":3,"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/pages\/245\/revisions"}],"predecessor-version":[{"id":248,"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/pages\/245\/revisions\/248"}],"wp:attachment":[{"href":"https:\/\/festivos.cl\/index.php\/wp-json\/wp\/v2\/media?parent=245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}