Google Custom Search API使用详解


      最近工作不是很忙,利用业余时间学习了google的文档。Google对外提供的API功能十分强大,由于篇幅有限,这里仅说一下Google Custom Search API。这个api提供了搜索的功能,可以搜索图片和文字信息,并以Json的形式返回结果。我们在实际开发中无需引入任何Jar包,仅需调用google的服务即可,非常的好用,下面我会以一个demo项目的形式。

首先Google的东西,当然要看一手的官方文档。


 Google Custom Search API使用详解_第1张图片

翻译如下:谷歌定制搜索API可以为web程序或桌面程序通过编程的方式提供检索和展现的功能,使用谷歌定制搜索API,你就可以使用RESTful架构的请求网站搜索或者图片搜索,结果以JSONAtom的格式返回。  PS:默认返回JSON格式

Google Custom Search API使用详解_第2张图片


翻译如下:通过调用API,用户的请求对应订制搜索引擎的实例,因此,在使用这个API之前,你需要生成一个ID,在谷歌官网ControlPanel中的Setup Basics > Details获取这个ID





值得注意的是,我看到很多文章提到需要拿到一个api key,老版本确实需要一个key,但是现在的googlecustom search api 已经不需要apikey了。

好了,以上准备工作就绪,下面就开始开发一个DemoProject了。


第一步:申请一个Google帐号并登录,创建一个自己的项目,自定义一个搜索引擎实例。拿到 ID(作为cs参数)。

Google Custom Search API使用详解_第3张图片

Google Custom Search API使用详解_第4张图片


第二步:新建一个Web  Project。定义几个bean,其中包括文字索引查询结果类SearchResultItem类,图片查询结果类SearchResultImage类,查询结果类SearchResult类,图片类Image

     Google Custom Search API使用详解_第5张图片

         

在此由于篇幅有限,bean的相关代码不贴上来了。(如果需要可以下面给我留言)

第三步:写一个servlet,做查询动作,并把结果返回回页面

package google.custom.search.api.servlet;

import google.custom.search.api.bean.Image;
import google.custom.search.api.bean.SearchResult;
import google.custom.search.api.bean.SearchResultItem;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

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

import com.google.gson.Gson;

/**
 * Author:wangjian
 */
public class GoogleCustomSearchAPIServlet extends HttpServlet {

	// 最大返回结果数
	private static final int RESULT_OK = 200;
	// 8KB
	private static final int BUF_SIZE = 1024 * 8;
	
	// 自定义搜索引擎的ID 
	private static final String ID = "010589607068358538435:p8ot8fmvira"; 
																			

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		handle(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		handle(request, response);
	}


	private void handle(HttpServletRequest request, HttpServletResponse response)
			throws IOException {
		int start = Integer.parseInt(request.getParameter("start"));
		int num = Integer.parseInt(request.getParameter("num"));
		String queryExpression = request.getParameter("queryexpression");
		String strRequest = "https://www.google.com:443/cse/publicurl?cx="
				+ ID
				+ "&q=%queryExpression%&searchType=image&start=%start%&num=%num%";
		strRequest = strRequest.replace("%queryExpression%", queryExpression)
				.replace("%start%", String.valueOf(start))
				.replace("%num%", Integer.toString(num));

		HttpURLConnection conn = null;
		String queryResult = null;
		try {
			URL url = new URL(strRequest);
			conn = (HttpURLConnection) url.openConnection();
			// 使用GET方法
			conn.setRequestMethod("GET");
			int resultCode = conn.getResponseCode();
			if (resultCode == RESULT_OK) {
				InputStream is = conn.getInputStream();
				queryResult = readAsString(is);
				is.close();
			} else {
				System.out.println("Fault on getting http result, code: "
						+ resultCode);
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			conn.disconnect();
		}

		if ((queryResult != null) && (queryResult.length() != 0)) {
			String respStr = parseResult(queryResult);
			System.out.println(respStr);

			// 设置返回JSON内容
			response.setContentType("application/json; charset=utf-8");
			// 设置不缓存内容
			response.setHeader("pragma", "no-cache");
			response.setHeader("cache-control", "no-cache");
			PrintWriter writer = response.getWriter();
			writer.write(respStr);
			writer.flush();
			writer.close();
		}
	}

	/**
	 * 将搜索结果字符串转化为需要的对象列表
	 * 
	 * @param queryResult
	 * @return
	 */
	private String parseResult(String queryResult) {
		Gson gson = new Gson();
		SearchResult e = gson.fromJson(queryResult, SearchResult.class);
		System.out.println(queryResult);
		SearchResultItem items[] = e.getItems();
		Image images[] = new Image[items.length];
		for (int i = 0; i < items.length; i++) {
			images[i] = new Image(items[i].title, items[i].link,
					items[i].displayLink);
		}
		return gson.toJson(images);
	}

	/**
	 * 将输出内容转换为字符串形式
	 * 
	 * @param ins
	 * @return
	 * @throws IOException
	 */
	public static String readAsString(InputStream ins) throws IOException {
		ByteArrayOutputStream outs = new ByteArrayOutputStream();
		byte[] buffer = new byte[BUF_SIZE];
		int len = -1;
		try {
			while ((len = ins.read(buffer)) != -1) {
				outs.write(buffer, 0, len);
			}
		} finally {
			outs.flush();
			outs.close();
		}
		return outs.toString();
	}

}

第四步:将查询结果返回到前台页面:
     

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>






csdn网站即时搜索





  
      










    
    

 

 

 

 

 

 

你可能感兴趣的:(google,search,api,搜索引擎,图片搜索)