public static boolean wolframAlpha(Queries qu) { String queryStr = qu.getQuery(); StringBuilder result = new StringBuilder(".\n"); // Basic engine setup WAEngine engine = new WAEngine(); engine.setAppID("7AHUTR-UV58KYXA8Q"); // Set up query with necessary parameters WAQuery query = engine.createQuery(); query.setInput(queryStr); // query.addIncludePodID(arg0); // Query retrieval and error handling WAQueryResult queryResult = null; try { queryResult = engine.performQuery(query); } catch (WAException e) { // WIP: Handle WA engine errors e.printStackTrace(); // Might not want this; need to generate a response qu.setSuccessful(false); qu.setResponseTime(((double) System.currentTimeMillis() - SMSServlet.queryTime) / 1000); ProcessUser.persistWolfram(qu); return false; } // Error case if (queryResult.isError()) { qu.setSuccessful(false); qu.setResponseTime(((double) System.currentTimeMillis() - SMSServlet.queryTime) / 1000); ProcessUser.persistWolfram(qu); return false; } else if (!queryResult.isSuccess()) { qu.setSuccessful(false); qu.setResponseTime(((double) System.currentTimeMillis() - SMSServlet.queryTime) / 1000); ProcessUser.persistWolfram(qu); return false; } // Response generation else { // To do: // 1. Determine what the query is relevant to // 2. Organize the query as needed (if needed) // 3. Set up assumptions (as needed) // 4. Get WA engine response // 5. Sort through response // 6. Generate result with parts of response // Alt method: // Include first few pods in output // Have some pods, which if they exist for this entry, are always included // Retrieve result pods WAPod[] pods = queryResult.getPods(); // Result generation // Include pods which must always be included first (if they exist) // WIP // First few pods included int podI = 0; if (pods[podI].getID().equals("Input")) // Exclude 'Input interpretation' pod { podI++; } for ( /* int podI = 0 */ ; podI < NO_PODS_TO_INCL && podI < pods.length; podI++) { if (!pods[podI].isError()) { result.append(pods[podI].getTitle()); result.append(": \n"); WASubpod[] subpods = pods[podI].getSubpods(); for (WASubpod subpod : subpods) { // Iterate through elements of the subpod and include plaintext elements for (Object element : subpod.getContents()) { if (element instanceof WAPlainText) { result.append(((WAPlainText) element).getText()); } } result.append('\n'); } } else { podI--; } } // Include pods which must always be included at the end (if they exist) // WIP } // Send results through Communicate Module qu.setSuccessful(true); qu.setResponseTime(((double) System.currentTimeMillis() - SMSServlet.queryTime) / 1000); ProcessUser.persistWolfram(qu, result.toString()); return true; } // wolframAlpha method
public static void main(String[] args) { // Use "pi" as the default query, or caller can supply it as the lone command-line argument. String input = "pi"; if (args.length > 0) input = args[0]; // The WAEngine is a factory for creating WAQuery objects, // and it also used to perform those queries. You can set properties of // the WAEngine (such as the desired API output format types) that will // be inherited by all WAQuery objects created from it. Most applications // will only need to crete one WAEngine object, which is used throughout // the life of the application. WAEngine engine = new WAEngine(); // These properties will be set in all the WAQuery objects created from this WAEngine. engine.setAppID(appid); engine.addFormat("plaintext"); // Create the query. WAQuery query = engine.createQuery(); // Set properties of the query. query.setInput(input); try { // For educational purposes, print out the URL we are about to send: System.out.println("Query URL:"); System.out.println(engine.toURL(query)); System.out.println(""); // This sends the URL to the Wolfram|Alpha server, gets the XML result // and parses it into an object hierarchy held by the WAQueryResult object. WAQueryResult queryResult = engine.performQuery(query); if (queryResult.isError()) { System.out.println("Query error"); System.out.println(" error code: " + queryResult.getErrorCode()); System.out.println(" error message: " + queryResult.getErrorMessage()); } else if (!queryResult.isSuccess()) { System.out.println("Query was not understood; no results available."); } else { // Got a result. System.out.println("Successful query. Pods follow:\n"); for (WAPod pod : queryResult.getPods()) { if (!pod.isError()) { System.out.println(pod.getTitle()); System.out.println("------------"); for (WASubpod subpod : pod.getSubpods()) { for (Object element : subpod.getContents()) { if (element instanceof WAPlainText) { System.out.println(((WAPlainText) element).getText()); System.out.println(""); } } } System.out.println(""); } } // We ignored many other types of Wolfram|Alpha output, such as warnings, assumptions, etc. // These can be obtained by methods of WAQueryResult or objects deeper in the hierarchy. } } catch (WAException e) { e.printStackTrace(); } }