package modules;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Scanner;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import bot.Config;
import bot.Message;
import bot.Module;
import bot.Server;
public class Weather implements Module {
@Override
public void parse(Message m) {
if(m.botCommand().equals("weather") || m.botCommand().equals("w")){
String target = m.param();
if(!m.param().startsWith("#")) target = m.sender();
if(m.hasBotParams()){
ArrayList<String> options = new ArrayList<String>();
String[] botParams = m.botParamsArray();
String query = "";
boolean isquery = false;
for(int i = 0; i < botParams.length; i++){
if(botParams[i].startsWith("-") && !isquery){
options.add(botParams[i].substring(1));
}
else{
isquery = true;
if(query.equals("")) query = botParams[i];
else query += "_" + botParams[i];
}
}
String apiurl = "http://api.wunderground.com/api/" + Config.getWeatherApiKey() + "/conditions/q/" + query + ".json";
try{
URL url = new URL(apiurl);
URLConnection urlc = url.openConnection();
urlc.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
urlc.addRequestProperty("User-Agent", "Mozilla");
urlc.connect();
Scanner scan = new Scanner(urlc.getInputStream());
String jsonstring = "";
while(scan.hasNext()){
jsonstring += scan.next() + " ";
}
scan.close();
Gson gson = new GsonBuilder().create();
JsonObject json = gson.fromJson(jsonstring, JsonElement.class).getAsJsonObject();
JsonObject response = json.get("response").getAsJsonObject();
if(response.has("results")){
JsonObject firstResult = response.get("results").getAsJsonArray().get(0).getAsJsonObject();
if(!firstResult.get("state").getAsString().equals("")){
query = firstResult.get("state").getAsString() + "/" + firstResult.get("name").getAsString();
}
else{
query = firstResult.get("country").getAsString() + "/" + firstResult.get("name").getAsString();
}
apiurl = "http://api.wunderground.com/api/" + Config.getWeatherApiKey() + "/conditions/q/" + query + ".json";
url = new URL(apiurl);
urlc = url.openConnection();
urlc.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
urlc.addRequestProperty("User-Agent", "Mozilla");
urlc.connect();
scan = new Scanner(urlc.getInputStream());
jsonstring = "";
while(scan.hasNext()){
jsonstring += scan.next() + " ";
}
scan.close();
gson = new GsonBuilder().create();
json = gson.fromJson(jsonstring, JsonElement.class).getAsJsonObject();
}
if(!json.has("current_observation")){
Server.say(target, "No results for " + query.replace("_", " ") + " could be found");
}
else{
JsonObject currentObservation = json.get("current_observation").getAsJsonObject();
JsonObject displayLocation = currentObservation.get("display_location").getAsJsonObject();
String location = displayLocation.get("full").getAsString();
String temp = currentObservation.get("temperature_string").getAsString();
String weather = currentObservation.get("weather").getAsString();
String precip;
if(currentObservation.get("precip_today_in").getAsString().equals("")) precip = "";
else precip = String.format(", Precipitation: %.0f%% ", (currentObservation.get("precip_today_in").getAsDouble()*100));
String result = String.format("Weather for %s: Currently %s, %s%s", location, weather, temp, precip);
Server.say(target, result);
}
}
catch(IOException e){
}
}
}
}
}