package com.way.weather.plugin.spider;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.way.weather.plugin.bean.AQI;
import com.way.weather.plugin.bean.Alerts;
import com.way.weather.plugin.bean.Alerts.Alert;
import com.way.weather.plugin.bean.Forecast;
import com.way.weather.plugin.bean.Index;
import com.way.weather.plugin.bean.IndexDetail;
import com.way.weather.plugin.bean.RealTime;
public class WeatherController {
public static AQI convertToNewAQI(JSONObject aqiJSONObject,
String language, String pid) throws JSONException {
AQI aqi = new AQI();
aqi.setCity_code(pid);
aqi.setPub_time(getAQITime(aqiJSONObject.getString("pub_time")));
int aqiValue = WeatherUtilities.getAqi(aqiJSONObject.getString("aqi"));
aqi.setAqi(aqiValue);
aqi.setPm25(WeatherUtilities.getAqi(aqiJSONObject.getString("pm25")));
aqi.setPm10(WeatherUtilities.getAqi(aqiJSONObject.getString("pm10")));
aqi.setNo2(WeatherUtilities.getAqi(aqiJSONObject.getString("no2")));
aqi.setSo2(WeatherUtilities.getAqi(aqiJSONObject.getString("so2")));
aqi.setCo(WeatherConstants.NO_VALUE_FLAG);
aqi.setO3(WeatherConstants.NO_VALUE_FLAG);
aqi.setAqi_level(WeatherUtilities.getAqiLevel(aqiValue, language));
aqi.setAqi_desc(WeatherUtilities.getAqiDesc(aqiValue, language));
aqi.setSource(WeatherUtilities.getAQISource(language));
aqi.setSpot(aqiJSONObject.getString("spot"));
return aqi;
}
public static Alerts convertToNewAlert(JSONArray alertJSONArray,
String language) throws JSONException {
ArrayList<Alert> alertLists = new ArrayList<Alert>();
Alerts alerts = new Alerts();
for (int i = 0; i < alertJSONArray.length(); ++i) {
JSONObject jsonObject = alertJSONArray.getJSONObject(i);
Alerts.Alert alert = new Alerts.Alert();
alert.setAbnormal(jsonObject.getString("abnormal"));
alert.setDetail(jsonObject.getString("detail"));
alert.setHoliday(jsonObject.getString("holiday"));
alert.setLevel(jsonObject.getString("level"));
alert.setPubTime(Long.valueOf(jsonObject.getLong("pub_time")));
alert.setTitle(jsonObject.getString("title"));
alertLists.add(alert);
}
alerts.setPid(language);
alerts.setArryAlert(alertLists);
return alerts;
}
public static Forecast convertToNewForecast(JSONObject forecastJSONObject,
String language, String pid) throws JSONException,
NumberFormatException {
Forecast forecast = new Forecast();
JSONObject forcastJSONObject = forecastJSONObject
.getJSONObject("forecast");
// JSONObject todayJSONObject =
// forecastJSONObject.getJSONObject("today");
JSONObject yestodayJSONObject = forecastJSONObject
.getJSONObject("yestoday");
forecast.setPid(pid);
forecast.setWinds(0, "");
for (int i = 1; i < Forecast.DAY_NUM; i++) {
forecast.setWinds(i, WeatherUtilities.getWind(
forcastJSONObject.getString("fx" + (i > 2 ? 2 : i)),
forcastJSONObject.getString("fl" + i), language));
}
WeatherUtilities.WeatherName[] weatherName = new WeatherUtilities.WeatherName[5];
for (int i = 1; i < Forecast.DAY_NUM; i++) {
weatherName[i - 1] = WeatherUtilities.getWeatherName(
forcastJSONObject.getString("weather" + i), language);
}
for (int i = 1; i < Forecast.DAY_NUM; i++) {
forecast.setWeatherNames(i, weatherName[i - 1].getName());
}
forecast.setWeatherNames(0, yestodayJSONObject.getString("weatherEnd"));
forecast.setWeatherNamesFrom(
0,
WeatherUtilities.getWeatherName(
yestodayJSONObject.getString("weatherStart"), language)
.getFrom());
for (int i = 1; i < Forecast.DAY_NUM; i++) {
forecast.setWeatherNamesFrom(i, weatherName[i - 1].getFrom());
}
forecast.setWeatherNamesTo(
0,
WeatherUtilities.getWeatherName(
yestodayJSONObject.getString("weatherEnd"), language)
.getTo());
for (int i = 1; i < Forecast.DAY_NUM; i++) {
forecast.setWeatherNamesTo(i, weatherName[i - 1].getTo());
}
long forcastTime = getForcastTime(forcastJSONObject.getString("date_y")
+ " " + forcastJSONObject.getString("fchh"));
forecast.setPubtime(forcastTime);
int[] forecastTemps = new int[12];
for (int i = 0; i < (Forecast.DAY_NUM - 1); ++i) {
String[] temps = forcastJSONObject.getString("temp" + (i + 1))
.split("~");
String[] minTemp = temps[0].split("℃");
String[] maxTemp = temps[1].split("℃");
forecastTemps[(i * 2)] = Integer.parseInt(minTemp[0]);
forecastTemps[(1 + i * 2)] = Integer.parseInt(maxTemp[0]);
}
forecast.setTmpHighs(0, yestodayJSONObject.getInt("tempMax"));
forecast.setTmpLows(0, yestodayJSONObject.getInt("tempMin"));
for (int i = 0; i < (Forecast.DAY_NUM - 1); ++i) {
forecast.setTmpHighs(i + 1, forecastTemps[(i * 2)]);
forecast.setTmpLows(i + 1, forecastTemps[(1 + i * 2)]);
}
forecast.setType(0, WeatherUtilities
.getAnimationType(yestodayJSONObject.getString("weatherEnd")));
for (int i = 1; i < Forecast.DAY_NUM; i++) {
forecast.setType(i, WeatherUtilities
.getAnimationType(forcastJSONObject
.getString("weather" + i)));
}
// for (int i = 0; i < Forecast.DAY_NUM; ++i)
// forecast.setSunrise(i, WeatherConstants.NO_VALUE_FLAG);
// for (int i = 0; i < Forecast.DAY_NUM; ++i)
// forecast.setSunset(i, WeatherConstants.NO_VALUE_FLAG);
for (int i = 0; i < Forecast.DAY_NUM; ++i)
forecast.setPressures(i, WeatherConstants.NO_VALUE_FLAG);
for (int i = 0; i < Forecast.DAY_NUM; ++i)
forecast.setHumiditys(i, WeatherConstants.NO_VALUE_FLAG);
JSONArray jsonArray = forecastJSONObject.getJSONObject("accu_f5")
.getJSONArray("DailyForecasts");
for (int i = 1; i < Forecast.DAY_NUM; ++i) {
forecast.setSunrise(
i,
Long.valueOf(jsonArray.getJSONObject(i - 1).getString(
"Sun_EpochRise")));
forecast.setSunset(
i,
Long.valueOf(jsonArray.getJSONObject(i - 1).getString(
"Sun_EpochSet")));
}
return forecast;
}
public static Index convertToNewIndex(JSONObject indexInfo,
String language, String pid) throws JSONException {
Index index = new Index();
index.setCity_code(pid);
JSONObject indexJSONObject = indexInfo.getJSONObject("forecast");
ArrayList<IndexDetail> indexDetailLists = new ArrayList<IndexDetail>();
IndexDetail windIndexDetail = new IndexDetail();
windIndexDetail.setDesc(WeatherUtilities.getWind(
indexJSONObject.getString("fx1"),
indexJSONObject.getString("fl1"), language));
windIndexDetail.setTitle(WeatherUtilities.getIndexTitle(
WeatherConstants.WIND_LEVEL_INDEX, language));
windIndexDetail.setDetail(WeatherUtilities.getWindIndexDetail(
indexJSONObject.getString("fl1"), language));
windIndexDetail.setType(WeatherUtilities
.getIndexType(WeatherConstants.WIND_LEVEL_INDEX));
indexDetailLists.add(windIndexDetail);
for (Map.Entry<String, String> entry : WeatherConstants.INDEX_OLD
.entrySet()) {
String key = entry.getKey();
IndexDetail indexDetail = new IndexDetail();
indexDetail.setType(WeatherUtilities.getIndexType(key).intValue());
indexDetail.setTitle(WeatherUtilities.getIndexTitle(key, language));
String indexValue = indexJSONObject
.getString(WeatherConstants.INDEX_OLD.get(key));
indexDetail.setDesc(WeatherUtilities.getIndexDesc(key, indexValue,
language));
indexDetail.setDetail(WeatherUtilities.getIndexDetail(key,
indexValue, language));
indexDetailLists.add(indexDetail);
}
index.setIndex(indexDetailLists);
return index;
}
public static RealTime convertToNewRealTime(JSONObject realTimeJSONObject,
String language, String pid) throws JSONException {
RealTime realTime = new RealTime();
realTime.setCity_code(pid);
realTime.setPub_time(parseTime(realTimeJSONObject.getString("time")));
realTime.setTemp(WeatherUtilities.getIntFromJSON(realTimeJSONObject,
"temp"));
realTime.setWind(WeatherUtilities.getWind(
realTimeJSONObject.getString("WD"),
realTimeJSONObject.getString("WS"), language));
realTime.setAnimation_type(WeatherUtilities
.getAnimationType(realTimeJSONObject.getString("weather")));
realTime.setHumidity(WeatherUtilities.getHumidity(realTimeJSONObject
.getString("SD")));
realTime.setRising_tide(WeatherConstants.NO_VALUE_FLAG);
realTime.setFalling_tide(WeatherConstants.NO_VALUE_FLAG);
realTime.setPressure(WeatherConstants.NO_VALUE_FLAG);
realTime.setWater(WeatherConstants.NO_VALUE_FLAG);
realTime.setWeather_name(WeatherUtilities.getWeatherName(
realTimeJSONObject.getString("weather"), language).getName());
return realTime;
}
private static long getAQITime(String timeStr) {
long aqiTime = -7754570281926000640L;
try {
aqiTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(timeStr)
.getTime();
} catch (ParseException e) {
}
return aqiTime;
}
private static long getForcastTime(String timeStr) {
long forcastTime = -7754570281926000640L;
try {
forcastTime = new SimpleDateFormat("yyyy年M月d日 HH").parse(timeStr)
.getTime();
} catch (ParseException e) {
}
return forcastTime;
}
private static long parseTime(String timeStr) {
String[] times = timeStr.split(":");
int hour = Integer.parseInt(times[0]);
int minute = Integer.parseInt(times[1]);
Long localTime = Calendar.getInstance().getTimeInMillis();
if (hour - Calendar.getInstance().get(11) > 2)
localTime = Long.valueOf(localTime.longValue() - 24 * 60 * 60
* 1000L);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(localTime.longValue());
calendar.set(11, hour);
calendar.set(12, minute);
return calendar.getTimeInMillis();
}
}