一、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这两个知名的图片服务平台上获取并下载图片,然后将这些图片保存到本地。下面我们将深入探讨相关的知识点。 1. **多线程**:多线程编程是...
通过这种方式,研究者和开发者可以轻松地获取到高质量的图片资源,并将其应用于各种数据处理和分析任务中。 总结来说,基于Python的Flickr爬虫程序的开发和应用,不仅展示了Python语言在数据抓取方面的强大能力,也...
“下载”则说明了主要操作,即从flickr获取图片并保存到本地。 压缩包子文件的文件名“WebDownloaderWpf_build467_Setup”可能是指该工具的安装程序。"WebDownloaderWpf"很可能代表这是一个基于Windows ...
在开始编写爬虫之前,我们需要明确目标:确定要爬取的图片类型、大小、标签等信息,并理解Flickr的API(应用程序接口)。Flickr提供了一套RESTful API,允许开发者通过指定的URL和参数获取图片、用户、相册等各种...
总的来说,基于jQuery的Flickr图片外链相册API项目需要理解并应用jQuery的基本操作,熟悉Flickr API的使用,以及具备良好的前端开发技巧,包括HTML、CSS和JavaScript。通过这样的实践,开发者不仅可以提升技术能力,...
本项目"soap和rest的应用flickr"是一个基于这两种技术实现的照片管理网站源代码,让我们深入探讨它们以及在实际应用中的工作原理。 首先,SOAP是一种基于XML的协议,主要用于在Web上交换结构化和类型化的信息。它的...
开发者需要获取API密钥以进行身份验证,并能使用这些密钥进行各种操作,如搜索图片、获取用户信息、上传照片等。 2. **OAuth认证**:由于安全考虑,Flickr使用OAuth协议进行身份验证。OAuth允许用户授权第三方应用...
3. **Flickr API**:上传图片至Flickr需要使用其提供的RESTful API,通过OAuth进行身份验证,获取上传权限,然后使用上传接口POST请求将图片数据发送到Flickr服务器。 4. **OAuth认证**:OAuth是一种授权协议,使得...
《Flickr API在.Net环境中的应用详解》 Flickr API 是一个强大的工具,它允许开发者通过编程方式访问Flickr网站的海量图片库和用户数据。本文将深入探讨如何在.Net环境中利用Flickr API进行开发,结合提供的...
本文将深入解析这个过程涉及的关键知识点,帮助你理解并应用到自己的项目中。 首先,我们要知道iOS中处理视频的基本框架是AVFoundation,它提供了丰富的多媒体处理能力,包括视频录制、编辑和播放。在这个源码中,...
研究者进一步探索了这种结构与内容之间的相互作用,并利用分类方法来根据照片的视觉、文本和时间特征预测其地理位置。结果显示,相比于仅使用文本特征,加入视觉和时间特征能显著提高位置估计的准确性。 #### 应用...
该压缩包文件“IOS应用源码——将视频分享到youtube,vimeo,facebook和flickr.zip”包含了iOS应用开发的相关源代码,主要功能是让用户能够方便地将视频上传并分享到YouTube、Vimeo、Facebook以及Flickr这四大流行的...
8. **流式处理**:通过使用Flickr的“fql.multi”方法,可以一次性获取多个查询的结果,提高效率。 在使用过程中,注意处理可能出现的错误和异常,以及遵守Flickr的使用条款和API限制。通过这种方式,你可以利用...
通过flickr-offloadr,用户可以轻松地获取并保存感兴趣的图片,而无需手动一个接一个地下载。 首先,我们需要理解C#语言在软件开发中的角色。C#是一种面向对象的、现代的编程语言,由微软公司开发,广泛应用于...
flickr-uploader, 上传一个媒体目录到 Flickr,作为你本地存储的备份 flickr上传器上传一个媒体目录到 Flickr,作为你本地存储的备份。有兴趣帮助管理请求请求和问题? 我需要一个或者多个协作者,因为我不再积极...
1. **Flickr API**:学习并理解Flickr的REST API,包括OAuth认证流程,获取访问令牌,以及如何调用不同的API端点来执行照片操作。 2. **C#编程**:熟练运用C#语法,包括类、对象、接口、事件处理等,以及.NET ...
“flickr:用于获取 flickr XML 图像源的 ASP .NET Web 应用程序”这个标题表明,这是一个基于ASP .NET技术构建的Web应用程序,其主要功能是获取并处理来自Flickr的照片数据。Flickr是著名的图片分享网站,提供了丰富...
在这里,我们将会探讨如何使用Flickr API与UICollectionView结合,实现一个可以展示Flickr图片的iOS应用。 首先,为了与Flickr API交互,我们需要获取API密钥。Flickr API提供了多种数据获取方法,如RESTful API和...