Using Active Network with Codenvy

Create an application that interacts with Active Network API using Codenvy Factory:


Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/content/28/10918028/html/wp-content/themes/twentytwelve/views/factory.php on line 3

Warning: file_get_contents(http://factories.codenvy-stg.com/generated/activenetwork.html) [function.file-get-contents]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/content/28/10918028/html/wp-content/themes/twentytwelve/views/factory.php on line 3

This tutorial will explain the details of integrating the Active Network API into Codenvy. With the Active Network API, you will be able to extract information of various activities anywhere such as sports events, campgrounds etc. into your application. The explanation has been done with a very basic Java servlet project that makes use of the Active Network api to explain some basic features provided by the api.


Before proceeding to the creation of the Java project, please register at http://developer.active.com/member/register with your email id and then create a Active Network application that will generate keys which will be used for the integration:

active_network
active_network_1

On registering the application, you can see your keys at the ‘My Account’ section:
active_network_2
There are different type of APIs that have various methods to integrate with Active Network for various different information. You can get more information about the API methods at http://developer.active.com/docs/

To assist the integration with the different methods, the Active Network website has a IO Docs section at http://developer.active.com/io-docs which will give you the HTTP Request URL that will be required to invoke the method from your Codenvy application and the response that you would get. For example, if you want to invoke the Search Assets API available under Activity Search category, you would do the following steps in your Active Network account under your registered application –

a) Select the API:
active_network_3

b) This will list all methods for that API:
active_network_4

c) Now expand the Search Assets method. This will have the options to decide the return format of the response and the input parameters. We use the number of activities, page number, distance as parameters and the format of the response as JSON. This method will return back details of all activities based on the input parameters:
active_network_5
active_network_6
d) On clicking Try it, you will get the Request URL generated that will be used from your application in Codenvy and the request and response headers and response body in JSON format that you will capture in your Codenvy application:
active_network_7

Create a Project

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

project_structure

Create pom.xml File

To make use of the Active Network api through HttpClient 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:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
<groupId>com.codenvy</groupId>
<artifactId>ActiveNetworkSample</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>ActiveNetworkSample</name>
  <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>
  <build>
    <finalName>ActiveNetworkSample</finalName>
  </build>
</project>

Create Java Class

Now create a Java servlet class named ‘ActiveNetworkServlet.java’ that will talk to the Active Network website with the Http request URL that was generated above in the Active Network IO Docs section 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.

package com.codenvy;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ActiveNetworkServlet extends HttpServlet{

  private HttpClient client = new DefaultHttpClient();

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

        StringBuffer sb = null;
        try {
            String getURL = "http://api.amp.active.com/search/?v=json&r=50&f=activities&s=relevance&num=2&page=1&api_key=sfagxcx2r3wat7ucq9rpuptb";

            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 ActiveNetworkServlet class to display the 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:

<?xml version="1.0"?>

<!DOCTYPE web-app SYSTEM "http://java.sun.com/dtd/web-app_2_3.dtd" PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN">
-<web-app> <display-name>Active Network Servlet App</display-name> -<servlet> <servlet-name>hello</servlet-name> <servlet-class>com.codenvy.ActiveNetworkServlet</servlet-class> </servlet> -<servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>

Build and Run Your Project

Now you build and run your Codenvy project and the Http response from the Active Network website with the activity details based on the input parameters will be displayed in the browser.

You can use JSON format response in a way that you would like to meet your needs for your custom application. The response can be in XML format as well.

The Active Network provides more apis that can be used in a similar way as above to perform various functions. More details would be available on their website – http://developer.active.com/docs/ and http://developer.active.com/io-docs