BytePower Weather 
P.S. BytePower Weather 由旧服务 ACB toolbox 中迁移而来,通过提供位置信息(经纬度)来获取该位置的天气信息。迁移后放置在 bytepower station 中,由 bytepower server 转发该服务。
weather conditions 
英文地区(locale = en) 
目前使用 OpenWeatherMap,天气现象摘自OpenWeatherMap Doc
简体中文地区(locale=zh-Hans) 
目前使用心知天气,天气现象摘自心知文档
| condition | 
|---|
| 晴(国内城市白天晴) | 
| 晴(国内城市夜晚晴) | 
| 晴(国外城市白天晴) | 
| 晴(国外城市夜晚晴) | 
| 多云 | 
| 晴间多云 | 
| 大部多云 | 
| 阴 | 
| 阵雨 | 
| 雷阵雨 | 
| 雷阵雨伴有冰雹 | 
| 小雨 | 
| 中雨 | 
| 大雨 | 
| 暴雨 | 
| 大暴雨 | 
| 特大暴雨 | 
| 冻雨 | 
| 雨夹雪 | 
| 阵雪 | 
| 小雪 | 
| 中雪 | 
| 大雪 | 
| 暴雪 | 
| 浮尘 | 
| 扬沙 | 
| 沙尘暴 | 
| 强沙尘暴 | 
| 雾 | 
| 霾 | 
| 风 | 
| 大风 | 
| 飓风 | 
| 热带风暴 | 
| 龙卷风 | 
| 冷 | 
| 热 | 
| 未知 | 
缓存 
关于缓存设计,这里每段缓存数据的索引(key)使用的是geohash 算法,精度选择为 5(0 ~ 12 可供选择),位置偏差在 4.89km x 4.89km。 也就是说,每个 23.9121km^2^会缓存相同的天气信息,目前设置的缓存过期时间为 1hr。
缓存容量占用:以使用 owm(open weather map)为前提,每条缓存的内存占用约为 6KB,以中国面积来计算,最多可能产生 401,344 个地区块,最多会占用~ 2.4GB(在全中国每个地区块在同 1hr 内都调用了 bp 的天气服务情况下)。
接入中国本地化服务后的每地区块缓存大小,与之前计算有差异,因之前未汉化,预估一个地区块缓存为~ 6kB,现在是~ 12kB。
优化:使用 zlib 进行简单的压缩。
bp 天气服务统一输出格式 
所有字段除非特殊说明,皆为字符串
输出格式:
{
    "weather":{
        "location":{
            "country":"",
            "coordinates":"",
            "name":"",
            "detail":"",
            "tz_long":""
        },
        "observation":{
            "weather":"",
            "code":"",
            "temperature_fahrenheit":"",
            "temperature_celsius":"",
            "feelslike_fahrenheit":"",
            "feelslike_celsius":"",
            "wind_direction":"",
            "wind_kph":"",
            "wind_mph":"",
            "wind_scale":"",
            "visibility_km":"",
            "visibility_mi":"",
            "relative_humidity":"",
            "local_epoch":"",
            "observation_epoch":""
        },
        "sun_phase":{
            "sunrise":{
                "hour":"",
                "minute":""
            },
            "sunset":{
                "hour":"",
                "minute":""
            }
        },
        "daily_forecast":[
            {
                "date":{
                    "day":"",
                    "month":"",
                    "year":"",
                    "weekday":""
                },
                "high":{
                    "fahrenheit":"",
                    "celsius":""
                },
                "low":{
                    "fahrenheit":"",
                    "celsius":""
                },
                "pop":"",
                "rain_fall":"",
                "day_condition":"",
                "day_code":"",
                "night_condition":"",
                "night_code":"",
                "wind_kph":"",
                "wind_mph":"",
                "wind_direction":"",
                "wind_scale":"",
                "relative_humidity":""
            },...
        ],
        "hourly_forecast":[
            {
                "forecast_time":{
                    "year":"",
                    "month":"",
                    "day":"",
                    "weekday":"",
                    "hour":"",
                    "minute":"",
                    "second":""
                },
                "temperature":{
                    "fahrenheit":"",
                    "celsius":""
                },
                "pop":"",
                "weather":"",
                "code":"",
                "relative_humidity":"",
                "wind_kph":"",
                "wind_mph":"",
                "wind_direction":"",
                "wind_scale":""
            },...
        ],
        "history_24h": [
            {
                "code": "",
                "feelslike_celsius": {
                  "celsius": "",
                  "fahrenheit": ""
                },
                "pressure": "",
                "relative_humidity": "",
                "temperature": {
                  "celsius": "",
                  "fahrenheit": ""
                },
                "timestamp": {
                  "day": "",
                  "hour": "",
                  "month": "",
                  "year": ""
                },
                "weather": ""
            },...
        ],
        "air_quality":{
            "quality_summary":"",
            "air_quality_index":"",
            "pm2.5":"",
            "pm10":"",
            "so2":"",
            "no2":"",
            "co":"",
            "o3":""
        },
        "life_suggestion":{
            "dressing":{
                "brief":"",
                "detail":""
            },
            "ultra_violet":{
                "brief":"",
                "detail":""
            },
            "sport":{
                "brief":"",
                "detail":""
            },
            "air_pollution":{
                "brief":"",
                "detail":""
            },
            "makeup":{
                "brief":"",
                "detail":""
            },
            "flu":{
                "brief":"",
                "detail":""
            },
            "car_washing":{
                "brief":"",
                "detail":""
            },
            "fishing":{
                "brief":"",
                "detail":""
            }
        },
        "service_provider":{
            "name":"",
            "url":""
        }
    }
}具体说明: location(地区信息)
| 字段 | 含义 | 说明 | 
|---|---|---|
| country | 国家名称 | |
| coordinates | 坐标(经纬度) | 格式为以空格分隔的经度纬度字符串 | 
| name | 所在地名字 | |
| detail | 详细位置 | locale=en 此字段没有值 | 
| tz_long | 时区 | 
sun_phase(日相)
locale zh-Hans 这段信息不可用
| 字段 | 含义 | 说明 | 
|---|---|---|
| sunrise | 日出时间 | 下层有 hour(小时),minute(分钟)两个字段 | 
| sunset | 日落时间 | 下层有 hour(小时),minute(分钟)两个字段 | 
observation(当前观测信息)
| 字段 | 含义 | 说明 | 
|---|---|---|
| weather | 天气情况概述 | |
| code | 天气情况代码 | 随 service provider 的不同而不同,需要接入方自行理解 | 
| temperature_fahrenheit | 华氏温度 | |
| temperature_celsius | 摄氏温度 | |
| feelslike_fahrenheit | 体感温度 华氏 | |
| feelslike_celsius | 体感温度 摄氏 | |
| wind_direction | 风向 | |
| wind_kph | 风速(公里每小时) | |
| wind_mph | 风速(英里每小时) | |
| wind_scale | 风级 | locale en 此字段没有值 | 
| visibility_km | 能见度(公里) | |
| visibility_mi | 能见度(英里) | |
| relative_humidity | 相对湿度 (0-100) | |
| local_epoch | 本地时间 | Unix 时间戳 精确度秒级别 | 
| observation_epoch | 观测时间 | Unix 时间戳 精确度秒级别 | 
daily_forecast(逐日预报)
locale en 与 locale zh-Hans 均提供 10 日预报
| 字段 | 含义 | 说明 | 
|---|---|---|
| date | 日期 | 下层有 year(年),month(月),day(日),weekday(星期)四个字段 | 
| high | 最高温度 | 下层有 fahrenheit(华氏温度),celsius(摄氏温度)两个字段 | 
| low | 最低温度 | 下层有 fahrenheit(华氏温度),celsius(摄氏温度)两个字段 | 
| pop | 降雨概率 (0-1 的小数) | |
| rain_fall | 降雨量 (单位为 mm) | locale en 此字段没有值 | 
| day_condition | 日间天气 | |
| day_code | 日间天气代码 | 随 service provider 的不同而不同,需要接入方自行理解 | 
| night_condition | 夜间天气 | |
| night_code | 夜间天气代码 | 随 service provider 的不同而不同,需要接入方自行理解 | 
| wind_kph | 风速(公里每小时) | locale en 此字段没有值 | 
| wind_mph | 风速(英里每小时) | locale en 此字段没有值 | 
| wind_direction | 风向 | locale en 此字段没有值 | 
| wind_scale | 风级 | locale en 此字段没有值 | 
| relative_humidity | 相对湿度 (0-100) | locale en 此字段没有值 | 
hourly_forecast(逐小时预报)
locale en 提供 36 小时预报 locale zh-Hans 提供 23 小时预报(由于第三方服务问题,该服务提供的 24 小时播报是从当前小时开始记 24 小时,而非下一小时开始记 24 小时,因此目前只能提供 23 小时预报)
| 字段 | 含义 | 说明 | 
|---|---|---|
| forecast_time | 预报时间 | 下层有 year(年),month(月),day(日),weekday(星期),hour(小时),minute(分钟),second(秒)七个字段 | 
| temperature | 温度 | 下层有 fahrenheit(华氏温度),celsius(摄氏温度)两个字段 | 
| pop | 降雨概率 | locale zh-Hans 此字段没有值 | 
| weather | 天气情况概述 | |
| code | 天气情况代码 | 随 service provider 的不同而不同,需要接入方自行理解 | 
| relative_humidity | 相对湿度(0-100) | |
| wind_kph | 风速(公里每小时) | locale en 此字段没有值 | 
| wind_mph | 风速(英里每小时) | locale en 此字段没有值 | 
| wind_direction | 风向 | locale en 此字段没有值 | 
| wind_scale | 风级 | locale en 此字段没有值 | 
air_quality
locale en 这段信息不可用
| 字段 | 含义 | 说明 | 
|---|---|---|
| quality_summary | 空气质量类别 | 有“优、良、轻度污染、中度污染、重度污染、严重污染”6 类 | 
| air_quality_index | 空气质量指数 | |
| pm2.5 | PM2.5 颗粒物(粒径小于等于 2.5μm)1 小时平均值。单位:μg/m³ | |
| pm10 | PM10 颗粒物(粒径小于等于 10μm)1 小时平均值。单位:μg/m³ | |
| so2 | 二氧化硫 1 小时平均值。单位:μg/m³ | |
| no2 | 二氧化氮 1 小时平均值。单位:μg/m³ | |
| co | 一氧化碳 1 小时平均值。单位:mg/m³ | |
| o3 | 臭氧 1 小时平均值。单位:μg/m³ | 
life_suggestion
locale en 这段信息不可用
| 字段 | 含义 | 说明 | 
|---|---|---|
| dressing | 穿衣 | |
| ultra_violet | 紫外线 | |
| sport | 运动 | |
| air_pollution | 空气污染 | |
| makeup | 化妆 | |
| flu | 感冒 | |
| car_washing | 洗车 | |
| fishing | 钓鱼 | 
service_provider
目前在使用的两个 provider 分别是: seniverse(心知天气) -- https://www.seniverse.com open weather map -- https://openweathermap.org/
| 字段 | 含义 | 说明 | 
|---|---|---|
| name | 服务提供方的名称 | |
| url | 服务提供方的官方网址 | 
接口 
weather(天气)服务目前分两个费用档位,一个是 standard(标准)档位,一个是 economical(经济)档位,两者的主要差别在于缓存时间的长短,缓存时间越短,请求第三方服务的次数就会越多,产生的费用也就越多。
且目前,economical 档位仅支持 ip 的请求方式,standard 档位仅支持经纬度的请求方式。
standard 档位接口前缀: 
- client to server {bp_server}/bp/weather/std
 - server to server {bp_server}/bp/server/user/{user_id}/weather/std
 
