package org.mcupdater.ravenbot.features;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.mcupdater.ravenbot.AbstractListener;
import org.pircbotx.Colors;
import org.pircbotx.hooks.events.MessageEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class SearchHandler extends AbstractListener
{
@Override
public void handleCommand(String sender, MessageEvent event, String command, String[] args) {
String filter = null;
switch (command) {
case ".google":
case ".g":
break;
case ".curseforge":
case ".cf":
filter = "site:minecraft.curseforge.com";
break;
case ".wiki":
filter = "wiki";
break;
case ".urban":
filter = "site:urbandictionary.com";
break;
case ".devbukkit":
case ".db":
filter = "site:dev.bukkit.org";
break;
case ".ann":
filter = "site:animenewsnetwork.com";
break;
case ".github":
case ".gh":
filter = "site:github.com";
break;
case ".define":
filter = "site:en.wiktionary.com";
break;
default:
return;
}
event.respond(performSearch(filter, StringUtils.join(args, " ")));
}
private String performSearch(String filter, String terms) {
try {
StringBuilder searchURLString = new StringBuilder();
searchURLString.append("https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=");
if (filter != null) {
searchURLString.append(filter).append("+");
}
searchURLString.append(terms.replace(" ", "+"));
URL searchURL = new URL(searchURLString.toString());
URLConnection conn = searchURL.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 RavenBot/2.0");
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder json = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
json.append(line).append("\n");
}
in.close();
JsonElement element = new JsonParser().parse(json.toString());
JsonObject output = element.getAsJsonObject().getAsJsonObject("responseData").getAsJsonArray("results").get(0).getAsJsonObject();
String title = StringEscapeUtils.unescapeJava(StringEscapeUtils.unescapeHtml4(output.get("titleNoFormatting").toString().replaceAll("\"", "")));
String content = StringEscapeUtils.unescapeJava(StringEscapeUtils.unescapeHtml4(output.get("content").toString().replaceAll("\\s+", " ").replaceAll("\\<.*?>", "").replaceAll("\"", "")));
String url = StringEscapeUtils.unescapeJava(StringEscapeUtils.unescapeHtml4(output.get("url").toString()).replaceAll("\"", ""));
return url + " - " + Colors.BOLD + title + Colors.NORMAL + ": \"" + content + "\"";
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void initCommands() {
}
}