B2B网络软件
标题:
苹果iOS脚本天气信息查询工具
[打印本页]
作者:
YYPOST群发软件
时间:
1 小时前
标题:
苹果iOS脚本天气信息查询工具
苹果iOS脚本天气信息查询工具
3.png
(866.13 KB, 下载次数: 0)
下载附件
1 小时前
上传
/**
* 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();
复制代码
欢迎光临 B2B网络软件 (http://bbs.niubt.cn/)
Powered by Discuz! X3.2