Package com.googlecode.mashups.services.google.impl

Source Code of com.googlecode.mashups.services.google.impl.GoogleSearchServiceImpl

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.googlecode.mashups.services.google.impl;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import com.googlecode.mashups.services.common.ServiceParameter;
import com.googlecode.mashups.services.common.ServiceParametersUtility;
import com.googlecode.mashups.services.google.api.GoogleSearchResultItem;
import com.googlecode.mashups.services.google.api.GoogleSearchService;
import com.googlecode.mashups.services.google.api.GoogleSearchServiceParameters;

public class GoogleSearchServiceImpl implements GoogleSearchService {
    private static final String REFERER               = "Referer";
    private static final String REFERER_VALUE         = "http://www.mashups4jsf.com";
    private static final String RESPONSE_DATA_ROOT    = "responseData";
    private static final String RESPONSE_DATA_RESULTS = "results";
    private static final String TITLE                 = "title"
    private static final String TITLE_NO_FORMATTING   = "titleNoFormatting";   
    private static final String URL                   = "url";   
    private static final String UNESCAPED_URL         = "unescapedUrl";
    private static final String CACHE_URL             = "cacheUrl";
    private static final String CONTENT               = "content";
    private static final String VISIBLE_URL           = "visibleUrl";   
    private static final String GSEARCH_RESULT_CLASS  = "GsearchResultClass";   

    public static GoogleSearchService getInstance() {
        return googleSearchService;
    }
    
    public List<GoogleSearchResultItem> getWebSearchResultList(List<ServiceParameter> parameters) throws Exception {
        parameters = prepareQueryParameters(parameters);
       
        URL                           feedUrl      = new URL(GOOGLE_SEARCH_SERVICE_URL
                                                   + "?"
                                                   + ServiceParametersUtility.toParametersString(parameters));
        List<GoogleSearchResultItem> searchResults = new ArrayList<GoogleSearchResultItem>();
        URLConnection                connection    = feedUrl.openConnection();
       
        connection.addRequestProperty(REFERER, REFERER_VALUE);

        String line;
        StringBuilder builder = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
       
        while((line = reader.readLine()) != null) {
            builder.append(line);
        }

        JSONObject json    = new JSONObject(builder.toString());
        JSONObject root    = (JSONObject) json.get(RESPONSE_DATA_ROOT);
        JSONArray  results = root.getJSONArray(RESPONSE_DATA_RESULTS);
       
        for (int i = 0; i < results.length(); ++i) {
            JSONObject searchItem  = (JSONObject) results.get(i);
           
            // Get attributes.
            String title              = (String) searchItem.get(TITLE);
            String titleNotFormatting = (String) searchItem.get(TITLE_NO_FORMATTING);             
            String content            = (String) searchItem.get(CONTENT);
            String cacheUrl           = (String) searchItem.get(CACHE_URL);
            String unescapedUrl       = (String) searchItem.get(UNESCAPED_URL);
            String visibleUrl         = (String) searchItem.get(VISIBLE_URL);
            String url                = (String) searchItem.get(URL);              
            String GsearchResultClass = (String) searchItem.get(GSEARCH_RESULT_CLASS);
           
            // Fill the GoogleSearchResultItem.
            GoogleSearchResultItem googleSearchResultItem = new GoogleSearchResultItem();
           
            googleSearchResultItem.setTitle(title);
            googleSearchResultItem.setTitleNotFormatting(titleNotFormatting);
            googleSearchResultItem.setContent(content);
            googleSearchResultItem.setCacheUrl(cacheUrl);
            googleSearchResultItem.setUnescapedUrl(unescapedUrl);
            googleSearchResultItem.setVisibleUrl(visibleUrl);
            googleSearchResultItem.setUrl(url);
            googleSearchResultItem.setGsearchResultClass(GsearchResultClass);
           
            searchResults.add(googleSearchResultItem);
        }       
       
        return searchResults;
    }   
   
    /*
     * @param parameters
     * @return
     */
    private List<ServiceParameter> prepareQueryParameters(List<ServiceParameter> parameters) {
        if (parameters == null) {
            parameters = new ArrayList<ServiceParameter>();
        }
       
        if (parameters.contains(new ServiceParameter(GoogleSearchServiceParameters.VERSION))) {
            parameters.remove(new ServiceParameter(GoogleSearchServiceParameters.VERSION));
        }
       
        parameters.add(new ServiceParameter(GoogleSearchServiceParameters.VERSION, "1.0"));
       
        return parameters;
    }     
   
    private GoogleSearchServiceImpl() {
    }
   
    private static GoogleSearchService googleSearchService = new GoogleSearchServiceImpl();
}
TOP

Related Classes of com.googlecode.mashups.services.google.impl.GoogleSearchServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.