All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hw.serpapi.SerpApiSearch Maven / Gradle / Ivy

There is a newer version: 0.2.2
Show newest version
/*
 * 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.hw.serpapi;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

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

/**
 * Due to Cant get this artifact from jitpack, I decided to add the serpapi-client module myself.
 * 

* SerpApiSearch wraps HTTP interaction with the service serpapi.com * * @author HamaWhite */ public class SerpApiSearch { /** * Set of constant */ public static final String API_KEY_NAME = "api_key"; /** * user secret API key */ protected String serpapiApiKey; /** * Current search engine */ protected String engine; /** * search parameters */ public Map parameter; /** * initialize gson */ private static Gson gson = new Gson(); /** * https search implementation for Java 7+ */ public SerpApiHttpClient search; /*** * Constructor * * @param parameter user search * @param serpapiApiKey secret user API key * @param engine service like: google, naver, yahoo... */ public SerpApiSearch(Map parameter, String serpapiApiKey, String engine) { this.parameter = parameter; this.serpapiApiKey = serpapiApiKey; this.engine = engine; } /*** * Constructor * * @param parameter user search * @param engine service like: google, yahoo, bing... */ public SerpApiSearch(Map parameter, String engine) { this.parameter = parameter; this.engine = engine; } /*** * Constructor with no parameter * @param engine service like: google, bing, yahoo... */ public SerpApiSearch(String engine) { this.parameter = new HashMap(); this.engine = engine; } /** * Constructor * * @param serpapiApiKey secret API key * @param engine service like: google, bing, yahoo... */ public SerpApiSearch(String serpapiApiKey, String engine) { this.serpapiApiKey = serpapiApiKey; this.engine = engine; } /*** * Build a serp API query by expanding existing parameter * * @param path backend HTTP path * @param output type of output format (json, html, json_with_images) * @return format parameter hash map * @throws SerpApiSearchException wraps backend error message */ public Map buildQuery(String path, String output) throws SerpApiSearchException { // Initialize search if not done if (search == null) { this.search = new SerpApiHttpClient(path); this.search.setHttpConnectionTimeout(6000); } else { this.search.path = path; } // Set current programming language this.parameter.put("source", "java"); // Set api_key if (this.parameter.get(API_KEY_NAME) == null) { if (this.serpapiApiKey != null) { this.parameter.put(API_KEY_NAME, this.serpapiApiKey); } else if (getApiKeyFromEnv() != null) { this.parameter.put(API_KEY_NAME, getApiKeyFromEnv()); } else { throw new SerpApiSearchException(API_KEY_NAME + " is not defined"); } } this.parameter.put("engine", this.engine); // Set output format this.parameter.put("output", output); return this.parameter; } /** * @return current secret api key */ public static String getApiKeyFromEnv() { return System.getenv("SERPAPI_API_KEY"); } /*** * Get HTML output * * @return raw HTML response from the search engine for custom parsing * @throws SerpApiSearchException wraps backend error message */ public String getHtml() throws SerpApiSearchException { Map query = buildQuery("/search", "html"); return search.getResults(query); } /*** * Get JSON output * * @return JsonObject parent node * @throws SerpApiSearchException wraps backend error message */ public JsonObject getJson() throws SerpApiSearchException { Map query = buildQuery("/search", "json"); return asJson(search.getResults(query)); } /*** * Convert HTTP content to JsonValue * * @param content raw JSON HTTP response * @return JsonObject created by gson parser */ public JsonObject asJson(String content) { JsonElement element = gson.fromJson(content, JsonElement.class); return element.getAsJsonObject(); } /*** * @return http search */ public SerpApiHttpClient getClient() { return this.search; } /*** * Get location * * @param q query * @param limit number of location * @return JsonObject location using Location API * @throws SerpApiSearchException wraps backend error message */ public JsonArray getLocation(String q, Integer limit) throws SerpApiSearchException { Map query = buildQuery("/locations.json", "json"); query.remove("output"); query.remove(API_KEY_NAME); query.put("q", q); query.put("limit", limit.toString()); String s = search.getResults(query); return gson.fromJson(s, JsonArray.class); } /*** * Get search result from the Search Archive API * * @param searchID archived search result = search_metadata.id * @return JsonObject search result * @throws SerpApiSearchException wraps backend error message */ public JsonObject getSearchArchive(String searchID) throws SerpApiSearchException { Map query = buildQuery("/searches/" + searchID + ".json", "json"); query.remove("output"); query.remove("q"); return asJson(search.getResults(query)); } /*** * Get account information using Account API * * @return JsonObject account information * @throws SerpApiSearchException wraps backend error message */ public JsonObject getAccount() throws SerpApiSearchException { Map query = buildQuery("/account", "json"); query.remove("output"); query.remove("q"); return asJson(search.getResults(query)); } public void setParameter(Map parameter) { this.parameter = parameter; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy