|
|
Æ»¹ûiOS½Å±¾ÌìÆøÐÅÏ¢²éѯ¹¤¾ß
- /**
- * AIWROKÈí¼þÆ»¹ûiOS - ÌìÆøÐÅÏ¢²éѯ¹¤¾ß
- * ½»Á÷QQȺ711841924 | Æ»¹ûÄÚ²âQQȺ648461709
- *
- * ¹¦ÄÜÌØµã£º
- * 1. Ö§³Ö¶à¸ö³ÇÊвéѯ
- * 2. ×Ô¶¯ÖØÊÔ»úÖÆ
- * 3. ÓѺõĸñʽ»¯Êä³ö
- * 4. ÍêÕûµÄ´íÎó´¦Àí
- */
- // =============================================================================
- // ÅäÖÃÇøÓò
- // =============================================================================
- var WEATHER_CONFIG = {
- // ĬÈϲéѯ³ÇÊУ¨¿ÉÒÔÐÞ¸ÄΪÄãËùÔڵijÇÊУ©
- 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();
¸´ÖÆ´úÂë
|
|