A Simple Java Client

This is a simple code snippet in Java to make requests to the Daylife API and get the response as a XML Dom. You create an instance of the class DayPIClient with an accesskey, sharedsecret, server name and a daypi version number. You then make requests by calling the "call" function with a daypi method name and a map of input params.

The zip file also contains a simple example of using the client. The source code file is a valid zip file and needs to be renamed to a .zip extension to use it.


######Example Usage of DayPIClient######
package com.daylife.src.daypi;

import java.util.HashMap;
import java.util.Map;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class DayPIExample {

	public static void main(String[] args) throws Exception {
		String accesskey = "8befa1cf0a7c0291613242235638a662";
		String sharedsecret = "2e548ef751397c653752057adcff0c9f";
		String server = "freeapi.daylife.com";
		String version = "4.2";
		
		//initialize the daypi client
		DayPIClient client = new DayPIClient(accesskey, sharedsecret, server, version);
		
		//create the input params
		Map input = new HashMap();
		input.put("name", "george w. bush");
		input.put("limit", "20");
		
		//make the API call
		Document doc = client.call("topic_getRelatedStories", input);
		
		//parse and use the xml dom returned
		NodeList nodes = doc.getElementsByTagName("response");
		System.out.println(nodes.item(0).getTextContent());
	}
}

######DayPIClient######

package com.daylife.src.daypi; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.io.InputStream; import java.security.MessageDigest; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; /*** * * The DayPIClient is a very basic class in Java that helps * you make a request to the Daylife APIs. * * You will need a daylife accesskey, sharedsecret and the * daypi server name to initialize a DayPIClient object. * * You can then call the functiona name "call" with the * daypi method name and the list of input parameter. The call * function returns the daypi response as a XML DOM object. * * @author Vineet Gupta (vineet at daylife dot com) */ public class DayPIClient { /* * The auth_keys array contains the name of input params * that the daypi expects to use */ private final String[] auth_keys = { "topic_id", "article_id", "story_id", "image_id", "quote_id", "set_id", "query", "name" }; private final String _sharedsecret; private final String _accesskey; private final String _server; private final String _version; public DayPIClient(String accesskey, String sharedsecret, String server, String version) { _accesskey = accesskey; _sharedsecret = sharedsecret; _server = server; _version = version; } public Document call(String method_name, Map params) { //Create Signature based on the input params String signature = this.create_signature(params); //Add accesskey and signature to the list of params params.put("accesskey", _accesskey); params.put("signature", signature); //Ensure sharedsecret is not part of the params //that gets sent to the server if (params.containsKey("sharedsecret")) { params.remove("sharedsecret"); } //Form the URL that needs to be called String url = create_url(method_name, params); //Make the HTTP GET call to the daypi server URL apiURL = null; try { apiURL = new URL(url); } catch (MalformedURLException e) { System.out.println("MalformedURLException: " + e.getMessage()); System.exit(1); } try { HttpURLConnection conn = (HttpURLConnection) apiURL.openConnection(); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.connect(); InputStream inputStream = conn.getInputStream(); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(inputStream); doc.normalizeDocument(); return doc; } catch(Exception e) { System.out.println("Exception: " + e.getMessage()); System.exit(1); } return null; } private String create_url(String method_name, Map params) { String url = ""; url = "http://" + this._server + "/" + "xmlrest" + "/" + "publicapi" + "/" + this._version + "/" + method_name + "?" + this.params_to_string(params); System.out.println(url); return url; } private String params_to_string(Map params) { String qs = ""; Iterator it = params.keySet().iterator(); while (it.hasNext()) { String key = (String)it.next(); Object value = (Object) params.get(key); if (value instanceof List) { List newval = (List) value; Collections.sort(newval); for (int i=0; i< newval.size(); i++){ qs += key + "=" + this.url_encode((String)newval.get(i)) + "&"; } } else { qs += key + "=" + this.url_encode((String) value) + "&"; } } return qs; } private String url_encode(String value) { try { return URLEncoder.encode(value, "UTF-8"); } catch (UnsupportedEncodingException e) { System.out.print("Unsuccessful attempt to encode " + value +" into UTF8"); System.out.println("Exception: " + e.getMessage()); System.exit(1); } return null; } private String create_signature(Map params) { String strValue = ""; for (int i = 0; i < auth_keys.length; i++) { if (params.containsKey(auth_keys[i])) { Object value = (Object)params.get(auth_keys[i]); if (value instanceof List) { List newval = (List) value; Collections.sort(newval); for (int j=0; j< newval.size(); j++){ strValue += (String)newval.get(j); } } else { strValue = (String) value; } } } return this.getMD5Hash(strValue); } private String getMD5Hash(String query) { StringBuffer buffer = new StringBuffer(); buffer.append(_accesskey); buffer.append(_sharedsecret); buffer.append(query); try { MessageDigest md = MessageDigest.getInstance("MD5"); StringBuffer result = new StringBuffer(); byte bbytes[] = md.digest(buffer.toString().getBytes()); for (int i=0; i < bbytes.length; i++) { byte b = bbytes[i]; result.append(Integer.toHexString((b & 0xf0) >>> 4)); result.append(Integer.toHexString(b & 0x0f)); } return result.toString(); } catch (java.security.NoSuchAlgorithmException e) { System.err.println("MD5 does not appear to be supported" + e); System.exit(1); } return ""; } }