103 lines
3.0 KiB
C++
103 lines
3.0 KiB
C++
#pragma once
|
||
#include <string>
|
||
#include <unordered_map>
|
||
|
||
/**
|
||
* @brief WeatherApi类用于封装和风天气API调用
|
||
*/
|
||
class WeatherApi {
|
||
private:
|
||
// 和风天气API配置参数
|
||
std::string api_host_; // API主机地址
|
||
std::string api_key_; // API密钥
|
||
std::string default_location_; // 默认城市位置
|
||
std::string kid_; // JWT认证ID
|
||
std::string project_id_; // 项目ID
|
||
std::string private_key_; // 私钥
|
||
|
||
// 简单缓存管理
|
||
std::unordered_map<std::string, std::string> weather_cache_; // 天气数据缓存
|
||
std::unordered_map<std::string, std::string> ip_info_cache_; // IP信息缓存
|
||
|
||
// 天气代码映射表,将API返回的天气代码转换为中文描述
|
||
static std::unordered_map<std::string, std::string> WEATHER_CODE_MAP;
|
||
|
||
/**
|
||
* @brief 生成JWT令牌(预留接口)
|
||
* @return JWT令牌字符串
|
||
*/
|
||
std::string GenerateJwtToken();
|
||
|
||
/**
|
||
* @brief 封装HTTP GET请求
|
||
* @param url 请求URL
|
||
* @param headers 请求头
|
||
* @param response 响应内容
|
||
* @return 是否请求成功
|
||
*/
|
||
bool HttpGet(const std::string& url, const std::string& headers, std::string& response);
|
||
|
||
/**
|
||
* @brief 获取城市信息
|
||
* @param location 城市名称
|
||
* @return 城市详细信息
|
||
*/
|
||
std::string FetchCityInfo(const std::string& location, const std::string& lang);
|
||
|
||
/**
|
||
* @brief 获取IP位置信息
|
||
* @details 自动获取设备当前IP的地理位置信息,无需指定IP参数
|
||
* @return IP对应的地理位置信息
|
||
*/
|
||
std::string GetIpInfo();
|
||
|
||
public:
|
||
/**
|
||
* @brief 构造函数,初始化配置参数
|
||
*/
|
||
WeatherApi();
|
||
|
||
/**
|
||
* @brief 获取当前默认城市
|
||
*/
|
||
std::string GetDefaultLocation() const;
|
||
|
||
/**
|
||
* @brief 析构函数
|
||
*/
|
||
~WeatherApi() = default;
|
||
|
||
/**
|
||
* @brief 获取天气信息主函数
|
||
* @param location 城市名称
|
||
* @param lang 语言设置
|
||
* @return 格式化的天气信息
|
||
*/
|
||
std::string GetWeather(const std::string& location, const std::string& lang);
|
||
|
||
/**
|
||
* @brief 自动检测并设置当前位置
|
||
* @details 调用太平洋IP查询API自动检测当前地理位置,并更新默认城市设置
|
||
*/
|
||
void AutoDetectLocation();// 自动检测NVS中是否存在当前位置的城市信息,并设置当前位置
|
||
};
|
||
|
||
/**
|
||
* @brief 全局函数,用于获取天气信息
|
||
* @param location 城市名称
|
||
* @param lang 语言设置
|
||
* @return 格式化的天气信息
|
||
*/
|
||
extern std::string GetWeatherInfo(const std::string& location, const std::string& lang);
|
||
|
||
/**
|
||
* @brief 全局函数,用于自动检测并设置当前位置
|
||
* @details 供应用程序在网络连接后调用,自动检测地理位置并更新默认城市
|
||
*/
|
||
extern void AutoDetectAndSetLocation();
|
||
|
||
/**
|
||
* @brief 全局WeatherApi实例
|
||
*/
|
||
extern WeatherApi g_weather_api;
|