Skip to content
This repository was archived by the owner on Nov 21, 2024. It is now read-only.

Commit 9ad011b

Browse files
committed
1
1 parent 41aacc7 commit 9ad011b

File tree

3 files changed

+24
-77
lines changed

3 files changed

+24
-77
lines changed

src/function/database.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export default {
2-
WeatherKit: {
2+
Weather: {
33
Settings: {
44
NextHour: {
55
Provider: "ColorfulClouds",

src/function/parseWeatherURL.mjs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { log } from "@nsnanocat/util";
2+
3+
export default function parseWeatherURL(url = new URL($request.url)) {
4+
log("☑️ parseWeatherURL", "");
5+
const WeatherRegExp = /^\/api\/(?<version>v1|v2|v3)\/(availability|weather)\/(?<language>\w+)(?:-\w+)?(-(?<country>[A-Z]{2}))?\/(?<latitude>-?\d+\.?\d*)\/(?<longitude>-?\d+\.?\d*)$/i;
6+
//const LanguageRegExp = /^(?<language>\w+(-\w+)?)-(?<country>[A-Z]{2})$/i;
7+
const Parameters = url?.pathname.match(WeatherKitRegExp)?.groups;
8+
const result = {
9+
"version": Parameters?.version,
10+
"language": Parameters?.language,
11+
"latitude": Parameters?.latitude,
12+
"longitude": Parameters?.longitude,
13+
"country": Parameters?.country || url?.searchParams?.get("country")
14+
};
15+
//log(JSON.stringify(result, null, 2), "");
16+
//const LanguageParameters = result.language.match(LanguageRegExp)?.groups;
17+
//result.language = LanguageParameters.language;
18+
//result.country = result.country || LanguageParameters.country
19+
log(`✅ parseWeatherURL\n🟧version: ${result.version} 🟧language: ${result.language} 🟧country: ${result.country}\n🟧latitude: ${result.latitude} 🟧longitude: ${result.longitude}\n`, "")
20+
return result;
21+
}

src/response.dev.js

Lines changed: 2 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ import { URL } from "@nsnanocat/url";
33
import database from "./function/database.mjs";
44
import setENV from "./function/setENV.mjs";
55
import providerNameToLogo from "./function/providerNameToLogo.mjs";
6-
import WeatherKit2 from "./class/WeatherKit2.mjs";
76
import WAQI from "./class/WAQI.mjs";
87
import ColorfulClouds from "./class/ColorfulClouds.mjs";
98
import QWeather from "./class/QWeather.mjs";
109
import AirQuality from "./class/AirQuality.mjs";
11-
import * as flatbuffers from "flatbuffers";
1210
/***************** Processing *****************/
1311
// 解构URL
1412
const url = new URL($request.url);
@@ -93,83 +91,11 @@ log(`⚠ FORMAT: ${FORMAT}`, "");
9391
case "application/grpc+proto":
9492
case "application/octet-stream": {
9593
//log(`🚧 $response: ${JSON.stringify($response, null, 2)}`, "");
96-
let rawBody = $app === "Quantumult X" ? new Uint8Array($response.bodyBytes ?? []) : ($response.body ?? new Uint8Array());
94+
const rawBody = $app === "Quantumult X" ? new Uint8Array($response.bodyBytes ?? []) : ($response.body ?? new Uint8Array());
9795
//log(`🚧 isBuffer? ${ArrayBuffer.isView(rawBody)}: ${JSON.stringify(rawBody)}`, "");
9896
switch (FORMAT) {
99-
case "application/vnd.apple.flatbuffer": {
100-
// 解析FlatBuffer
101-
const ByteBuffer = new flatbuffers.ByteBuffer(rawBody);
102-
const Builder = new flatbuffers.Builder();
103-
// 主机判断
104-
switch (HOST) {
105-
case "weatherkit.apple.com":
106-
// 路径判断
107-
if (PATH.startsWith("/api/v2/weather/")) {
108-
body = WeatherKit2.decode(ByteBuffer, "all");
109-
if (url.searchParams.get("dataSets").includes("airQuality")) {
110-
log(`🚧 body.airQuality: ${JSON.stringify(body?.airQuality, null, 2)}`, "");
111-
// InjectAirQuality
112-
if (Settings?.AQI?.ReplaceProviders?.includes(body?.airQuality?.metadata?.providerName)) body = await InjectAirQuality(url, body, Settings);
113-
// CompareAirQuality
114-
body = await CompareAirQuality(url, body, Settings);
115-
// PollutantUnitConverter
116-
switch (body?.airQuality?.metadata?.providerName?.split("\n")?.[0]) {
117-
case "和风天气":
118-
case "QWeather":
119-
if (body?.airQuality?.pollutants)
120-
body.airQuality.pollutants = body.airQuality.pollutants.map(pollutant => {
121-
switch (pollutant.pollutantType) {
122-
case "CO": // Fix CO amount units
123-
pollutant.units = "MILLIGRAMS_PER_CUBIC_METER";
124-
break;
125-
default:
126-
break;
127-
}
128-
return pollutant;
129-
});
130-
break;
131-
}
132-
// ConvertAirQuality
133-
if (Settings?.AQI?.Local?.ReplaceScales.includes(body?.airQuality?.scale.split(".")?.[0])) body = ConvertAirQuality(body, Settings);
134-
// Fix Convert units that does not supported in Apple Weather
135-
if (body?.airQuality?.pollutants) body.airQuality.pollutants = AirQuality.FixUnits(body.airQuality.pollutants);
136-
// ProviderLogo
137-
if (body?.airQuality?.metadata?.providerName && !body?.airQuality?.metadata?.providerLogo) body.airQuality.metadata.providerLogo = providerNameToLogo(body?.airQuality?.metadata?.providerName, "v2");
138-
}
139-
if (url.searchParams.get("dataSets").includes("currentWeather")) {
140-
if (body?.currentWeather?.metadata?.providerName && !body?.currentWeather?.metadata?.providerLogo) body.currentWeather.metadata.providerLogo = providerNameToLogo(body?.currentWeather?.metadata?.providerName, "v2");
141-
//log(`🚧 body.currentWeather: ${JSON.stringify(body?.currentWeather, null, 2)}`, "");
142-
}
143-
if (url.searchParams.get("dataSets").includes("forecastNextHour")) {
144-
log(`🚧 body.forecastNextHour: ${JSON.stringify(body?.forecastNextHour, null, 2)}`, "");
145-
if (!body?.forecastNextHour) body = await InjectForecastNextHour(url, body, Settings);
146-
if (body?.forecastNextHour?.metadata?.providerName && !body?.forecastNextHour?.metadata?.providerLogo) body.forecastNextHour.metadata.providerLogo = providerNameToLogo(body?.forecastNextHour?.metadata?.providerName, "v2");
147-
}
148-
if (url.searchParams.get("dataSets").includes("weatherAlerts")) {
149-
if (body?.weatherAlerts?.metadata?.providerName && !body?.weatherAlerts?.metadata?.providerLogo) body.weatherAlerts.metadata.providerLogo = providerNameToLogo(body?.weatherAlerts?.metadata?.providerName, "v2");
150-
log(`🚧 body.weatherAlerts: ${JSON.stringify(body?.weatherAlerts, null, 2)}`, "");
151-
}
152-
if (url.searchParams.get("dataSets").includes("WeatherChange")) {
153-
if (body?.WeatherChanges?.metadata?.providerName && !body?.WeatherChanges?.metadata?.providerLogo) body.WeatherChanges.metadata.providerLogo = providerNameToLogo(body?.WeatherChanges?.metadata?.providerName, "v2");
154-
log(`🚧 body.WeatherChanges: ${JSON.stringify(body?.WeatherChanges, null, 2)}`, "");
155-
}
156-
if (url.searchParams.get("dataSets").includes("trendComparison")) {
157-
if (body?.historicalComparisons?.metadata?.providerName && !body?.historicalComparisons?.metadata?.providerLogo) body.historicalComparisons.metadata.providerLogo = providerNameToLogo(body?.historicalComparisons?.metadata?.providerName, "v2");
158-
log(`🚧 body.historicalComparisons: ${JSON.stringify(body?.historicalComparisons, null, 2)}`, "");
159-
}
160-
if (url.searchParams.get("dataSets").includes("locationInfo")) {
161-
if (body?.locationInfo?.metadata?.providerName && !body?.locationInfo?.metadata?.providerLogo) body.locationInfo.metadata.providerLogo = providerNameToLogo(body?.locationInfo?.metadata?.providerName, "v2");
162-
log(`🚧 body.locationInfo: ${JSON.stringify(body?.locationInfo, null, 2)}`, "");
163-
}
164-
const WeatherData = WeatherKit2.encode(Builder, "all", body);
165-
Builder.finish(WeatherData);
166-
break;
167-
}
168-
break;
169-
}
170-
rawBody = Builder.asUint8Array(); // Of type `Uint8Array`.
97+
case "application/vnd.apple.flatbuffer":
17198
break;
172-
}
17399
case "application/protobuf":
174100
case "application/x-protobuf":
175101
case "application/vnd.google.protobuf":

0 commit comments

Comments
 (0)