日丽天气使用的天气API为和风天气的免费天气API,和风天气API说明主页为https://www.heweather.com/documents。
关于天气系统的完整说明详见:Qt实战小工具 – 日丽天气V1.0
本天气系统中使用的API如下(parameters为需要填的参数信息):
3-10天天气预报:https://free-api.heweather.com/s6/weather/forecast?parameters
实况天气:https://free-api.heweather.com/s6/weather/now?parameters
生活指数:https://free-api.heweather.com/s6/weather/lifestyle?parameters
空气质量实况:https://free-api.heweather.com/s6/air/now?parameters
解析json文件部分的关键代码如下:
void WeatherInterface::disposeWeatherJsonData(QString jsonData)
{
QJsonParseError jsonError;
QByteArray byteArray = jsonData.toUtf8();
QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError); // 转化为 JSON 文档
if (doucment.isNull() || jsonError.error != QJsonParseError::NoError)
return;
// 获取JsonObject
QJsonArray mainDataJsonArray;
if (doucment.isObject())
{
QJsonObject jsonObject = doucment.object();
if (jsonObject.contains("HeWeather6"))
{
QJsonValue jsonValue = jsonObject.value("HeWeather6");
if (jsonValue.isArray())
mainDataJsonArray = jsonValue.toArray();
else
return;
}
}
QJsonObject mainDataJsonObject = mainDataJsonArray.at(0).toObject();
// 解释Basic
if (mainDataJsonObject.contains("basic"))
{
QJsonObject basicJsonObject = mainDataJsonObject.value("basic").toObject();
m_WeatherBaseData.cid = basicJsonObject.value("cid").toString();
m_WeatherBaseData.location = basicJsonObject.value("location").toString();
m_WeatherBaseData.parent_city = basicJsonObject.value("parent_city").toString();
m_WeatherBaseData.admin_area = basicJsonObject.value("admin_area").toString();
m_WeatherBaseData.cnty = basicJsonObject.value("cnty").toString();
m_WeatherBaseData.lat = basicJsonObject.value("lat").toString().toDouble();
m_WeatherBaseData.lon = basicJsonObject.value("lon").toString().toDouble();
m_WeatherBaseData.tz = basicJsonObject.value("tz").toString().toDouble();
}
// 解析更新时间
if (mainDataJsonObject.contains("update"))
{
QJsonObject updateJsonObject = mainDataJsonObject.value("update").toObject();
m_WeatherTime.localTime = QDateTime::fromString(updateJsonObject.value("loc").toString(), "yyyy-MM-dd hh:mm");
m_WeatherTime.utcTime = QDateTime::fromString(updateJsonObject.value("utc").toString(), "yyyy-MM-dd hh:mm");
}
// 解析状态码
if (mainDataJsonObject.contains("status"))
{
m_WeatherStatus.statusCode = mainDataJsonObject.value("status").toString();
m_WeatherStatus.note = getStatusCodeNote(m_WeatherStatus.statusCode);
}
// 解析类型的信息
m_TypeInterfaceMap[m_WeatherGetType]->disposeWeatherInfo(mainDataJsonObject);
}
m_TypeInterfaceMap[m_WeatherGetType]->disposeWeatherInfo(mainDataJsonObject);为处理除公共部分外的Json信息。
完整代码下载:https://github.com/douzhongqiang/WeatherSystem.git