package com.yahoo.glimmer.web; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Type; import java.net.URI; import java.net.URISyntaxException; import java.text.DateFormat; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpclient.methods.GetMethod; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; public class WebRequestDemo { private static final Gson GSON = new GsonBuilder().setPrettyPrinting().setDateFormat(DateFormat.LONG) .registerTypeAdapter(CharSequence.class, new JsonSerializer<Object>() { public JsonElement serialize(Object object, Type arg1, JsonSerializationContext arg2) { if (object instanceof CharSequence) { return new JsonPrimitive(((CharSequence) object).toString()); } return null; } }).create(); public static void main(String[] args) throws IOException, URISyntaxException { RequestParams params = new RequestParams(); params.setIndex("wdc"); params.setQuery(args[0]); QueryResult result = doRequest(params); // Use GSON to re-serialize the result again. System.out.println(GSON.toJson(result)); } public static QueryResult doRequest(RequestParams requestParams) throws IOException, URISyntaxException { HttpClient client = new HttpClient(); client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); GetMethod get = new GetMethod(requestParams.toUri().toString()); try { client.executeMethod(get); Reader responseReader = new InputStreamReader(get.getResponseBodyAsStream()); return GSON.fromJson(responseReader, QueryResult.class); } finally { get.releaseConnection(); } } public static class RequestParams { private static final String SERVICE_HOST = "glimmer.research.yahoo.com"; private static final int SERVICE_PORT = 80; private static final String SERVICE_PATH = "/ajax/query"; private String host = SERVICE_HOST; private int port = SERVICE_PORT; private String path = SERVICE_PATH; private String index; private String query; private boolean deref = false; private int pageStart = 0; private int pageSize = 10; public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getIndex() { return index; } public void setIndex(String index) { this.index = index; } public String getQuery() { return query; } public void setQuery(String query) { this.query = query; } public boolean isDeref() { return deref; } public void setDeref(boolean deref) { this.deref = deref; } public int getPageStart() { return pageStart; } public void setPageStart(int pageStart) { this.pageStart = pageStart; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } private final StringBuilder querySb = new StringBuilder(); public URI toUri() throws URISyntaxException { querySb.setLength(0); querySb.append("index=").append(index); querySb.append("&query=").append(query); if (deref) { querySb.append("&deref=true"); } querySb.append("&pageStart=").append(pageStart); querySb.append("&pageSize=").append(pageSize); return new URI("http", null, host, port, path, querySb.toString(), null); } } }