economical 档位接口前缀: 
- client to server {bp_server}/bp/weather/eco
 - server to server {bp_server}/bp/server/user/{user_id}/weather/eco
 
1. (GET) 获取天气信息 
client to server: {client_to_server 前缀}/report
| Required Headers | 
|---|
| X-BytePower-Sign | 
| X-BytePower-Session-Token | 
| economical 档位额外添加的请求头 | 备注 | 
|---|---|
| X-Forwarded-For | 网络运营商会自动添加,客户端无需单独添加 | 
server to server: {server_to_server 前缀}/report
| Required Headers | 
|---|
| X-BytePower-Auth-Token | 
| economical 档位额外添加的请求头 | 备注 | 
|---|---|
| X-Forwarded-For | 网络运营商会自动添加,客户端无需单独添加 | 
http 请求参数
| 参数 | 含义 | 说明 | 示例 | 
|---|---|---|---|
| latitude | 经度 | standard 档位必填 | |
| longitude | 纬度 | standard 档位必填 | |
| locale | 语言地区 | 选填,目前支持两种 locale:“zh-Hans”简体中文,“en”英文 | 缺省值为"zh-Hans",即默认为中文地区 | 
示例输入 1: 
优盛大厦的经纬度:latitude:40.029389, longitude:116.411597, locale:zh-Hans
客户端请求: 
{bp_server}/bp/weather/std/report?latitude=40.029389&longitude=116.411597&locale=zh-Hans
服务器请求: 
{bp_server}/bp/server/user/{user_id}/weather/std/report?latitude=40.029389&longitude=116.411597&locale=zh-Hans
示例输入 2: 
设备当前 ip 地址:ip:220.181.38.148
客户端请求: 
{bp_server}/bp/weather/eco/report?locale=zh-Hans
服务器请求: 
{bp_server}/bp/server/user/{user_id}/weather/eco/report?locale=zh-Hans
示例输出:
{
  "weather": {
    "air_quality": {
      "air_quality_index": "20",
      "co": "0.354",
      "no2": "5",
      "o3": "61",
      "pm10": "5",
      "pm2.5": "3",
      "quality_summary": "优",
      "so2": "2"
    },
    "daily_forecast": [
      {
        "date": {
          "day": "27",
          "month": "8",
          "weekday": "5",
          "year": "2021"
        },
        "day_code": "0",
        "day_condition": "晴",
        "high": {
          "celsius": "29",
          "fahrenheit": "84"
        },
        "low": {
          "celsius": "18",
          "fahrenheit": "64"
        },
        "night_code": "1",
        "night_condition": "晴",
        "pop": "0.33",
        "rain_fall": "1.2",
        "relative_humidity": "71",
        "wind_direction": "西南",
        "wind_kph": "8.4",
        "wind_mph": "13.4",
        "wind_scale": "2"
      },
      {
        "date": {
          "day": "28",
          "month": "8",
          "weekday": "6",
          "year": "2021"
        },
        "day_code": "0",
        "day_condition": "晴",
        "high": {
          "celsius": "29",
          "fahrenheit": "84"
        },
        "low": {
          "celsius": "19",
          "fahrenheit": "66"
        },
        "night_code": "1",
        "night_condition": "晴",
        "pop": "0.35",
        "rain_fall": "1.2",
        "relative_humidity": "80",
        "wind_direction": "北",
        "wind_kph": "3.0",
        "wind_mph": "4.8",
        "wind_scale": "1"
      },
      {
        "date": {
          "day": "29",
          "month": "8",
          "weekday": "7",
          "year": "2021"
        },
        "day_code": "4",
        "day_condition": "多云",
        "high": {
          "celsius": "28",
          "fahrenheit": "82"
        },
        "low": {
          "celsius": "20",
          "fahrenheit": "68"
        },
        "night_code": "4",
        "night_condition": "多云",
        "pop": "0.65",
        "rain_fall": "2.76",
        "relative_humidity": "86",
        "wind_direction": "南",
        "wind_kph": "3.0",
        "wind_mph": "4.8",
        "wind_scale": "1"
      },
      {
        "date": {
          "day": "30",
          "month": "8",
          "weekday": "1",
          "year": "2021"
        },
        "day_code": "4",
        "day_condition": "多云",
        "high": {
          "celsius": "28",
          "fahrenheit": "82"
        },
        "low": {
          "celsius": "21",
          "fahrenheit": "69"
        },
        "night_code": "4",
        "night_condition": "多云",
        "pop": "0.36",
        "rain_fall": "1.2",
        "relative_humidity": "88",
        "wind_direction": "南",
        "wind_kph": "8.4",
        "wind_mph": "13.4",
        "wind_scale": "2"
      },
      {
        "date": {
          "day": "31",
          "month": "8",
          "weekday": "2",
          "year": "2021"
        },
        "day_code": "9",
        "day_condition": "阴",
        "high": {
          "celsius": "26",
          "fahrenheit": "78"
        },
        "low": {
          "celsius": "19",
          "fahrenheit": "66"
        },
        "night_code": "4",
        "night_condition": "多云",
        "pop": "0.72",
        "rain_fall": "3.03",
        "relative_humidity": "96",
        "wind_direction": "东",
        "wind_kph": "3.0",
        "wind_mph": "4.8",
        "wind_scale": "1"
      },
      {
        "date": {
          "day": "1",
          "month": "9",
          "weekday": "3",
          "year": "2021"
        },
        "day_code": "0",
        "day_condition": "晴",
        "high": {
          "celsius": "29",
          "fahrenheit": "84"
        },
        "low": {
          "celsius": "20",
          "fahrenheit": "68"
        },
        "night_code": "1",
        "night_condition": "晴",
        "pop": "0.35",
        "rain_fall": "1.2",
        "relative_humidity": "82",
        "wind_direction": "西南",
        "wind_kph": "3.0",
        "wind_mph": "4.8",
        "wind_scale": "1"
      },
      {
        "date": {
          "day": "2",
          "month": "9",
          "weekday": "4",
          "year": "2021"
        },
        "day_code": "4",
        "day_condition": "多云",
        "high": {
          "celsius": "31",
          "fahrenheit": "87"
        },
        "low": {
          "celsius": "19",
          "fahrenheit": "66"
        },
        "night_code": "1",
        "night_condition": "晴",
        "pop": "0.34",
        "rain_fall": "1.2",
        "relative_humidity": "76",
        "wind_direction": "南",
        "wind_kph": "3.0",
        "wind_mph": "4.8",
        "wind_scale": "1"
      },
      {
        "date": {
          "day": "3",
          "month": "9",
          "weekday": "5",
          "year": "2021"
        },
        "day_code": "13",
        "day_condition": "小雨",
        "high": {
          "celsius": "31",
          "fahrenheit": "87"
        },
        "low": {
          "celsius": "20",
          "fahrenheit": "68"
        },
        "night_code": "13",
        "night_condition": "小雨",
        "pop": "0.35",
        "rain_fall": "1.2",
        "relative_humidity": "82",
        "wind_direction": "东",
        "wind_kph": "8.4",
        "wind_mph": "13.4",
        "wind_scale": "2"
      },
      {
        "date": {
          "day": "4",
          "month": "9",
          "weekday": "6",
          "year": "2021"
        },
        "day_code": "13",
        "day_condition": "小雨",
        "high": {
          "celsius": "26",
          "fahrenheit": "78"
        },
        "low": {
          "celsius": "19",
          "fahrenheit": "66"
        },
        "night_code": "13",
        "night_condition": "小雨",
        "pop": "0.96",
        "rain_fall": "5.7",
        "relative_humidity": "90",
        "wind_direction": "东南",
        "wind_kph": "3.0",
        "wind_mph": "4.8",
        "wind_scale": "1"
      },
      {
        "date": {
          "day": "5",
          "month": "9",
          "weekday": "7",
          "year": "2021"
        },
        "day_code": "9",
        "day_condition": "阴",
        "high": {
          "celsius": "22",
          "fahrenheit": "71"
        },
        "low": {
          "celsius": "17",
          "fahrenheit": "62"
        },
        "night_code": "13",
        "night_condition": "小雨",
        "pop": "0.37",
        "rain_fall": "1.2",
        "relative_humidity": "95",
        "wind_direction": "东",
        "wind_kph": "8.4",
        "wind_mph": "13.4",
        "wind_scale": "2"
      }
    ],
    "hourly_forecast": [
      {
        "code": "4",
        "forecast_time": {
          "day": "26",
          "hour": "13",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "42",
        "temperature": {
          "celsius": "26",
          "fahrenheit": "78"
        },
        "weather": "多云",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "4",
        "forecast_time": {
          "day": "26",
          "hour": "14",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "47",
        "temperature": {
          "celsius": "26",
          "fahrenheit": "78"
        },
        "weather": "多云",
        "wind_direction": "东南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "4",
        "forecast_time": {
          "day": "26",
          "hour": "15",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "50",
        "temperature": {
          "celsius": "28",
          "fahrenheit": "82"
        },
        "weather": "多云",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "4",
        "forecast_time": {
          "day": "26",
          "hour": "16",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "57",
        "temperature": {
          "celsius": "28",
          "fahrenheit": "82"
        },
        "weather": "多云",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "4",
        "forecast_time": {
          "day": "26",
          "hour": "17",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "62",
        "temperature": {
          "celsius": "27",
          "fahrenheit": "80"
        },
        "weather": "多云",
        "wind_direction": "南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "4",
        "forecast_time": {
          "day": "26",
          "hour": "18",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "67",
        "temperature": {
          "celsius": "26",
          "fahrenheit": "78"
        },
        "weather": "多云",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "26",
          "hour": "19",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "71",
        "temperature": {
          "celsius": "26",
          "fahrenheit": "78"
        },
        "weather": "晴",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "26",
          "hour": "20",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "73",
        "temperature": {
          "celsius": "25",
          "fahrenheit": "77"
        },
        "weather": "晴",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "26",
          "hour": "21",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "76",
        "temperature": {
          "celsius": "24",
          "fahrenheit": "75"
        },
        "weather": "晴",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "26",
          "hour": "22",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "78",
        "temperature": {
          "celsius": "23",
          "fahrenheit": "73"
        },
        "weather": "晴",
        "wind_direction": "西",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "26",
          "hour": "23",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "4",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "82",
        "temperature": {
          "celsius": "22",
          "fahrenheit": "71"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "27",
          "hour": "0",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "85",
        "temperature": {
          "celsius": "21",
          "fahrenheit": "69"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "27",
          "hour": "1",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "86",
        "temperature": {
          "celsius": "20",
          "fahrenheit": "68"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "27",
          "hour": "2",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "86",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "66"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "27",
          "hour": "3",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "85",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "66"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "27",
          "hour": "4",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "85",
        "temperature": {
          "celsius": "18",
          "fahrenheit": "64"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "1",
        "forecast_time": {
          "day": "27",
          "hour": "5",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "83",
        "temperature": {
          "celsius": "18",
          "fahrenheit": "64"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "0",
        "forecast_time": {
          "day": "27",
          "hour": "6",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "80",
        "temperature": {
          "celsius": "18",
          "fahrenheit": "64"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "0",
        "forecast_time": {
          "day": "27",
          "hour": "7",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "74",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "66"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "0",
        "forecast_time": {
          "day": "27",
          "hour": "8",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "63",
        "temperature": {
          "celsius": "22",
          "fahrenheit": "71"
        },
        "weather": "晴",
        "wind_direction": "西北",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "0",
        "forecast_time": {
          "day": "27",
          "hour": "9",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "56",
        "temperature": {
          "celsius": "22",
          "fahrenheit": "71"
        },
        "weather": "晴",
        "wind_direction": "西",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "0",
        "forecast_time": {
          "day": "27",
          "hour": "10",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "51",
        "temperature": {
          "celsius": "23",
          "fahrenheit": "73"
        },
        "weather": "晴",
        "wind_direction": "西南",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      },
      {
        "code": "0",
        "forecast_time": {
          "day": "27",
          "hour": "11",
          "minute": "0",
          "month": "8",
          "second": "0",
          "weekday": "5",
          "year": "2021"
        },
        "pop": "",
        "relative_humidity": "47",
        "temperature": {
          "celsius": "24",
          "fahrenheit": "75"
        },
        "weather": "晴",
        "wind_direction": "东",
        "wind_kph": "10",
        "wind_mph": "16.0",
        "wind_scale": "2"
      }
    ],
    "life_suggestion": {
      "air_pollution": {
        "brief": "中",
        "detail": "气象条件对空气污染物稀释、扩散和清除无明显影响,易感人群应适当减少室外活动时间。"
      },
      "car_washing": {
        "brief": "较适宜",
        "detail": "较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"
      },
      "dressing": {
        "brief": "热",
        "detail": "天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"
      },
      "fishing": {
        "brief": "适宜",
        "detail": "白天风和日丽,适宜垂钓,渺渺蓝天,悠悠白云将陪伴你度过愉快的垂钓时光。"
      },
      "flu": {
        "brief": "少发",
        "detail": "各项气象条件适宜,无明显降温过程,发生感冒机率较低。"
      },
      "makeup": {
        "brief": "去油防晒",
        "detail": "建议用蜜质SPF20面霜打底,水质无油粉底霜。"
      },
      "sport": {
        "brief": "较适宜",
        "detail": "天气较好,但考虑气温较低,推荐您进行室内运动,若户外适当增减衣物并注意防晒。"
      },
      "ultra_violet": {
        "brief": "强",
        "detail": "紫外线辐射强,建议涂擦SPF20左右、PA++的防晒护肤品。避免在10点至14点暴露于日光下。"
      }
    },
    "location": {
      "coordinates": "39.99 116.4",
      "country": "CN",
      "detail": "朝阳,北京,中国",
      "name": "朝阳",
      "tz_long": "Asia/Shanghai"
    },
    "observation": {
      "code": "4",
      "feelslike_celsius": "27",
      "feelslike_fahrenheit": "80",
      "local_epoch": "1629951137",
      "observation_epoch": "1629949163",
      "relative_humidity": "36",
      "temperature_celsius": "28",
      "temperature_fahrenheit": "82",
      "visibility_km": "14.2",
      "visibility_mi": "22.7",
      "weather": "多云",
      "wind_direction": "西北",
      "wind_kph": "11.0",
      "wind_mph": "17.6",
      "wind_scale": "2"
    },
    "service_provider": {
      "name": "seniverse",
      "url": "https://www.seniverse.com/"
    },
    "sun_phase": {
      "sunrise": {
        "hour": "",
        "minute": ""
      },
      "sunset": {
        "hour": "",
        "minute": ""
      }
    }
  }
}2.(GET) 获取当前天气 
client to server: {client_to_server 前缀}/live
| Required Headers | 
|---|
| X-BytePower-Sign | 
| X-BytePower-Session-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
server to server: {server_to_server 前缀}/live
| Required Headers | 
|---|
| X-BytePower-Auth-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
http 请求参数
| 参数 | 含义 | 说明 | 示例 | 
|---|---|---|---|
| latitude | 经度 | standard 档位必填 | |
| longitude | 纬度 | standard 档位必填 | |
| locale | 语言地区 | 选填,目前支持两种 locale:“zh-Hans”简体中文,“en”英文 | 缺省值为"zh-Hans",即默认为中文地区 | 
3.(GET) 获取小时天气预报 
client to server: {client_to_server 前缀}/hourly
| Required Headers | 
|---|
| X-BytePower-Sign | 
| X-BytePower-Session-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
server to server: {server_to_server 前缀}/hourly
| Required Headers | 
|---|
| X-BytePower-Auth-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
http 请求参数
| 参数 | 含义 | 说明 | 示例 | 
|---|---|---|---|
| latitude | 经度 | standard 档位必填 | |
| longitude | 纬度 | standard 档位必填 | |
| locale | 语言地区 | 选填,目前支持两种 locale:“zh-Hans”简体中文,“en”英文 | 缺省值为"zh-Hans",即默认为中文地区 | 
4.(GET) 获取每日天气预报 
client to server: {client_to_server 前缀}/daily
| Required Headers | 
|---|
| X-BytePower-Sign | 
| X-BytePower-Session-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
server to server: {server_to_server 前缀}/daily
| Required Headers | 
|---|
| X-BytePower-Auth-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
http 请求参数
| 参数 | 含义 | 说明 | 示例 | 
|---|---|---|---|
| latitude | 经度 | standard 档位必填 | |
| longitude | 纬度 | standard 档位必填 | |
| locale | 语言地区 | 选填,目前支持两种 locale:“zh-Hans”简体中文,“en”英文 | 缺省值为"zh-Hans",即默认为中文地区 | 
5.(GET) 获取空气质量指数 (locale=en 地区暂不支持) 
client to server: {client_to_server 前缀}/air
| Required Headers | 
|---|
| X-BytePower-Sign | 
| X-BytePower-Session-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
server to server: {server_to_server 前缀}/air
| Required Headers | 
|---|
| X-BytePower-Auth-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
http 请求参数
| 参数 | 含义 | 说明 | 示例 | 
|---|---|---|---|
| latitude | 经度 | standard 档位必填 | |
| longitude | 纬度 | standard 档位必填 | |
| locale | 语言地区 | 选填,目前支持两种 locale:“zh-Hans”简体中文,“en”英文 | 缺省值为"zh-Hans",即默认为中文地区 | 
6.(GET) 获取生活指数 (locale=en 地区暂不支持) 
client to server: {client_to_server 前缀}/suggestion
| Required Headers | 
|---|
| X-BytePower-Sign | 
| X-BytePower-Session-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
server to server: {server_to_server 前缀}/suggestion
| Required Headers | 
|---|
| X-BytePower-Auth-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
http 请求参数
| 参数 | 含义 | 说明 | 示例 | 
|---|---|---|---|
| latitude | 经度 | standard 档位必填 | |
| longitude | 纬度 | standard 档位必填 | |
| locale | 语言地区 | 选填,目前支持两种 locale:“zh-Hans”简体中文,“en”英文 | 缺省值为"zh-Hans",即默认为中文地区 | 
7.(GET) 获取过去 24 小时天气信息 
特殊说明:因第三方(OpenWeatherMap)数据缺失,locale=en 的 response 中没有地区(location)信息
返回的过去 24 小时逐小时天气数组由过去第 1 个小时,过去第 2 个小时,一直到过去第 24 个小时顺序排列。
client to server: {client_to_server 前缀}/history_24h
| Required Headers | 
|---|
| X-BytePower-Sign | 
| X-BytePower-Session-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
server to server: {server_to_server 前缀}/history_24h
| Required Headers | 
|---|
| X-BytePower-Auth-Token | 
| economical 档位必需报头 | 
|---|
| X-Forwarded-For | 
http 请求参数
| 参数 | 含义 | 说明 | 示例 | 
|---|---|---|---|
| latitude | 经度 | standard 档位必填 | |
| longitude | 纬度 | standard 档位必填 | |
| locale | 语言地区 | 选填,目前支持两种 locale:“zh-Hans”简体中文,“en”英文 | 缺省值为"zh-Hans",即默认为中文地区 | 
示例输出:
{
  "weather": {
    "history_24h": [
      {
        "code": "10d",
        "feelslike_celsius": {
          "celsius": "25",
          "fahrenheit": "77"
        },
        "pressure": "1007",
        "relative_humidity": "69",
        "temperature": {
          "celsius": "24",
          "fahrenheit": "76"
        },
        "timestamp": {
          "day": "9",
          "hour": "13",
          "month": "9",
          "year": "2021"
        },
        "weather": "Rain"
      },
      {
        "code": "10d",
        "feelslike_celsius": {
          "celsius": "25",
          "fahrenheit": "77"
        },
        "pressure": "1007",
        "relative_humidity": "69",
        "temperature": {
          "celsius": "24",
          "fahrenheit": "76"
        },
        "timestamp": {
          "day": "9",
          "hour": "12",
          "month": "9",
          "year": "2021"
        },
        "weather": "Rain"
      },
      {
        "code": "04d",
        "feelslike_celsius": {
          "celsius": "26",
          "fahrenheit": "79"
        },
        "pressure": "1007",
        "relative_humidity": "65",
        "temperature": {
          "celsius": "25",
          "fahrenheit": "78"
        },
        "timestamp": {
          "day": "9",
          "hour": "11",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clouds"
      },
      {
        "code": "04d",
        "feelslike_celsius": {
          "celsius": "24",
          "fahrenheit": "75"
        },
        "pressure": "1007",
        "relative_humidity": "73",
        "temperature": {
          "celsius": "23",
          "fahrenheit": "75"
        },
        "timestamp": {
          "day": "9",
          "hour": "10",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clouds"
      },
      {
        "code": "50d",
        "feelslike_celsius": {
          "celsius": "22",
          "fahrenheit": "72"
        },
        "pressure": "1006",
        "relative_humidity": "94",
        "temperature": {
          "celsius": "21",
          "fahrenheit": "71"
        },
        "timestamp": {
          "day": "9",
          "hour": "9",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "11d",
        "feelslike_celsius": {
          "celsius": "20",
          "fahrenheit": "68"
        },
        "pressure": "1005",
        "relative_humidity": "94",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "timestamp": {
          "day": "9",
          "hour": "8",
          "month": "9",
          "year": "2021"
        },
        "weather": "Thunderstorm"
      },
      {
        "code": "50d",
        "feelslike_celsius": {
          "celsius": "20",
          "fahrenheit": "68"
        },
        "pressure": "1006",
        "relative_humidity": "94",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "timestamp": {
          "day": "9",
          "hour": "7",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "11d",
        "feelslike_celsius": {
          "celsius": "21",
          "fahrenheit": "70"
        },
        "pressure": "1008",
        "relative_humidity": "88",
        "temperature": {
          "celsius": "20",
          "fahrenheit": "69"
        },
        "timestamp": {
          "day": "9",
          "hour": "6",
          "month": "9",
          "year": "2021"
        },
        "weather": "Thunderstorm"
      },
      {
        "code": "50n",
        "feelslike_celsius": {
          "celsius": "20",
          "fahrenheit": "69"
        },
        "pressure": "1006",
        "relative_humidity": "100",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "timestamp": {
          "day": "9",
          "hour": "5",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "50n",
        "feelslike_celsius": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "pressure": "1007",
        "relative_humidity": "100",
        "temperature": {
          "celsius": "18",
          "fahrenheit": "66"
        },
        "timestamp": {
          "day": "9",
          "hour": "4",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "50n",
        "feelslike_celsius": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "pressure": "1008",
        "relative_humidity": "100",
        "temperature": {
          "celsius": "18",
          "fahrenheit": "66"
        },
        "timestamp": {
          "day": "9",
          "hour": "3",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "50n",
        "feelslike_celsius": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "pressure": "1008",
        "relative_humidity": "100",
        "temperature": {
          "celsius": "18",
          "fahrenheit": "66"
        },
        "timestamp": {
          "day": "9",
          "hour": "2",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "50n",
        "feelslike_celsius": {
          "celsius": "20",
          "fahrenheit": "68"
        },
        "pressure": "1008",
        "relative_humidity": "94",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "timestamp": {
          "day": "9",
          "hour": "1",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "50n",
        "feelslike_celsius": {
          "celsius": "20",
          "fahrenheit": "69"
        },
        "pressure": "1008",
        "relative_humidity": "100",
        "temperature": {
          "celsius": "19",
          "fahrenheit": "67"
        },
        "timestamp": {
          "day": "9",
          "hour": "0",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "50n",
        "feelslike_celsius": {
          "celsius": "21",
          "fahrenheit": "70"
        },
        "pressure": "1008",
        "relative_humidity": "94",
        "temperature": {
          "celsius": "20",
          "fahrenheit": "69"
        },
        "timestamp": {
          "day": "8",
          "hour": "23",
          "month": "9",
          "year": "2021"
        },
        "weather": "Mist"
      },
      {
        "code": "02n",
        "feelslike_celsius": {
          "celsius": "22",
          "fahrenheit": "72"
        },
        "pressure": "1009",
        "relative_humidity": "94",
        "temperature": {
          "celsius": "21",
          "fahrenheit": "71"
        },
        "timestamp": {
          "day": "8",
          "hour": "22",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clouds"
      },
      {
        "code": "02n",
        "feelslike_celsius": {
          "celsius": "22",
          "fahrenheit": "72"
        },
        "pressure": "1008",
        "relative_humidity": "94",
        "temperature": {
          "celsius": "21",
          "fahrenheit": "71"
        },
        "timestamp": {
          "day": "8",
          "hour": "21",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clouds"
      },
      {
        "code": "10n",
        "feelslike_celsius": {
          "celsius": "23",
          "fahrenheit": "74"
        },
        "pressure": "1008",
        "relative_humidity": "88",
        "temperature": {
          "celsius": "22",
          "fahrenheit": "73"
        },
        "timestamp": {
          "day": "8",
          "hour": "20",
          "month": "9",
          "year": "2021"
        },
        "weather": "Rain"
      },
      {
        "code": "09n",
        "feelslike_celsius": {
          "celsius": "25",
          "fahrenheit": "77"
        },
        "pressure": "1007",
        "relative_humidity": "73",
        "temperature": {
          "celsius": "24",
          "fahrenheit": "76"
        },
        "timestamp": {
          "day": "8",
          "hour": "19",
          "month": "9",
          "year": "2021"
        },
        "weather": "Rain"
      },
      {
        "code": "10d",
        "feelslike_celsius": {
          "celsius": "25",
          "fahrenheit": "78"
        },
        "pressure": "1007",
        "relative_humidity": "83",
        "temperature": {
          "celsius": "24",
          "fahrenheit": "76"
        },
        "timestamp": {
          "day": "8",
          "hour": "18",
          "month": "9",
          "year": "2021"
        },
        "weather": "Rain"
      },
      {
        "code": "01d",
        "feelslike_celsius": {
          "celsius": "28",
          "fahrenheit": "82"
        },
        "pressure": "1006",
        "relative_humidity": "65",
        "temperature": {
          "celsius": "26",
          "fahrenheit": "80"
        },
        "timestamp": {
          "day": "8",
          "hour": "17",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clear"
      },
      {
        "code": "01d",
        "feelslike_celsius": {
          "celsius": "26",
          "fahrenheit": "79"
        },
        "pressure": "1006",
        "relative_humidity": "78",
        "temperature": {
          "celsius": "25",
          "fahrenheit": "78"
        },
        "timestamp": {
          "day": "8",
          "hour": "16",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clear"
      },
      {
        "code": "01d",
        "feelslike_celsius": {
          "celsius": "29",
          "fahrenheit": "84"
        },
        "pressure": "1006",
        "relative_humidity": "57",
        "temperature": {
          "celsius": "27",
          "fahrenheit": "82"
        },
        "timestamp": {
          "day": "8",
          "hour": "15",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clear"
      },
      {
        "code": "01d",
        "feelslike_celsius": {
          "celsius": "30",
          "fahrenheit": "86"
        },
        "pressure": "1006",
        "relative_humidity": "54",
        "temperature": {
          "celsius": "28",
          "fahrenheit": "84"
        },
        "timestamp": {
          "day": "8",
          "hour": "14",
          "month": "9",
          "year": "2021"
        },
        "weather": "Clear"
      }
    ],
    "service_provider": {
      "name": "open weather map",
      "url": "https://openweathermap.org"
    }
  }
}
 优化:使用 zlib 进行简单的压缩。 