`
javaflex
  • 浏览: 80362 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Google Image Api jquery制作互联网相册应用(附源码)

阅读更多

什么是谷歌图片搜索API?

谷歌官方是这么说得:The Google Image Search API provides a JavaScript interface to embed  Google Image Search   results in your website or application.(谷歌提供的基于javascript的图片搜索api可以嵌入到你的网站和应用中)

下面就进行我们谷歌图片api开发之旅,首先我们知道谷歌有很多api,比如Google Map Api、Blog Serach Api等等等等。。。

我们怎么去学习呢?其实这些我们都不用去学习,等我们用着的直接去官方找资料即可。下面就以图片搜索API为例,在对其一无所知的情况下,构建自己的一个应用。

第一:我们直接在google里面搜索 google api 会出来很多结果一般前几个都是google map api;点击进入到http://code.google.com/intl/zh-CN/

左侧找到ajax api 点击进入 然后左侧可以看见 image search ,这就是google api了,点击进入。我们怎么去做呢,看右边有个How do  i start?

第一项是需要注册一个账号,申请一个key,不用怎么说

第二项进去之后我们点击 JSON Developer's Guide 进去后 直接找 code example 找关于java的

  1. Audience
  2. Application requirements
  3. Using the JSON interface
    1. Sending a basic query
    2. Using the callback argument
    3. Using the context argument
  4. Code examples
    1. Using Flash
    2. Using Java
    3. Using PHP
    4. Using Python
    5. Using Perl
    6.  其实现在这个简单的应用就可以了

    下面这个应用是我结合jquery做得一个基于google image api的图片浏览应用 代码很简单,开放出来供大家参考

  5. 先截张图目睹一下效果:

     

还是贴代码吧

1.index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>图片搜索引擎(@author http://javaflex.iteye.com)</title>
		<link rel="stylesheet" type="text/css" href="css/style.css" />
		<script type="text/javascript" src="js/jquery-1.4.4.js"></script>
		<script type="text/javascript" src="js/getimg.js"></script>
	</head>
	<body>
		<div align="center">
			<input type="text" id="categoryName" width=500>
			<input type="radio" name="picSource" value="google" checked
				hidden="true"></input>
			<input type="button" value="搜索" id="button1">
			<input type="button" value="清空" id="clear">
		</div>
		<div id="showPhoto">
			<!-- 显示大图 -->
			<img src="images/close.jpg" id="close" />
			<div id="showPic">
				<img>
			</div>
			<div id="bgblack"></div>
			<!-- 用来显示透明的黑色背景 -->
			<div id="navigator">
			</div>
		</div>
	</body>
</html>

 2.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	 <servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>servlet.ImageServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/ImageServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 3.getimg.js

var iPicNum = 64;
var index;
var array;
$(function() {
	$("#showPhoto").hide();
	$("#bgblack").css("opacity", 0.9); // 显示大图的方块背景设置为透明
	$("#clear").click(function() {
				window.location.reload();
			});
	$("#close").click(function() {
				// 点击按钮close,则关闭大图面板(采用动画)
				$("#showPhoto").add("#showPic").fadeOut(400);
			});
	$("#button1").click(function() {
		$(document.body)
				.append("<div id='load' align='center'><img src='images/loading.gif'</div>");
		$.get("ImageServlet", {
					categoryName : encodeURI($("#categoryName").val()),
					picSource : $("input[name=picSource]:checked").val()
				}, function(returnedData, status) {
					var html = "";
					for (var i = 0; i < returnedData.length; i++) {
						html += "<div><a href='#'><img id='img" + i + "' src='"
								+ returnedData[i]
								+ "' width='150' height='150'></a></div>";
					}
					$(document.body).append(html);

					$('#load').hide();
					$("div:has(a)").addClass("thumb");
					$("div a:has(img)").click(function() {
						// 如果点击缩略图,则显示大图

						$("#showPhoto").css({
							// 大图的位置根据窗口来判断
							"left" : ($(window).width() / 2 - 300 > 20
									? $(window).width() / 2 - 300
									: 20),
							"top" : ($(window).height() / 2 - 270 > 30
									? $(window).height() / 2 - 270
									: 30)
						}).add("#showPic").fadeIn(400);
						// 根据缩略图的地址,获取相应的大图地址
						var mySrc = $(this).find("img").attr("src");
						var img = $("#showPic").find("img");
						var showimg = new Image();
						showimg.src = mySrc;
						var imgWidth = showimg.width;
						var imgHeight = showimg.height;
						var boxWidth = 400;
						var boxHeight = 400;
						if ((boxWidth / boxHeight) >= (imgWidth / imgHeight)) {
							// 重新设置img的width和height
							img.width((boxHeight * imgWidth) / imgHeight);
							img.height(boxHeight);
							// 让图片居中显示
							var margin = (boxWidth - img.width()) / 2;
							// img.css("margin-left",margin);
						} else {
							// 重新设置img的width和height
							img.width(boxWidth);
							img.height((boxWidth * imgHeight) / imgWidth);
							// 让图片居中显示
							var margin = (boxHeight - img.height()) / 2;
							// img.css("margin-top",margin);
						}
						img.attr("src", mySrc);
						if ($(this).parent().hasClass("ls"))
							// 根据图片属性(水平或者竖直),调整大图的位置
							$("#showPic").find("img").css("marginTop", "70px");
						else if ($(this).parent().hasClass("pt"))
							$("#showPic").find("img").css("marginTop", "0px");

					});
					for (var i = 0; i < iPicNum; i++) {
						var myimg = new Image();
						myimg.src = $("div a img").get(i).src;
						// 根据图片的比例(水平或者竖直),添加不同的样式

						if (myimg.width > myimg.height)
							$("div:has(a):eq(" + i + ")").addClass("ls");
						else
							$("div:has(a):eq(" + i + ")").addClass("pt");
					}

				});

	});

});

 4.ImageServlet.java

package servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.json.JSONArray;
import org.json.JSONObject;
import com.google.gson.Gson;
/**
 * 
 * @author http://javaflex.iteye.com/
 *
 */
public class ImageServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		try {
			String urlString = "http://ajax.googleapis.com/ajax/services/search/images?key=ABQIAAAAHMkDJuY1vzGaqUjliVAN-RSo6_Y-lPd_7a5rWdJRsISKKsAXgBQyI4z9PBvV4NjKXO02MH68cek4yA&rsz=large&v=1.0&";
			String categoryName = URLDecoder.decode(URLDecoder.decode(
					request.getParameter("categoryName"), "utf-8").trim(),
					"utf-8");
			String picSource = request.getParameter("picSource");
			List<String> returnedList = new ArrayList<String>();
			HttpSession session = request.getSession();
			session.setAttribute("categoryName", categoryName);
			session.setAttribute("picSource", picSource);
			session.setAttribute("images", returnedList);

			// 存储每次从Google所获取的json数据
			List<String> list = new ArrayList<String>();
			for (int i = 0; i < 8; i++) {
				String queryString = new StringBuffer(urlString).append("q=")
						.append(categoryName).append("&start=").append(8 * i)
						.toString();
				System.out.println(queryString);
				list.add(getStringContentFromURL(queryString));
			}
			for (String result : list) {
				JSONObject jsonContent = new JSONObject(result);
				JSONObject responseData = jsonContent
						.getJSONObject("responseData");
				JSONArray results = responseData.getJSONArray("results");
				for (int i = 0; i < results.length(); i++) {
					JSONObject jsonObject = results.getJSONObject(i);
					String url = jsonObject.getString("url");
					returnedList.add(url);
				}
			}
			Gson gson = new Gson();
			String jsonResult = gson.toJson(returnedList);
			response.setContentType("application/json; charset=utf-8");
			response.setHeader("pragma", "no-cache");
			response.setHeader("cache-control", "no-cache");
			PrintWriter out = response.getWriter();
			out.print(jsonResult);
			out.flush();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
	public  String getStringContentFromURL(String queryString)
			throws Exception {
		URL url = new URL(queryString);
		URLConnection conn = url.openConnection();
		InputStream is = conn.getInputStream();
		InputStreamReader isr = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(isr);
		StringBuffer buffer = new StringBuffer();
		String line = null;
		while (null != (line = br.readLine())) {
			buffer.append(line);
		}
		br.close();
		isr.close();
		is.close();
		return buffer.toString();
	}
}

 再截张图看看


不足之处还有很多,欢迎指正与批评。批评QQ:三2八二四7六七六

 

 

  • 大小: 380.1 KB
  • 大小: 489.4 KB
3
2
分享到:
评论
5 楼 swjtu_s 2012-08-11  
问下google image search有每天访问限制吧,楼主能说下你怎么解决的么?
而且现在的image search好像url不是这样的了
4 楼 记事本 2012-04-27  
不支持中文哦。。。
3 楼 hongsongyong 2012-03-31  
好像中文不行嘛
2 楼 webhaifeng 2012-03-07  
  最近也是在做这个例子
1 楼 923080512 2011-11-17  

相关推荐

    JAVA上百实例源码以及开源项目源代码

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

    java开源包8

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包1

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包11

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包2

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包3

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包6

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包5

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包10

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包4

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包7

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包9

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    java开源包101

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

    Java资源包01

    目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。 Java的命令行处理类库 JArgs JArgs 是一个 Java 语言用来...

Global site tag (gtag.js) - Google Analytics