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 String getWolframResult(String queryToExecute) { // Use "pi" as the default query, or caller can supply it as the lone command-line argument. String input = "pi"; String result = ""; // if (args.length > 0) // input = args[0]; logger.info("1"); // 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"); logger.info("2"); // Create the query. WAQuery query = engine.createQuery(); logger.info("3"); // Set properties of the query. query.setInput(queryToExecute); logger.info("4"); try { // For educational purposes, print out the URL we are about to send: logger.info("Query URL:"); logger.info(engine.toURL(query)); logger.info(""); // 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()) { logger.info("Query error"); logger.info(" error code: " + queryResult.getErrorCode()); logger.info(" error message: " + queryResult.getErrorMessage()); } else if (!queryResult.isSuccess()) { logger.info("Query was not understood; no results available."); } else { // Got a result. logger.info("Successful query. Pods follow:\n"); for (WAPod pod : queryResult.getPods()) { logger.info(pod.getTitle()); // logger.info(WolframAlphaConstants.POD_DECIMAL_APROXIMATION); if (!pod.isError() && (pod.getTitle().equals(WolframAlphaConstants.POD_DECIMAL_APROXIMATION) || pod.getTitle().equals(WolframAlphaConstants.POD_RESULT) || pod.getTitle().equals(WolframAlphaConstants.POD_REAL_SOLUTION))) { logger.info(pod.getTitle()); logger.info("------------"); for (WASubpod subpod : pod.getSubpods()) { for (Object element : subpod.getContents()) { if (element instanceof WAPlainText) { logger.info(((WAPlainText) element).getText()); logger.info(""); result = (((WAPlainText) element).getText()); } } } logger.info(""); } } // 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) { logger.info(e.getMessage()); } return result; }