{"id":857,"date":"2025-07-27T10:01:09","date_gmt":"2025-07-27T14:01:09","guid":{"rendered":"https:\/\/h-webdev.com\/?page_id=857"},"modified":"2026-04-07T16:01:07","modified_gmt":"2026-04-07T20:01:07","slug":"weather","status":"publish","type":"page","link":"https:\/\/h-webdev.com\/fr\/weather\/","title":{"rendered":"Weather"},"content":{"rendered":"\n<div class=\"wp-block-uagb-container uagb-block-a8a98fdb alignfull uagb-is-root-container\"><div class=\"uagb-container-inner-blocks-wrap\">\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Weather App<\/title>\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n\n    <style>\n        .weather-container {\n            margin: auto;\n            background-color: #ffffff;\n            border-radius: 16px;\n            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);\n            padding: 30px;\n            width: 100%;\n            max-width: 700px;\n            text-align: center;\n        }\n        .search-area {\n            display: flex;\n            gap: 10px;\n            margin-bottom: 25px;\n        }\n        .search-area input {\n            flex-grow: 1;\n            padding: 12px 15px;\n            border: 1px solid #cbd5e0;\n            border-radius: 8px;\n            font-size: 1rem;\n        }\n        .search-area button {\n            background-color: #3182ce; \/* Blue-600 *\/\n            color: white;\n            padding: 12px 20px;\n            border-radius: 8px;\n            font-weight: 600;\n            cursor: pointer;\n            transition: background-color 0.2s;\n        }\n        .search-area button:hover {\n            background-color: #2b6cb0; \/* Blue-700 *\/\n        }\n        .loading-spinner {\n            border: 4px solid rgba(0, 0, 0, 0.1);\n            border-top: 4px solid #3182ce;\n            border-radius: 50%;\n            width: 30px;\n            height: 30px;\n            animation: spin 1s linear infinite;\n            margin: 20px auto;\n        }\n        @keyframes spin {\n            0% { transform: rotate(0deg); }\n            100% { transform: rotate(360deg); }\n        }\n        .weather-card {\n            background-color: #f7fafc; \/* Lightest gray *\/\n            border-radius: 12px;\n            padding: 20px;\n            margin-bottom: 20px;\n            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);\n            text-align: left;\n        }\n        .current-weather .temp {\n            font-size: 3.5rem;\n            font-weight: 700;\n            color: #2d3748; \/* Dark gray *\/\n            margin-bottom: 5px;\n        }\n        .current-weather .description {\n            font-size: 1.5rem;\n            color: #4a5568; \/* Medium gray *\/\n            margin-bottom: 15px;\n        }\n        .weather-details {\n            display: flex;\n            justify-content: space-around;\n            flex-wrap: wrap;\n            gap: 15px;\n            margin-top: 20px;\n        }\n        .detail-item {\n            text-align: center;\n            flex: 1 1 120px; \/* Allows items to grow\/shrink but maintain min width *\/\n            min-width: 100px;\n        }\n        .detail-item .value {\n            font-size: 1.2rem;\n            font-weight: 600;\n            color: #2d3748;\n        }\n        .detail-item .label {\n            font-size: 0.9rem;\n            color: #718096;\n        }\n        .forecast-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));\n            gap: 15px;\n            margin-top: 20px;\n        }\n        .forecast-day {\n            background-color: #f0f4f8; \/* Even lighter gray *\/\n            border-radius: 10px;\n            padding: 15px;\n            text-align: center;\n            box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n        }\n        .forecast-day .day-name {\n            font-weight: 600;\n            color: #2d3748;\n            margin-bottom: 5px;\n        }\n        .forecast-day .temp-range {\n            font-size: 0.9rem;\n            color: #4a5568;\n        }\n        .error-message {\n            color: #e53e3e; \/* Red-600 *\/\n            background-color: #fed7d7; \/* Red-100 *\/\n            padding: 15px;\n            border-radius: 8px;\n            margin-top: 20px;\n            text-align: left;\n        }\n    <\/style>\n<\/head>\n<body class=\"bg-gray-200 flex items-center justify-center min-h-screen p-4\">\n    <div class=\"weather-container\">\n        <h1 class=\"text-3xl font-bold text-gray-800 mb-6\">Weather App<\/h1>\n\n        <div class=\"search-area\">\n            <input type=\"text\" id=\"cityInput\" placeholder=\"Enter city name (e.g., Montreal)\">\n            <button id=\"searchButton\">Search<\/button>\n        <\/div>\n\n        <div id=\"loadingIndicator\" class=\"hidden\">\n            <div class=\"loading-spinner\"><\/div>\n            <p class=\"text-gray-600\">Fetching weather data&#8230;<\/p>\n        <\/div>\n\n        <div id=\"errorMessage\" class=\"error-message hidden\"><\/div>\n\n        <div id=\"weatherDisplay\" class=\"hidden\">\n            <h2 id=\"cityName\" class=\"text-2xl font-semibold text-gray-800 mb-4 text-left\"><\/h2>\n\n            <div class=\"weather-card current-weather\">\n                <p class=\"temp\"><span id=\"currentTemp\">&#8212;<\/span>\u00b0C<\/p>\n                <p class=\"description capitalize\" id=\"currentDescription\">&#8212;<\/p>\n                <div class=\"weather-details\">\n                    <div class=\"detail-item\">\n                        <p class=\"value\" id=\"currentHumidity\">&#8211;%<\/p>\n                        <p class=\"label\">Humidity<\/p>\n                    <\/div>\n                    <div class=\"detail-item\">\n                        <p class=\"value\" id=\"currentWind\">&#8212; km\/h<\/p>\n                        <p class=\"label\">Wind Speed<\/p>\n                    <\/div>\n                    <\/div>\n            <\/div>\n\n            <h3 class=\"text-xl font-semibold text-gray-800 mb-4 text-left\">5-Day Forecast<\/h3>\n            <div class=\"forecast-grid\" id=\"forecastGrid\">\n                <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        const cityInput = document.getElementById('cityInput');\n        const searchButton = document.getElementById('searchButton');\n        const loadingIndicator = document.getElementById('loadingIndicator');\n        const errorMessage = document.getElementById('errorMessage');\n        const weatherDisplay = document.getElementById('weatherDisplay');\n\n        \/\/ Current Weather Elements\n        const cityNameDisplay = document.getElementById('cityName');\n        const currentTempSpan = document.getElementById('currentTemp');\n        const currentDescriptionSpan = document.getElementById('currentDescription');\n        const currentHumiditySpan = document.getElementById('currentHumidity');\n        const currentWindSpan = document.getElementById('currentWind');\n\n        \/\/ Forecast Elements\n        const forecastGrid = document.getElementById('forecastGrid');\n\n        \/\/ --- Proxy URL ---\n        const WEATHER_PROXY_URL = \"\/custom-api\/weather_api_proxy.php\"; \/\/ <--- Path to your PHP proxy script\n\n        \/\/ Function to display error messages\n        function showErrorMessage(message) {\n            errorMessage.textContent = message;\n            errorMessage.classList.remove('hidden');\n            weatherDisplay.classList.add('hidden');\n            loadingIndicator.classList.add('hidden');\n        }\n\n        \/\/ Function to hide error messages\n        function hideErrorMessage() {\n            errorMessage.classList.add('hidden');\n        }\n\n        \/\/ Function to display current weather data\n        function displayCurrentWeather(data) {\n            cityNameDisplay.textContent = data.name;\n            currentTempSpan.textContent = Math.round(data.main.temp);\n            currentDescriptionSpan.textContent = data.weather[0].description;\n            currentHumiditySpan.textContent = `${data.main.humidity}%`;\n            currentWindSpan.textContent = `${Math.round(data.wind.speed * 3.6)} km\/h`; \/\/ Convert m\/s to km\/h\n        }\n\n        \/\/ Function to display forecast data\n        function displayForecast(data) {\n            forecastGrid.innerHTML = ''; \/\/ Clear previous forecast\n\n            \/\/ Filter for one entry per day (e.g., around noon)\n            const dailyForecasts = {};\n            data.list.forEach(item => {\n                const date = new Date(item.dt_txt);\n                const day = date.toDateString(); \/\/ Get date string without time\n                if (!dailyForecasts[day]) {\n                    dailyForecasts[day] = item;\n                }\n            });\n\n            const daysOfWeek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n\n            Object.values(dailyForecasts).slice(0, 5).forEach(item => { \/\/ Display up to 5 days\n                const date = new Date(item.dt_txt);\n                const dayName = daysOfWeek[date.getDay()];\n                const tempMin = Math.round(item.main.temp_min);\n                const tempMax = Math.round(item.main.temp_max);\n                const description = item.weather[0].description;\n                \/\/ You can use weather icons if your API provides URLs or codes\n                \/\/ const iconCode = item.weather[0].icon;\n                \/\/ const iconUrl = `http:\/\/openweathermap.org\/img\/wn\/${iconCode}.png`;\n\n                const forecastDayDiv = document.createElement('div');\n                forecastDayDiv.className = 'forecast-day';\n                forecastDayDiv.innerHTML = `\n                    <p class=\"day-name\">${dayName}<\/p>\n                    <p class=\"temp-range\">${tempMin}\u00b0C \/ ${tempMax}\u00b0C<\/p>\n                    <p class=\"capitalize text-sm text-gray-600\">${description}<\/p>\n                `;\n                forecastGrid.appendChild(forecastDayDiv);\n            });\n        }\n\n        \/\/ Main function to fetch weather\n        async function getWeatherData(city) {\n            hideErrorMessage();\n            loadingIndicator.classList.remove('hidden');\n            weatherDisplay.classList.add('hidden'); \/\/ Hide previous results\n\n            try {\n                \/\/ Call your PHP proxy script instead of OpenWeatherMap directly\n                const response = await fetch(WEATHER_PROXY_URL, {\n                    method: 'POST',\n                    headers: { 'Content-Type': 'application\/json' },\n                    body: JSON.stringify({ city: city }) \/\/ Send the city to your PHP script\n                });\n\n                const data = await response.json();\n\n                if (!response.ok) { \/\/ Check if the HTTP status code is not in the 200s\n                    showErrorMessage(`Error: ${data.error || 'Unknown error fetching weather.'}`);\n                    return;\n                }\n\n                \/\/ The PHP script returns an object with 'current' and 'forecast' keys\n                currentWeatherDataGlobal = data.current;\n                forecastDataGlobal = data.forecast;\n\n                displayCurrentWeather(currentWeatherDataGlobal);\n                displayForecast(forecastDataGlobal);\n\n                weatherDisplay.classList.remove('hidden');\n                showMessageBox(\"Weather data fetched successfully!\", 'success');\n\n            } catch (error) {\n                console.error(\"Failed to fetch weather data via proxy:\", error);\n                showErrorMessage(\"Failed to fetch weather data. Please check your server setup (PHP proxy) or internet connection.\");\n            } finally {\n                loadingIndicator.classList.add('hidden');\n            }\n        }\n\n        \/\/ Function to show messages (like the previous apps)\n        function showMessageBox(message, type = 'info') {\n            const msgBox = document.getElementById('errorMessage'); \/\/ Reusing error message box for general messages\n            msgBox.textContent = message;\n            msgBox.classList.remove('hidden', 'bg-red-100', 'text-red-700', 'bg-green-100', 'text-green-700', 'bg-blue-100', 'text-blue-700');\n            if (type === 'error') {\n                msgBox.classList.add('bg-red-100', 'text-red-700');\n            } else if (type === 'success') {\n                msgBox.classList.add('bg-green-100', 'text-green-700');\n            } else {\n                msgBox.classList.add('bg-blue-100', 'text-blue-700');\n            }\n        }\n\n        \/\/ Event Listeners\n        searchButton.addEventListener('click', () => {\n            const city = cityInput.value.trim();\n            if (city) {\n                getWeatherData(city);\n            } else {\n                showErrorMessage(\"Please enter a city name.\");\n            }\n        });\n\n        cityInput.addEventListener('keypress', (event) => {\n            if (event.key === 'Enter') {\n                searchButton.click();\n            }\n        });\n\n        \/\/ Initial load (optional: fetch weather for a default city)\n        document.addEventListener('DOMContentLoaded', () => {\n            cityInput.value = \"\"; \/\/ Default city\n            searchButton.click(); \/\/ Trigger search on load\n        });\n    <\/script>\n<\/body>\n<\/html>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Weather App Weather App Search Fetching weather data&#8230; &#8212;\u00b0C &#8212; &#8211;% Humidity &#8212; km\/h Wind Speed 5-Day Forecast<\/p>","protected":false},"author":1,"featured_media":772,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-857","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Weather | H Web Dev.<\/title>\n<meta name=\"description\" content=\"Check real-time weather by city with this free online app. Instant forecasts with temperature, wind, and conditions \u2014 no signup required.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/h-webdev.com\/fr\/weather\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Weather | H Web Dev.\" \/>\n<meta property=\"og:description\" content=\"Check real-time weather by city with this free online app. Instant forecasts with temperature, wind, and conditions \u2014 no signup required.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/h-webdev.com\/fr\/weather\/\" \/>\n<meta property=\"og:site_name\" content=\"H Web Dev.\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-07T20:01:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"525\" \/>\n\t<meta property=\"og:image:height\" content=\"525\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimation du temps de lecture\" \/>\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:\\\/\\\/h-webdev.com\\\/weather\\\/\",\"url\":\"https:\\\/\\\/h-webdev.com\\\/weather\\\/\",\"name\":\"Weather | H Web Dev.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/h-webdev.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/h-webdev.com\\\/weather\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/h-webdev.com\\\/weather\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/h-webdev.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/h-webdev-logo.png\",\"datePublished\":\"2025-07-27T14:01:09+00:00\",\"dateModified\":\"2026-04-07T20:01:07+00:00\",\"description\":\"Check real-time weather by city with this free online app. Instant forecasts with temperature, wind, and conditions \u2014 no signup required.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/h-webdev.com\\\/weather\\\/#breadcrumb\"},\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/h-webdev.com\\\/weather\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\\\/\\\/h-webdev.com\\\/weather\\\/#primaryimage\",\"url\":\"https:\\\/\\\/h-webdev.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/h-webdev-logo.png\",\"contentUrl\":\"https:\\\/\\\/h-webdev.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/h-webdev-logo.png\",\"width\":525,\"height\":525,\"caption\":\"site logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/h-webdev.com\\\/weather\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/h-webdev.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Weather\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/h-webdev.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/h-webdev.com\\\/en\\\/\",\"name\":\"H Web Dev.\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/h-webdev.com\\\/en\\\/#\\\/schema\\\/person\\\/f61edc8649dfc6bdf57926a9b5328a90\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/h-webdev.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-CA\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/h-webdev.com\\\/en\\\/#\\\/schema\\\/person\\\/f61edc8649dfc6bdf57926a9b5328a90\",\"name\":\"servinhugor@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\\\/\\\/h-webdev.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/h-webdev-logo.webp\",\"url\":\"https:\\\/\\\/h-webdev.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/h-webdev-logo.webp\",\"contentUrl\":\"https:\\\/\\\/h-webdev.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/h-webdev-logo.webp\",\"width\":525,\"height\":525,\"caption\":\"servinhugor@gmail.com\"},\"logo\":{\"@id\":\"https:\\\/\\\/h-webdev.com\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/h-webdev-logo.webp\"},\"sameAs\":[\"https:\\\/\\\/h-webdev.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Weather | H Web Dev.","description":"Check real-time weather by city with this free online app. Instant forecasts with temperature, wind, and conditions \u2014 no signup required.","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:\/\/h-webdev.com\/fr\/weather\/","og_locale":"fr_CA","og_type":"article","og_title":"Weather | H Web Dev.","og_description":"Check real-time weather by city with this free online app. Instant forecasts with temperature, wind, and conditions \u2014 no signup required.","og_url":"https:\/\/h-webdev.com\/fr\/weather\/","og_site_name":"H Web Dev.","article_modified_time":"2026-04-07T20:01:07+00:00","og_image":[{"width":525,"height":525,"url":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimation du temps de lecture":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/h-webdev.com\/weather\/","url":"https:\/\/h-webdev.com\/weather\/","name":"Weather | H Web Dev.","isPartOf":{"@id":"https:\/\/h-webdev.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/h-webdev.com\/weather\/#primaryimage"},"image":{"@id":"https:\/\/h-webdev.com\/weather\/#primaryimage"},"thumbnailUrl":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png","datePublished":"2025-07-27T14:01:09+00:00","dateModified":"2026-04-07T20:01:07+00:00","description":"Check real-time weather by city with this free online app. Instant forecasts with temperature, wind, and conditions \u2014 no signup required.","breadcrumb":{"@id":"https:\/\/h-webdev.com\/weather\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/h-webdev.com\/weather\/"]}]},{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/h-webdev.com\/weather\/#primaryimage","url":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png","contentUrl":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png","width":525,"height":525,"caption":"site logo"},{"@type":"BreadcrumbList","@id":"https:\/\/h-webdev.com\/weather\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/h-webdev.com\/"},{"@type":"ListItem","position":2,"name":"Weather"}]},{"@type":"WebSite","@id":"https:\/\/h-webdev.com\/en\/#website","url":"https:\/\/h-webdev.com\/en\/","name":"H Web Dev.","description":"","publisher":{"@id":"https:\/\/h-webdev.com\/en\/#\/schema\/person\/f61edc8649dfc6bdf57926a9b5328a90"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/h-webdev.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-CA"},{"@type":["Person","Organization"],"@id":"https:\/\/h-webdev.com\/en\/#\/schema\/person\/f61edc8649dfc6bdf57926a9b5328a90","name":"servinhugor@gmail.com","image":{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.webp","url":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.webp","contentUrl":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.webp","width":525,"height":525,"caption":"servinhugor@gmail.com"},"logo":{"@id":"https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.webp"},"sameAs":["https:\/\/h-webdev.com\/"]}]}},"uagb_featured_image_src":{"full":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png",525,525,false],"thumbnail":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo-150x150.png",150,150,true],"medium":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo-300x300.png",300,300,true],"medium_large":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png",525,525,false],"large":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png",525,525,false],"1536x1536":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png",525,525,false],"2048x2048":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo.png",525,525,false],"trp-custom-language-flag":["https:\/\/h-webdev.com\/wp-content\/uploads\/2025\/07\/h-webdev-logo-12x12.png",12,12,true]},"uagb_author_info":{"display_name":"servinhugor@gmail.com","author_link":"https:\/\/h-webdev.com\/fr\/author\/servinhugorgmail-com\/"},"uagb_comment_info":0,"uagb_excerpt":"Weather App Weather App Search Fetching weather data&#8230; &#8212;\u00b0C &#8212; &#8211;% Humidity &#8212; km\/h Wind Speed 5-Day Forecast","_links":{"self":[{"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/pages\/857","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/comments?post=857"}],"version-history":[{"count":76,"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/pages\/857\/revisions"}],"predecessor-version":[{"id":1166,"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/pages\/857\/revisions\/1166"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/media\/772"}],"wp:attachment":[{"href":"https:\/\/h-webdev.com\/fr\/wp-json\/wp\/v2\/media?parent=857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}