You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2008/05/13 03:37:41 UTC

svn commit: r655708 - /lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java

Author: srowen
Date: Mon May 12 18:37:41 2008
New Revision: 655708

URL: http://svn.apache.org/viewvc?rev=655708&view=rev
Log:
Added support for XML, JSON output

Modified:
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java?rev=655708&r1=655707&r2=655708&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java Mon May 12 18:37:41 2008
@@ -91,54 +91,22 @@
     String howManyString = request.getParameter("howMany");
     int howMany = howManyString == null ? DEFAULT_HOW_MANY : Integer.parseInt(howManyString);
     boolean debug = Boolean.valueOf(request.getParameter("debug"));
+    String format = request.getParameter("format");
+    if (format == null) {
+      format = "text";
+    }
 
     try {
-
       List<RecommendedItem> items = recommender.recommend(userID, howMany);
-
-      response.setContentType("text/plain");
-      response.setCharacterEncoding("UTF-8");
-      response.setHeader("Cache-Control", "no-cache");
-
-      PrintWriter writer = response.getWriter();
-      if (debug) {
-        DataModel dataModel = recommender.getDataModel();
-        writer.print("User:");
-        writer.println(dataModel.getUser(userID));
-        writer.print("Recommender: ");
-        writer.println(recommender);
-        writer.println();
-        writer.print("Top ");
-        writer.print(NUM_TOP_PREFERENCES);
-        writer.println(" Preferences:");
-        Preference[] rawPrefs = dataModel.getUser(userID).getPreferencesAsArray();
-        int length = rawPrefs.length;
-        Preference[] sortedPrefs = new Preference[length];
-        System.arraycopy(rawPrefs, 0, sortedPrefs, 0, length);
-        Arrays.sort(sortedPrefs, Collections.reverseOrder(ByValuePreferenceComparator.getInstance()));
-        // Cap this at 20 just to be brief
-        int max = Math.min(NUM_TOP_PREFERENCES, length);
-        for (int i = 0; i < max; i++) {
-          Preference pref = sortedPrefs[i];
-          writer.print(pref.getValue());
-          writer.print('\t');
-          writer.println(pref.getItem());
-        }
-        writer.println();
-        writer.println("Recommendations:");
-        for (RecommendedItem recommendedItem : items) {
-          writer.print(recommendedItem.getValue());
-          writer.print('\t');
-          writer.println(recommendedItem.getItem());
-        }
+      if ("text".equals(format)) {
+        writePlainText(response, userID, debug, items);
+      } else if ("xml".equals(format)) {
+        writeXML(response, items);
+      } else if ("json".equals(format)) {
+        writeJSON(response, items);
       } else {
-        for (RecommendedItem recommendedItem : items) {
-          writer.print(recommendedItem.getValue());
-          writer.print('\t');
-          writer.println(recommendedItem.getItem().getID());
-        }
+        throw new ServletException("Bad format parameter: " + format);
       }
-
     } catch (TasteException te) {
       throw new ServletException(te);
     } catch (IOException ioe) {
@@ -147,6 +115,87 @@
 
   }
 
+  private void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items)
+      throws IOException, TasteException {
+    response.setContentType("text/xml");
+    response.setCharacterEncoding("UTF-8");
+    response.setHeader("Cache-Control", "no-cache");
+    PrintWriter writer = response.getWriter();
+    writer.print("<?xml version=\"1.0\" encoding=\"UTF-8\"?><recommendedItems>");
+    for (RecommendedItem recommendedItem : items) {
+      writer.print("<item><value>");
+      writer.print(recommendedItem.getValue());
+      writer.print("</value><id>");
+      writer.print(recommendedItem.getItem().getID());
+      writer.print("</id></item>");
+    }
+    writer.println("</recommendedItems>");
+  }
+
+  private void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items)
+      throws IOException, TasteException {
+    response.setContentType("text/plain");
+    response.setCharacterEncoding("UTF-8");
+    response.setHeader("Cache-Control", "no-cache");
+    PrintWriter writer = response.getWriter();
+    writer.print("{\"recommendedItems\":{\"item\":[");
+    for (RecommendedItem recommendedItem : items) {
+      writer.print("{\"value\":\"");
+      writer.print(recommendedItem.getValue());
+      writer.print("\",\"id\":\"");
+      writer.print(recommendedItem.getItem().getID());
+      writer.print("\"},");
+    }
+    writer.println("]}}");
+  }
+
+  private void writePlainText(HttpServletResponse response,
+                              String userID,
+                              boolean debug,
+                              Iterable<RecommendedItem> items) throws IOException, TasteException {
+    response.setContentType("text/plain");
+    response.setCharacterEncoding("UTF-8");
+    response.setHeader("Cache-Control", "no-cache");
+    PrintWriter writer = response.getWriter();
+    if (debug) {
+      DataModel dataModel = recommender.getDataModel();
+      writer.print("User:");
+      writer.println(dataModel.getUser(userID));
+      writer.print("Recommender: ");
+      writer.println(recommender);
+      writer.println();
+      writer.print("Top ");
+      writer.print(NUM_TOP_PREFERENCES);
+      writer.println(" Preferences:");
+      Preference[] rawPrefs = dataModel.getUser(userID).getPreferencesAsArray();
+      int length = rawPrefs.length;
+      Preference[] sortedPrefs = new Preference[length];
+      System.arraycopy(rawPrefs, 0, sortedPrefs, 0, length);
+      Arrays.sort(sortedPrefs, Collections.reverseOrder(ByValuePreferenceComparator.getInstance()));
+      // Cap this at 20 just to be brief
+      int max = Math.min(NUM_TOP_PREFERENCES, length);
+      for (int i = 0; i < max; i++) {
+        Preference pref = sortedPrefs[i];
+        writer.print(pref.getValue());
+        writer.print('\t');
+        writer.println(pref.getItem());
+      }
+      writer.println();
+      writer.println("Recommendations:");
+      for (RecommendedItem recommendedItem : items) {
+        writer.print(recommendedItem.getValue());
+        writer.print('\t');
+        writer.println(recommendedItem.getItem());
+      }
+    } else {
+      for (RecommendedItem recommendedItem : items) {
+        writer.print(recommendedItem.getValue());
+        writer.print('\t');
+        writer.println(recommendedItem.getItem().getID());
+      }
+    }
+  }
+
   @Override
   public void doPost(HttpServletRequest request,
                      HttpServletResponse response) throws ServletException {