 | |  |  | 苹果iOS 脚本天气信息查询工具
- /**
- * AIWROK软件苹果iOS - 天气信息查询工具
- * 交流QQ群711841924 | 苹果内测QQ群648461709
- *
- * 功能特点:
- * 1. 支持多个城市查询
- * 2. 自动重试机制
- * 3. 友好的格式化输出
- * 4. 完整的错误处理
- */
- // =============================================================================
- // 配置区域
- // =============================================================================
- var WEATHER_CONFIG = {
- // 默认查询城市(可以修改为你所在的城市)
- defaultCity: "北京",
-
- // API超时时间(毫秒)
- timeout: 5000,
-
- // 最大重试次数
- maxRetries: 3
- };
- // =============================================================================
- // 核心功能函数
- // =============================================================================
- /**
- * 获取指定城市的天气信息
- * @param {String} city - 城市名称
- * @returns {Object|null} 天气数据对象或null
- */
- function getWeatherInfo(city) {
- printl("🌤️ 正在查询 [" + city + "] 的天气信息...");
-
- var http = new OkHttp();
-
- // 设置超时时间
- http.setTimeout(WEATHER_CONFIG.timeout, WEATHER_CONFIG.timeout, WEATHER_CONFIG.timeout);
-
- // 设置请求头
- http.setHeader("User-Agent", "AIWROK-Weather/1.0");
- http.setHeader("Accept", "application/json");
- http.setCharset("UTF-8");
-
- // 使用免费的天气API(Open-Meteo,无需API Key)
- // 注意:这里需要先获取城市坐标,为简化示例,我们使用固定坐标
- var coordinates = getCityCoordinates(city);
-
- if (!coordinates) {
- printl("❌ 未找到城市 [" + city + "] 的坐标信息");
- return null;
- }
-
- var apiUrl = "https://api.open-meteo.com/v1/forecast?latitude=" +
- coordinates.lat + "&longitude=" + coordinates.lon +
- "¤t=temperature_2m,relative_humidity_2m,apparent_temperature," +
- "weather_code,wind_speed_10m&daily=temperature_2m_max,temperature_2m_min" +
- "&timezone=auto&forecast_days=3";
-
- try {
- printl("📡 发送请求到天气服务器...");
- var startTime = new Date().getTime();
- var response = http.get(apiUrl);
- var endTime = new Date().getTime();
- var duration = endTime - startTime;
-
- if (!response || response.length === 0) {
- printl("❌ 服务器返回空响应");
- return null;
- }
-
- printl("⏱️ 响应时间: " + duration + "ms");
-
- // 解析JSON响应
- var weatherData = JSON.parse(response);
-
- if (!weatherData || !weatherData.current) {
- printl("❌ 响应数据格式异常");
- return null;
- }
-
- return {
- city: city,
- current: weatherData.current,
- daily: weatherData.daily,
- fetchTime: new Date().toLocaleString()
- };
-
- } catch (error) {
- var errorMsg = error.toString();
- printl("❌ 请求失败: " + errorMsg.substring(0, 100));
-
- if (errorMsg.indexOf('timeout') > -1) {
- printl(" 原因: 连接超时,请检查网络");
- } else if (errorMsg.indexOf('SSL') > -1) {
- printl(" 原因: SSL证书问题");
- }
-
- return null;
- }
- }
- /**
- * 获取城市坐标(简化版,仅包含常见城市)
- * @param {String} city - 城市名称
- * @returns {Object|null} 包含lat和lon的对象
- */
- function getCityCoordinates(city) {
- var cityMap = {
- "北京": { lat: 39.9042, lon: 116.4074 },
- "上海": { lat: 31.2304, lon: 121.4737 },
- "广州": { lat: 23.1291, lon: 113.2644 },
- "深圳": { lat: 22.5431, lon: 114.0579 },
- "成都": { lat: 30.5728, lon: 104.0668 },
- "杭州": { lat: 30.2741, lon: 120.1551 },
- "武汉": { lat: 30.5928, lon: 114.3055 },
- "西安": { lat: 34.3416, lon: 108.9398 },
- "南京": { lat: 32.0603, lon: 118.7969 },
- "重庆": { lat: 29.4316, lon: 106.9123 }
- };
-
- return cityMap[city] || null;
- }
- /**
- * 格式化天气代码为中文描述
- * @param {Number} code - WMO天气代码
- * @returns {String} 天气描述
- */
- function formatWeatherCode(code) {
- var weatherMap = {
- 0: "晴朗 ☀️",
- 1: "主要晴朗 🌤️",
- 2: "部分多云 ⛅",
- 3: "阴天 ☁️",
- 45: "雾 🌫️",
- 48: "雾凇 🌫️",
- 51: "毛毛雨 🌦️",
- 53: "中度毛毛雨 🌧️",
- 55: "大毛毛雨 🌧️",
- 61: "小雨 🌧️",
- 63: "中雨 🌧️",
- 65: "大雨 🌧️",
- 71: "小雪 ❄️",
- 73: "中雪 ❄️",
- 75: "大雪 ❄️",
- 95: "雷雨 ⛈️",
- 96: "雷阵雨伴冰雹 ⛈️",
- 99: "强雷阵雨伴冰雹 ⛈️"
- };
-
- return weatherMap[code] || "未知天气 (" + code + ")";
- }
- /**
- * 格式化并显示天气信息
- * @param {Object} weatherData - 天气数据对象
- */
- function displayWeatherInfo(weatherData) {
- if (!weatherData) {
- printl("❌ 没有可显示的天气数据");
- return;
- }
-
- printl("\n" + "=".repeat(50));
- printl("🌍 天气报告 - " + weatherData.city);
- printl("📅 查询时间: " + weatherData.fetchTime);
- printl("=".repeat(50));
-
- // 当前天气
- var current = weatherData.current;
- printl("\n📊 当前天气:");
- printl(" 温度: " + current.temperature_2m + "°C");
- printl(" 体感温度: " + current.apparent_temperature + "°C");
- printl(" 湿度: " + current.relative_humidity_2m + "%");
- printl(" 风速: " + current.wind_speed_10m + " km/h");
- printl(" 天气状况: " + formatWeatherCode(current.weather_code));
-
- // 未来几天预报
- if (weatherData.daily && weatherData.daily.time) {
- printl("\n📅 未来天气预报:");
- var times = weatherData.daily.time;
- var maxTemps = weatherData.daily.temperature_2m_max;
- var minTemps = weatherData.daily.temperature_2m_min;
-
- for (var i = 0; i < Math.min(times.length, 3); i++) {
- var dateStr = times[i];
- var maxTemp = maxTemps[i];
- var minTemp = minTemps[i];
-
- printl(" " + dateStr + ": " + minTemp + "°C ~ " + maxTemp + "°C");
- }
- }
-
- printl("=".repeat(50) + "\n");
- }
- /**
- * 带重试机制的天气查询
- * @param {String} city - 城市名称
- * @param {Number} retries - 剩余重试次数
- * @returns {Object|null} 天气数据
- */
- function getWeatherWithRetry(city, retries) {
- if (retries === undefined) {
- retries = WEATHER_CONFIG.maxRetries;
- }
-
- for (var attempt = 1; attempt <= retries; attempt++) {
- printl("\n--- 第 " + attempt + "/" + retries + " 次尝试 ---");
-
- var result = getWeatherInfo(city);
-
- if (result) {
- printl("✅ 成功获取天气数据");
- return result;
- }
-
- if (attempt < retries) {
- printl("⚠️ 准备重试...");
- // 短暂延迟后重试(注释掉可能不存在的sleep函数)
- // sleep.millisecond(1000);
- }
- }
-
- printl("❌ 经过 " + retries + " 次尝试后仍然失败");
- return null;
- }
- /**
- * 批量查询多个城市天气
- * @param {Array} cities - 城市名称数组
- */
- function queryMultipleCities(cities) {
- printl("\n🌐 开始批量查询 " + cities.length + " 个城市的天气\n");
-
- var results = [];
-
- for (var i = 0; i < cities.length; i++) {
- var city = cities[i];
- printl("\n[" + (i + 1) + "/" + cities.length + "] 查询: " + city);
-
- var weatherData = getWeatherWithRetry(city, 2);
-
- if (weatherData) {
- results.push(weatherData);
- displayWeatherInfo(weatherData);
- } else {
- printl("⚠️ 跳过城市: " + city);
- }
-
- // 避免频繁请求(注释掉可能不存在的sleep函数)
- // if (i < cities.length - 1) {
- // sleep.millisecond(500);
- // }
- }
-
- printl("\n📊 查询完成统计:");
- printl(" 总计: " + cities.length + " 个城市");
- printl(" 成功: " + results.length + " 个");
- printl(" 失败: " + (cities.length - results.length) + " 个");
-
- return results;
- }
- // =============================================================================
- // 主程序入口
- // =============================================================================
- function main() {
- printl("========================================");
- printl("🌤️ AIWROK 天气信息查询工具 v1.0");
- printl("适用于苹果iOS系统");
- printl("========================================\n");
-
- // 示例1: 查询单个城市
- printl("【示例1】查询单个城市天气");
- var singleCityWeather = getWeatherWithRetry(WEATHER_CONFIG.defaultCity);
- if (singleCityWeather) {
- displayWeatherInfo(singleCityWeather);
- }
-
- // 示例2: 批量查询多个城市
- printl("\n【示例2】批量查询多个城市天气");
- var cities = ["北京", "上海", "广州", "深圳"];
- var batchResults = queryMultipleCities(cities);
-
- // 示例3: 查询用户自定义城市
- printl("\n【示例3】查询其他城市");
- var otherCities = ["成都", "杭州", "武汉"];
- queryMultipleCities(otherCities);
-
- printl("\n========================================");
- printl("✅ 所有查询任务完成");
- printl("========================================");
- }
- // 执行主程序
- main();
复制代码
| |  | |  |
|