|
<< Click to Display Table of Contents >> Exemplo completo - Picasa |
![]() ![]()
|
Objetivo
Projeto completo de visualizador de albuns de uma conta do Picasa
Tela principal - álbuns

Tela visualizando fotos de um álbum

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<style type="text/css">
.album
{
float: left;
width: 250px;
display: inline;
float: left;
margin: 10px;
text-align: center;
}
.album img
{
margin-top: 10px;
padding: 4px;
border: 1px solid black;
}
.album h3
{
line-height: 0.1em;
}
.album p
{
line-height: 0.4em;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListView ID="lvAlbuns" runat="server">
<ItemTemplate>
<div class="album">
<a href='Album.aspx?id=<%# Eval("id") %>'>
<asp:Image ID="ImgMiniatura" ImageUrl='<%# Eval("imagem") %>' runat="server" BorderStyle="None" />
</a>
<h3>
<a href='Album.aspx?id=<%# Eval("id") %>'>
<%# Eval("titulo") %></a>
</h3>
<p>
<strong>
<%# Eval("data") %></strong> (<%#Eval("nfotos") %>
fotos)</p>
</div>
</ItemTemplate>
</asp:ListView>
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using Google.Picasa;
using Google.GData.Photos;
using System.Data;
namespace WebApplication2
{
public partial class Default : System.Web.UI.Page
{
private DataTable tabela;
protected void Page_Load(object sender, EventArgs e)
{
// popula a tabela com os alguns do usuario
GetAlbuns();
// toca tudo para o ListView
lvAlbuns.DataSource = tabela;
lvAlbuns.DataBind();
}
private void Add(string id, string titulo, string imagem, int nfotos, DateTime data)
{
// função auxiliar para ajudar a inserir dados
DataRow dr = tabela.NewRow();
dr["id"] = id;
dr["titulo"] = titulo;
dr["imagem"] = imagem;
dr["nfotos"] = nfotos;
dr["data"] = data.ToString("dd-MMM-yy");
tabela.Rows.Add(dr);
}
private void GetAlbuns()
{
// cria as colunas e tipos
tabela = new DataTable();
tabela.Columns.Add(new DataColumn("id", Type.GetType("System.String")));
tabela.Columns.Add(new DataColumn("titulo", Type.GetType("System.String")));
tabela.Columns.Add(new DataColumn("imagem", Type.GetType("System.String")));
tabela.Columns.Add(new DataColumn("nfotos", Type.GetType("System.Int32")));
tabela.Columns.Add(new DataColumn("data", Type.GetType("System.String")));
// insere dados
ObterAlbunsPicasa();
// ordena por data desc
DataView v = tabela.DefaultView;
v.Sort = "data desc, titulo asc";
tabela = v.ToTable();
}
// lista todos os álbuns do usuário
private void ObterAlbunsPicasa()
{
// obtem os albuns
AlbumQuery query = new AlbumQuery(PicasaQuery.CreatePicasaUri(Logon.USUARIO_PICASA));
PicasaFeed feed = Logon.GetPicasaService().Query(query);
// percorre cada album
foreach (PicasaEntry entry in feed.Entries)
{
Google.Picasa.Album album = new Google.Picasa.Album();
album.AtomEntry = entry;
// adiciona num table
Add(album.Id, album.Title, (string)entry.Media.Thumbnails[0].Attributes["url"], (int)album.NumPhotos, album.Updated);
}
}
}
}
Album.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Album.aspx.cs" Inherits="WebApplication2.Album" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<style type="text/css">
.foto
{
float: left;
width: 250px;
display: inline;
float: left;
margin: 10px;
text-align: center;
}
.foto img
{
margin-top: 10px;
padding: 4px;
border: 1px solid black;
}
.foto p
{
line-height: 0.4em;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListView ID="lvFotos" runat="server">
<ItemTemplate>
<div class="foto">
<a href='<%# Eval("url") %>'>
<asp:Image ID="ImgMiniatura" ImageUrl='<%# Eval("miniatura") %>' runat="server" BorderStyle="None" />
</a>
<p>
<a href='<%# Eval("url") %>'>
<%# Eval("titulo") %></a>
</p>
</div>
</ItemTemplate>
</asp:ListView>
</div>
</form>
</body>
</html>
Album.aspx.cs
using System;
using Google.GData.Photos;
using System.Data;
namespace WebApplication2
{
public partial class Album : System.Web.UI.Page
{
private DataTable tabela;
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["id"] == null)
{
Response.Write("Nenhum ID passado por parâmetro");
}
else
{
CriarTabela();
GetFotosPicasa();
// toca tudo para o ListView
lvFotos.DataSource = tabela;
lvFotos.DataBind();
}
}
private void Add(string titulo, string url, string miniatura)
{
// função auxiliar para ajudar a inserir dados
DataRow dr = tabela.NewRow();
dr["titulo"] = titulo;
dr["url"] = url;
dr["miniatura"] = miniatura;
tabela.Rows.Add(dr);
}
private void CriarTabela()
{
// cria as colunas e tipos
tabela = new DataTable();
tabela.Columns.Add(new DataColumn("titulo", Type.GetType("System.String")));
tabela.Columns.Add(new DataColumn("url", Type.GetType("System.String")));
tabela.Columns.Add(new DataColumn("miniatura", Type.GetType("System.String")));
}
// função retornar as fotos de um álbum com base em seu ID
public void GetFotosPicasa()
{
// pesquisa pelas fotos usando um PhotoQuery
PhotoQuery queryfoto = new PhotoQuery(PicasaQuery.CreatePicasaUri(Logon.USUARIO_PICASA, Request.QueryString["id"]));
PicasaFeed feedfoto = Logon.GetPicasaService().Query(queryfoto);
// pra cada foto, joga num datatable
foreach (PicasaEntry entry in feedfoto.Entries)
Add(entry.Title.Text, (string)entry.Media.Content.Attributes["url"], (string)entry.Media.Thumbnails[1].Attributes["url"]);
}
}
}
Logon.cs
using Google.GData.Photos;
namespace WebApplication2
{
public static class Logon
{
private static PicasaService service;
public const string USUARIO_PICASA = "cabanha.guinther";
private const string SENHA_PICASA = "guinther123";
// esta rotina retorna um "service" que conectar no servico do picasa usando usuário e senha
public static PicasaService GetPicasaService()
{
if (service == null)
{
service = new PicasaService("Picasa");
service.setUserCredentials(USUARIO_PICASA, SENHA_PICASA);
}
return service;
}
}
}