Using Groupon with Codenvy

Use Codenvy Factory to instantly start working with a sample Groupon API project:


This tutorial will explain the details of integrating the Groupon API into Codenvy. Groupon API allows you to integrate Groupon website deals into your application. With the Groupon API, you will be able to retrieve details about the latest Groupon deals into your application for using them in a customised way. The explanation has been done with a very basic Java servlet project that makes use of the Groupon API to explain some basic features provided by the API.

Register With Groupon

Before proceeding to the creation of the Java project, please register at https://www.groupon.com/users/new with your email id:
groupon-register

On registering the application, you can login to your Groupon account and generate your API key at http://www.groupon.com/pages/api :
groupon-key

The Groupon API has various methods to integrate with Groupon for various information on channels,deals and Groupon Says. You can get more information about the API methods at
https://sites.google.com/site/grouponapiv2/home. Each section within the API documentation has sample HTTP Request URLs that are required to get a response back either in JSON or XML format.

Create a Project

Now, login to your Codenvy workspace and create a WAR project named as ‘GrouponSample’. This will have the following structure:
groupon-structure

Create pom.xml File

To make use of the Groupon API as a servlet, please update the pom.xml to include the HttpClient and Java EE Web API jars and the servletapi jar into your project as Maven dependencies:

   <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.2.5</version>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-web-api</artifactId>
      <version>6.0</version>
    </dependency>
  </dependencies>
  <repositories>
     <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <url>http://repo1.maven.org/maven2</url>
     </repository>
  </repositories>

Create Java Class

Now create a Java servlet class named GrouponServlet.java that will talk to the Groupon website with the Http request URL and then get a Http response back with the response header and the response body in the JSON format which will be then displayed on the browser through a JSP. All this is done inside the method doGet() in the sample source Java class. The API method used in this sample will bring back all the deals available in a particular channel.

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        StringBuffer sb = null;
        try {
            String getURL = "http://api.groupon.com/v2/channels/occasions/deals?client_id=agshskdhdhdhdbdsnsjdjdnhdjd236236272hnk&show=title";

            HttpGet req = new HttpGet(getURL);
            req.addHeader("X-Originating-Ip", "80.254.147.148");
            HttpResponse res = client.execute(req);
            HttpEntity entity = res.getEntity();
            String responseString = new BasicResponseHandler().handleResponse(res);
            if (entity != null) {
                EntityUtils.consume(entity);
            }

            sb = new StringBuffer("<br/>Simple GET request to url : "+ getURL +"<br/><br/>");
            sb.append("*** Request headers ***").append("<br/>");
            Header[] requestHeaders = req.getAllHeaders();
            for (Header header : requestHeaders) {
                sb.append(header.toString()).append("<br/>");
            }
            sb.append("***********************").append("<br/><br/>");

            sb.append("*** Response headers ***").append("<br/>");
            sb.append(res.getStatusLine()).append("<br/>");
            Header[] headers = res.getAllHeaders();
            for (Header header : headers) {
                sb.append(header.toString()).append("<br/>");
            }
            sb.append("***********************").append("<br/><br/>");

            sb.append("*** Response Body ***").append("<br/>");
            sb.append(responseString).append("<br/>");

        } catch (Exception ex) {
            sb = new StringBuffer(ex.toString());
        }

        request.setAttribute("data", sb.toString());
        RequestDispatcher rd = request.getRequestDispatcher("/success.jsp");
        rd.forward(request, response);
   }

Create index.jsp File

Your Codenvy project will have an index.jsp which will invoke the Servlet class -

<%
   	response.sendRedirect("/hello");
%>

Create success.jsp File

Your Codenvy project will have a success.jsp which will be invoked from the GrouponServlet class to display the JSON response on the browser -

<html>
  <body>
    <div>
      <p>Data : <br/><%=request.getAttribute("data") %></p>
      <br/>
    </div>
 </body>
</html>

Create web.xml File

The servlet mapping ‘/hello’ is defined in the web.xml as follows –

<web-app>
  <display-name>Groupon Servlet App</display-name>
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.codenvy.GrouponServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

Now you build and run your Codenvy project and the JSON response from the Groupon website with the requested information will be displayed in the browser:

groupon-output

You can use this JSON format response in a way that you would like to meet your needs for your custom application.