rui-weather-service-api
Version:
Weather API service with OpenWeatherMap integration - includes both standalone API and MCP server
66 lines • 2.93 kB
JavaScript
import config from '../config/index.js';
/**
* Formats temperature based on units
*/
export function formatTemperature(temperature) {
const isMetric = config.units === 'metric';
const primaryTemp = `${temperature}°${isMetric ? 'C' : 'F'}`;
// Add conversion for convenience
const convertedTemp = isMetric
? `(${(temperature * 9 / 5 + 32).toFixed(1)}°F)`
: `(${((temperature - 32) * 5 / 9).toFixed(1)}°C)`;
return `${primaryTemp} ${convertedTemp}`;
}
/**
* Formats wind speed based on units
*/
export function formatWindSpeed(speed) {
const isMetric = config.units === 'metric';
return isMetric
? `${speed} m/s (${(speed * 2.237).toFixed(1)} mph)`
: `${speed} mph (${(speed / 2.237).toFixed(1)} m/s)`;
}
/**
* Formats current weather data as human-readable string
*/
export function formatCurrentWeather(weatherData) {
const isMetric = config.units === 'metric';
return `
Current Weather for ${weatherData.location.name}, ${weatherData.location.country}:
Temperature: ${formatTemperature(weatherData.temperature.current)}
Feels like: ${weatherData.temperature.feelsLike}°${isMetric ? 'C' : 'F'}
Conditions: ${weatherData.weather.description}
Humidity: ${weatherData.details.humidity}%
Wind: ${formatWindSpeed(weatherData.wind.speed)}
Pressure: ${weatherData.details.pressure} hPa
Visibility: ${weatherData.details.visibility} km
Sunrise: ${weatherData.details.sunrise.toLocaleTimeString()}
Sunset: ${weatherData.details.sunset.toLocaleTimeString()}
Updated: ${weatherData.updatedAt.toLocaleString()}
`.trim();
}
/**
* Formats forecast data as human-readable string
*/
export function formatForecast(forecastData) {
const isMetric = config.units === 'metric';
let forecastInfo = `Weather Forecast for ${forecastData.city.name}, ${forecastData.city.country}:\n\n`;
forecastData.forecasts.forEach(forecast => {
const date = forecast.date.toLocaleDateString();
forecastInfo += `${date}:\n`;
forecastInfo += ` Temperature: ${forecast.temperature.avg.toFixed(1)}°${isMetric ? 'C' : 'F'} (Low: ${forecast.temperature.min.toFixed(1)}°, High: ${forecast.temperature.max.toFixed(1)}°)\n`;
forecastInfo += ` Conditions: ${forecast.weather.description}\n`;
forecastInfo += ` Humidity: ${forecast.details.humidity}%\n`;
forecastInfo += ` Wind: ${forecast.wind.speed} ${isMetric ? 'm/s' : 'mph'}\n\n`;
});
return forecastInfo;
}
/**
* Returns a condensed single-line forecast summary
*/
export function formatForecastSummary(forecastData) {
const isMetric = config.units === 'metric';
const forecast = forecastData.forecasts[0];
return `${forecastData.city.name}: ${forecast.temperature.avg.toFixed(1)}°${isMetric ? 'C' : 'F'}, ${forecast.weather.description}, Wind: ${forecast.wind.speed} ${isMetric ? 'm/s' : 'mph'}`;
}
//# sourceMappingURL=weather-formatter.js.map