一、https://developers.google.com/image-search/v1/jsondevguide
参考以上网址,了解Google iamge search的基本格式。
二、http://www.flickr.com/services/api/response.json.html
参考以上网址,了解Flickr的基本格式。
三、
以上是页面的运行效果。
前台页面:index.jsp主要代码
<script type="text/javascript" src="scripts/jquery-1.4.4.js"></script>
<script type="text/javascript">
$(function()
{
$("#button1").click(function()
{
$.get("GetImageServlet",
{
categoryName: $("#categoryName").val(),
picSource: $("input[name=picSource]:checked").val()//得到input标签name属性为picSource并且被选中的值
}, function(returnedData, status)
{
$("#div1").empty();
var html = "";
for(var i = 0; i < returnedData.length; i++)
{
html += "<img src='" + returnedData[i] + "' width='150' height='150'>";
}
$("#div1").append(html);
});
});
$("#button2").click(function()
{
$("#div2").html("<font color='red'>process...</font>");
$.post("SaveImageServlet",{},function(){
});
});
});
</script>
<body>
<input type="text" id="categoryName">
<input type="radio" name="picSource" value="google" checked>Google
<input type="radio" name="picSource" value="flickr">Flickr
<input type="button" value="click" id="button1">
<input type="button" value="save" id="button2">
<div id="div2"></div>
<div id="div1"></div>
</body>
图片获取程序用一个servlet处理。
GetImageServlet代码如下:
public class GetImageServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
try
{
String categoryName = req.getParameter("categoryName");
String picSource = req.getParameter("picSource");
List<String> returnedList = new ArrayList<String>();
HttpSession session = req.getSession();
session.setAttribute("categoryName", categoryName);
session.setAttribute("picSource", picSource);
session.setAttribute("images", returnedList);
if ("google".equals(picSource))
{
List<String> list = new ArrayList<String>();
for (int i = 0; i < 8; i++)
{
String queryString = new StringBuffer(Constant.GOOGLE_URL)
.append("q=").append(categoryName)
.append("&start=").append(8 * i).toString();
list.add(NetworkUtil.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);
}
}
}
//flickr
else
{
String urlString = Constant.FLICKR_URL + "tags=" +categoryName;
String jsonContent = NetworkUtil.getStringContentFromURL(urlString);
jsonContent = jsonContent.substring(14,jsonContent.length()-1);
JSONObject jsonObject = new JSONObject(jsonContent);
JSONArray jsonArray = jsonObject.getJSONObject("photos").getJSONArray("photo");
for(int i = 0; i < jsonArray.length(); i ++)
{
JSONObject object = jsonArray.getJSONObject(i);
String id = object.getString("id");
int farmId = object.getInt("farm");
String serverId = object.getString("server");
String secretId = object.getString("secret");
StringBuffer buffer = new StringBuffer();
buffer.append("http://farm").append(farmId).append(
".static.flickr.com/").append(serverId).append("/")
.append(id).append("_").append(secretId).append(
".jpg");
returnedList.add(buffer.toString());
}
}
Gson gson = new Gson();
String jsonResult = gson.toJson(returnedList);
resp.setContentType("application/json; charset=utf-8");
resp.setHeader("pragma", "no-cache");
resp.setHeader("cache-control", "no-cache");
PrintWriter out = resp.getWriter();
out.print(jsonResult);
out.flush();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
图片保存SaveImageServlet代码如下:
public class SaveImageServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
HttpSession session = req.getSession();
String categoryName = (String) session.getAttribute("categoryName");
String picSource = (String) session.getAttribute("picSource");
List<String> list = (List<String>)session.getAttribute("images");
String path = req.getSession().getServletContext().getRealPath("/storeImage");
File directory = new File(path,picSource + "/" + categoryName);
directory.mkdirs();
String[] array = null;
for(int i = 0;i < list.size();i ++)
{
array = new String[1];
String imageUrl = list.get(i);
int position = imageUrl.lastIndexOf("/");
String imageName = imageUrl.substring(position+1);
File file = new File(directory,imageName);
array[0] = imageUrl;
new SaveImageThread(directory, array).start();
//NetworkUtil.write2LocalFormInternet(imageUrl, file);
}
resp.getWriter().print("success");
resp.getWriter().flush();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doPost(req, resp);
}
}
用到的多线程SaveImageThread代码如下:
public class SaveImageThread extends Thread{
private File directory;
private String[] imageUrls;
public SaveImageThread(File directory,String[] imageUrls)
{
this.directory = directory;
this.imageUrls = imageUrls;
}
@Override
public void run() {
long startTime = System.currentTimeMillis();
try {
for(String imageUrl : imageUrls)
{
int options = imageUrl.lastIndexOf("/");
String imageName = imageUrl.substring(options + 1);
File file = new File(directory, imageName);
NetworkUtil.write2LocalFormInternet(imageUrl, file);
}
} catch (Exception e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println(this.getName()+ ": " + (endTime - startTime));
}
}
用到的其他自定义的工具类Constant、NetworkUtil:
constant代码如下(图片源链接地址,都用到了key值):
public class Constant
{
public static final String
GOOGLE_URL= "http://ajax.googleapis.com/ajax/services/search/images?key=ABQIAAAAHMkDJuY1vzGaqUjliVAN-RSo6_Y-lPd_7a5rWdJRsISKKsAXgBQyI4z9PBvV4NjKXO02MH68cek4yA&rsz=large&v=1.0&";
public static final String
FLICKR_URL= "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=f3b43f6fa55b9b17935d65c7170b9a60&extras=original_format&per_page=100&format=json&";
}
NetworkUtil的代码如下:
public class NetworkUtil
{
public static 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();
}
public static void write2LocalFormInternet(String imageUrl,File file)throws Exception
{
InputStream is = null;
OutputStream os = null;
try
{
URL url = new URL(imageUrl);
is = url.openStream();
os = new FileOutputStream(file);
int length = -1;
byte[] buffer = new byte[7092];
while(-1 != (length = is.read(buffer,0,7092)))
{
os.write(buffer,0,length);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(is != null)
is.close();
if(os != null)
os.close();
}
}
以上完,详情参考其他资料。谢谢!
相关推荐
制作的jsp一个实例,采用google、flickr的image服务,搜索图片,然后保存到本地
flickr-uploader, 上传一个媒体目录到 Flickr,作为你本地存储的备份 flickr上传器上传一个媒体目录到 Flickr,作为你本地存储的备份。有兴趣帮助管理请求请求和问题? 我需要一个或者多个协作者,因为我不再积极...
基于Python的关于Flickr图片网站的爬虫
基于Python的关于Flickr图片网站的爬虫.pdf
做上传图片功能的时候,经常会遇到这样一个问题,有时候可能需要一次上传多张图片,而用html中默认的上控件,却只能选定一个文件,且不能对文件的后缀进行筛选。需要一次上传多个文件的需求,往往可以通过添加多个...
自己做的用SOAP和REST实现的一个可以实现上传照片、浏览照片等功能的简易网站
基于jquery的Flickr图片外链相册API可支持分类与全屏显示
关于如何处理Flickr网站照片地理信息数据的论文
php实现firfox的Flickr插件
flickr 用于获取 flickr XML 图像提要的 ASP .NET Web 应用程序。
IOS应用源码之将视频分享到vimeo和flickr .rar
可以批量下载一个flickr链接下的所有图片,这个链接可以是一张图片,可以是一个相册,也可以是一个作者。还支持其它图片库的图片批量下载(但本人没有验证过,主要用来下载flickr的图片)。
Bulk Image Downloader 是一款优秀的多线程网络图片批量图片下载工具,功能类似Extreme Picture Finder,支持屏蔽网站中包含的烦人的广告或弹窗,只需三步就能把任意包含图片的网址从中把图片下载或保存到用户本地...
IOS应用源码——将视频分享到youtube,vimeo,facebook和flickr.zip
ios应用源码之将视频分享到youtube,vimeo,facebook和flickr
Flickr是用户分享图片和视屏的社交网络,在此数据集中,每一个节点都是Flickr中的用户,每一条边都是用户之间的好友关系。另外,每一个节点都有标签,用于标识用户的兴趣小组
FlickrApp 它通过其 api 从 flickr 获取数据并将其显示在列表视图和图像视图中。 图像的获取是通过使用异步任务完成的。 这是实验室任务的一部分。 该应用程序的屏幕截图可以在 - 上看到
Flickr Droid Google Play链接: : Flickr Droid是Android应用程序,它使用Flickr API( )从Flickr.com获得对... Gson( )-一个Java库,可用于将Java对象转换为其JSON表示形式。 OkHttp( )-帮助处理REST请求。
Flickr SWC格式文件,包涵获取FlickrAPI的方法,类库等,官方