`
shjie5246
  • 浏览: 11240 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
最近访客 更多访客>>
社区版块
存档分类
最新评论

java取picasa web相册

    博客分类:
  • java
阅读更多
PicasaTestAction:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

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

import org.apache.struts2.ServletActionContext;

import com.google.gdata.client.photos.PicasawebService;
import com.google.gdata.data.Link;
import com.google.gdata.data.photos.AlbumEntry;
import com.google.gdata.data.photos.AlbumFeed;
import com.google.gdata.data.photos.GphotoEntry;
import com.google.gdata.data.photos.PhotoEntry;
import com.google.gdata.data.photos.UserFeed;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;
import com.opensymphony.xwork2.ActionSupport;
import com.picasa.storage.PhotoInfo;

public class PicasaTestAction extends ActionSupport
{
	private static final long serialVersionUID = -3709074572710209488L;

	private static final String API_PREFIX = "http://picasaweb.google.com/data/feed/api/user/";

	private static final String RESULT = "RESULT";
	private static final String FAIL = "FAIL";

	/**
	 * 取picasa相册
	 */
	public String execute() throws ServletException, IOException
	{
		HttpServletRequest request = ServletActionContext.getRequest();

		String emailAddress = request.getParameter("emailAddress");
		String passWord = request.getParameter("password");
		String realPath = request.getRealPath("/image");
		
		if (null == emailAddress || null == passWord)
		{
			return FAIL;
		}
		
		Map<String, List<PhotoInfo>> albumPhotos = generatePhoto(emailAddress, passWord, realPath);
		request.setAttribute("albumPhotos", albumPhotos);
		return RESULT;
	}

	/**
	 * 返回所有的相册和相片的信息
	 * @param emailAddress
	 * @param passWord
	 * @param realPath
	 * @return
	 * @throws IOException
	 */
	public Map<String, List<PhotoInfo>> generatePhoto(String emailAddress,
			String passWord, String realPath) throws IOException
	{
		try
		{
			PicasawebService picasaService = buildPicasaWebService("Picasa", emailAddress, passWord);
			List<AlbumEntry> albums = getAlbums(picasaService, emailAddress);
			Map<String, List<PhotoInfo>> albumPhotos = new Hashtable<String, List<PhotoInfo>>();
			for (AlbumEntry albumEntry : albums) //相册
			{
				List<PhotoEntry> photoEntrys = getPhotos(picasaService,	albumEntry);
				if (photoEntrys.size() > 0)
				{
					List<PhotoInfo> photos = new ArrayList<PhotoInfo>();
					for (PhotoEntry photoEntry : photoEntrys) //相片
					{
						//原图
						PhotoInfo photoInfo = new PhotoInfo();
						
						String originalName = writeImage(photoEntry
							.getMediaContents().get(0).getUrl(), realPath, true);
						
						photoInfo.setAlbumName(albumEntry.getTitle().getPlainText());
						
						photoInfo.setPhotoName(originalName);
						
						photoInfo.setPhotoDesc(photoEntry.getDescription().getPlainText());
						
						photos.add(photoInfo);
					}
					albumPhotos.put(albumEntry.getTitle().getPlainText(), photos);
				}
			}
			return albumPhotos;
		}
		catch (ServiceException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		return new Hashtable<String, List<PhotoInfo>>();
	}

	/**
	 * 取得相册
	 * @param picasaService
	 * @param username
	 * @return
	 * @throws IOException
	 * @throws ServiceException
	 */
	@SuppressWarnings("unchecked")
	public List<AlbumEntry> getAlbums(PicasawebService picasaService,
			String username) throws IOException, ServiceException
	{

		String albumUrl = API_PREFIX + username;

		UserFeed userFeed = picasaService.getFeed(new URL(albumUrl),
			UserFeed.class);

		List<GphotoEntry> entries = userFeed.getEntries();

		List<AlbumEntry> albums = new ArrayList<AlbumEntry>();
		for (GphotoEntry entry : entries)
		{
			GphotoEntry adapted = entry.getAdaptedEntry();
			if (adapted instanceof AlbumEntry)
			{
				albums.add((AlbumEntry) adapted);
			}
		}
		return albums;
	}

	/**
	 * 取得相片
	 * @param picasaService
	 * @param album
	 * @return
	 * @throws IOException
	 * @throws ServiceException
	 */
	@SuppressWarnings("unchecked")
	public List<PhotoEntry> getPhotos(PicasawebService picasaService,
			AlbumEntry album) throws IOException, ServiceException
	{

		String feedHref = getLinkByRel(album.getLinks(), Link.Rel.FEED);
		AlbumFeed albumFeed = picasaService.getFeed(new URL(feedHref),
			AlbumFeed.class);

		List<GphotoEntry> entries = albumFeed.getEntries();
		List<PhotoEntry> photos = new ArrayList<PhotoEntry>();
		for (GphotoEntry entry : entries)
		{
			GphotoEntry adapted = entry.getAdaptedEntry();
			if (adapted instanceof PhotoEntry)
			{
				photos.add((PhotoEntry) adapted);
			}
		}
		return photos;
	}

	/**
	 * 取得相册的连接
	 * @param links
	 * @param relValue
	 * @return
	 */
	public String getLinkByRel(List<Link> links, String relValue)
	{
		String linkStr = null;
		for (Link link : links)
		{
			if (relValue.equals(link.getRel()))
			{
				linkStr = link.getHref();
			}
		}
		return linkStr;
	}

	/**
	 * 把相片保存到本地
	 * @param urlAddress
	 * @param realPath
	 * @param isThumbnail
	 * @return
	 */
	public String writeImage(String urlAddress, String realPath,
			boolean isThumbnail)
	{
		BufferedInputStream bis = null;
		OutputStream bos = null;
		String fileName = null;
		try
		{
			URL url = new URL(urlAddress);
			bis = new BufferedInputStream(url.openStream());
			fileName = getFileName(urlAddress);
			byte[] bytes = new byte[1024];
			File file = new File(realPath + "\\" + fileName);
			if (!file.isFile()) //如果已经存在直接返回该文件名
			{
				bos = new FileOutputStream(file);
				int len;
				while ((len = bis.read(bytes)) > 0)
				{
					bos.write(bytes, 0, len);
				}
			}
			return fileName;
		}
		catch (MalformedURLException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				if (null != bos)
				{
					bos.flush();
					bos.close();
				}
				if (null != bis)
				{
					bis.close();
				}
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 取得相片的文件名
	 * @param urlAddress
	 * @return
	 */
	public String getFileName(String urlAddress)
	{
		int lastURLSeparater = urlAddress.lastIndexOf("/");
		return urlAddress.substring(lastURLSeparater + 1);

	}

	/**
	 * 通过appName,emailAddress,passWord返回PicasawebService对象
	 * @param appName
	 * @param emailAddress
	 * @param password
	 * @return
	 * @throws AuthenticationException
	 */
	public PicasawebService buildPicasaWebService(String appName,
			String emailAddress, String passWord)
			throws AuthenticationException
	{
		PicasawebService picasaService = new PicasawebService(appName);
		picasaService.setUserCredentials(emailAddress, passWord);
		return picasaService;
	}
}


PhotoInfo:
public class PhotoInfo
{
	/*
	 * 相片所属的相册
	 */
	private String albumName;
	
	/*
	 * 相片的名称
	 */
	private String photoName;
	
	/*
	 * 相片的描述
	 */
	private String photoDesc;
	
	/*
	 * 相片的个数
	 */
	private String photoNumber;

	/**
	 * getter方法
	 */
	public String getAlbumName()
	{
		return albumName;
	}
	
	/**
	 * setter方法
	 */
	public void setAlbumName(String albumName)
	{
		this.albumName = albumName;
	}

	/**
	 * getter方法
	 */
	public String getPhotoName()
	{
		return photoName;
	}

	/**
	 * setter方法
	 */
	public void setPhotoName(String photoName)
	{
		this.photoName = photoName;
	}

	/**
	 * getter方法
	 */
	public String getPhotoDesc()
	{
		return photoDesc;
	}

	/**
	 * setter方法
	 */
	public void setPhotoDesc(String photoDesc)
	{
		this.photoDesc = photoDesc;
	}

	/**
	 * getter方法
	 */
	public String getPhotoNumber()
	{
		return photoNumber;
	}

	/**
	 * setter方法
	 */
	public void setPhotoNumber(String photoNumber)
	{
		this.photoNumber = photoNumber;
	}
}
分享到:
评论
3 楼 lwx123 2011-03-23  
PicasawebService myService = new PicasawebService("exampleCo-exampleApp-1");
myService.setUserCredentials("liz@gmail.com", "mypassword");
怎么在构造这里的时候报异常咧!


03-23 05:38:04.405: ERROR/dalvikvm(276): Could not find class 'com.google.gdata.data.media.MediaSource', referenced from method com.google.gdata.wireformats.input.media.MediaParser.parse
2 楼 shjie5246 2011-01-05  
不需要配置什么,只要把用到的第三方包放到所在的工程下就可以了
1 楼 ankang2577 2010-12-13  
我是一个java开发新手,楼主能给出如何在eclipse中配置Google Picasa API的流程吗

相关推荐

    picasaweb-current-setup.zip

    Picasa是一款由Google开发的图像管理和编辑软件,它的全称是“Picasa Web Albums”。这款工具在图像管理领域非常受欢迎,因其简洁易用的界面和强大的功能而备受好评。Picasa不仅可以帮助用户在本地计算机上组织和...

    picasaweb

    Google PicasaWeb(网络相册),很不错的

    picasa3相册-setup.exe

    最新最好用的picasa管理相册工具! picasa3相册-setup.exe

    Java Picasaweb UI-开源

    Java Picasaweb UI是一个基于Java Swing开发的开源项目,其设计目的是为了提供对Google的Picasa网络相册服务的全面访问接口。这个UI工具允许用户与Picasaweb相册进行交互,执行多种操作,包括但不限于: 1. **连接...

    use pwa to access Google picasaweb

    标题中的“use pwa to access Google picasaweb”指的是使用渐进式Web应用程序(Progressive Web App,简称PWA)来访问Google的Picasa网络相册服务。Picasa是Google提供的一款在线照片管理和分享应用,而PWA则是一种...

    Google Picasa相册辅助工具

    "Google Picasa相册辅助工具"是针对这款软件的一个补充工具,专为处理Picasa相册中的图片链接,尤其是帮助用户进行批量处理[IMG]标签的转换。 在网页上展示图片时,[IMG]标签是一种常见的HTML语法,用于嵌入图像。...

    picasaweb-current-setup.exe

    picasaweb-current-setup.exe

    Picasa谷歌相册管理软件 v3.9.0.136.12.zip

    每次打开 Picasa 时,它都会自动查找所有图片(甚至是那些您已经遗忘的图片),并将它们按日期顺序放在可见的相册中,同时以您易于识别的名称命名文件夹。您可以通过拖放操作来排列相册,还可以添加标签来创建新组。...

    Picasa管理工具

    6. **图片分享**:Picasa支持直接上传图片到Google Photos(原Google Picasa Web Albums),让用户可以在线分享照片给朋友和家人,或设置公开分享链接。 7. **视频播放**:除了图片管理,Picasa还能够识别并播放...

    picasawebalbumdownloader:一个能够下载整个 PicasaWeb 相册的简单应用程序

    picasa网络相册下载器 什么是 Picasa 网络相册下载器? 其目的是能够从 picasa 下载整个专辑。 它是 google for windows 的 Picasa 2.0 或 mac 新发布的 iPhoto 的替代品。

    GooglePicasa3picasa网络相册V3.9.0Build(141.259)谷歌图像浏览器官方安装版

    很强大的功能,如果你的...每次打开 Picasa 时,它都会自动查找所有图片(甚至是那些您已经遗忘的图片),并将它们按日期顺序放在可见的相册中,同时以您易于识别的名称命名文件夹.您可以通过拖放操 作来排列相册,还* Fac

    picasa网络相册· 照片管理

    是一款步错的这些好片安慰她·奇文共赏企业和统计2

    PicasaWeb Mobile-开源

    PicasaWeb Mobile,这个基于J2ME(Java 2 Micro Edition)技术的应用程序,为移动设备用户提供了在掌上欣赏Picasaweb照片的便利。Picasaweb,作为Google旗下的一款在线照片管理和分享服务,让用户可以轻松上传、组织...

    谷歌相册管理软件Picasa3.9.136.180

    Picasa(谷歌相册管理软件)是一个可在计算机上查看、整理、修改和共享数码照片的软件,它会让所有这些工作变得简单而有趣。Picasa 不会未经您的允许就删除照片或将照片放到网络上。 - 自动将你的相片从你的数码相机...

    picasa3.exe

    同时,Picasa Web Albums还支持创建网络相册,让照片分享跨越地域限制。 然而,随着技术的发展和谷歌战略的调整,Picasa于2016年正式停止服务。谷歌推荐用户转向更加现代化的Google Photos,后者提供了无限的云端...

    Simple Picasaweb Face-开源

    标题“Simple Picasaweb Face-开源”指出,这是一个基于PHP的开源项目,旨在帮助用户在其个人网站上展示来自Picasaweb的相册和图片。Picasaweb是Google提供的一项服务,允许用户上传、管理和分享照片。由于这个项目...

    Picasa 3.9.0.136.9 提取版

    6. **分享与打印**:Picasa支持将照片直接上传到Google Photos(以前的Picasa Web Albums),并与朋友和家人共享。此外,用户还可以直接从软件内打印照片,或者制作成相册、贺卡等。 7. **面部识别**:软件内置的...

Global site tag (gtag.js) - Google Analytics