Skip to content

Instantly share code, notes, and snippets.

@realModusOperandi
Last active December 20, 2020 22:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save realModusOperandi/52adc3451c95f37a693908a76f9fa841 to your computer and use it in GitHub Desktop.
Save realModusOperandi/52adc3451c95f37a693908a76f9fa841 to your computer and use it in GitHub Desktop.
Downloads the code for fizzbuzz from Stack Overflow and runs it
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class App {
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("https://www.google.com/search?q=fizzbuzz+java+stackoverflow")
.method("GET", null)
.build();
Response response = client.newCall(request).execute();
Document doc = Jsoup.parse(response.body().string());
Elements hrefs = doc.select("#main .kCrYT a");
outer: for (Element href : hrefs) {
String url = href.attr("href");
if (url.startsWith("/url?q=")) {
url = url.substring("/url?q=".length());
Request answerRequest = new Request.Builder()
.url(url)
.method("GET", null)
.build();
Response answerResponse = client.newCall(answerRequest).execute();
Document answerDoc = Jsoup.parse(answerResponse.body().string());
Elements answerElements = answerDoc.select(".answercell code");
for (Element answerElement : answerElements) {
String answer = answerElement.wholeText();
answer = answer.trim();
if (answer.startsWith("public class") && answer.contains("public static void main")) {
String packageName = "test";
String className = answer.substring(answer.indexOf("public class") + "public class".length(), answer.indexOf("{")).trim();
StringBuilder fileContents = new StringBuilder();
fileContents.append("package ").append(packageName).append(";\n");
fileContents.append(answer);
String strTmp = System.getProperty("java.io.tmpdir");
File sourceFile = new File(strTmp, packageName.replaceAll("\\.", "/") + "/" + className + ".java");
sourceFile.getParentFile().mkdirs();
sourceFile.createNewFile();
BufferedWriter writer = new BufferedWriter(new FileWriter(sourceFile));
writer.write(fileContents.toString());
writer.flush();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { new File(strTmp).toURI().toURL() });
Class<?> cls = Class.forName(packageName + "." + className, true, classLoader);
Object instance = cls.getDeclaredConstructor().newInstance();
Method main = cls.getMethod("main", String[].class);
main.invoke(instance, (Object) new String[] {});
sourceFile.delete();
break outer;
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment