.NET - Obtendo e exibindo links de imagens Gravatar


  Neste artigo vou mostrar como podemos o link de imagens Gravatar associado ao email, exibindo as imagens em um componente WebBrowser.

Gravatar, avatar reconhecido globalmente (em inglês, Globally Recognized Avatar), é um serviço de disponibilização de avatares via associação a endereços de correio eletrônico cadastrados, para uma variedade de sites, inclusive os baseados em WordPress.

Com o Gravatar, suas mensagens podem ser facilmente identificadas, em qualquer site que use o recurso, pela imagem que o represente e que você tenha cadastrado no sistema.

No Gravatar, usuários podem registrar uma conta baseada em seu endereço de email, enviar uma imagem para ser usada como avatar e assim ficar associada a sua conta.

Plugins Gravatar estão disponíveis para softwares de blog, assim, quando visitantes publicarem comentários no blog; o software de blog verifica se o email possui uma conta no serviço do Gravatar. Se possuir, o Gravatar é mostrado no comentário do usuário.

Usar imagens de perfil no seu aplicativo obtendo-as através do serviço Gravatar,  é grátis e muito fácil.

Supondo que você já tenha os emails dos seus usuários que esta acompanhando ou dos quais pretenda obter o link da imagem gerada no Gravatar, basta você formar uma URL que aponta para a imagem do perfil do usuário (usando um hash do endereço de email) e usar essa url em seu aplicativo usando uma tag de imagem ou outro componente.

A url tem o seguinte formato :    http://www.gravatar.com/avatar/{hash}

onde hash é o hash do email que deve ser calculado.

Exemplo: http://www.gravatar.com/avatar/73543542128f5a067ffc34305eefe48a

Neste artigo vamos criar um projeto Windows Forms que permite obter o link da imagem associado ao email e exibir a imagem.

Recursos usados :

Criando a solução no VS 2013 Express Edition

Abra o VS 2013 Express for Windows desktop e clique em New Project;

A seguir selecione Visual C# -> Windows Forms Application;

Informe o nome Imagens_Gravatar e clique no botão OK;

Clique no menu PROJECT e em Add Class;

Informe o nome Gravatar.cs e a seguir digite o código baixo nesta classe: (versão C# e VB .NET )

using System.Security.Cryptography;
using System.Text;
namespace Imagens_Gravatar
{
    public static class Gravatar
    {
        public static string GetLinkImagem(string Email) 
        {
            try
            {
               //gera o hash para o email
               string hash = HashEmailGravatar(Email);
               //Monta a url a e retorna
               return string.Format("http://www.gravatar.com/avatar/{0}", hash);
            }
            catch
            {
                throw;
            }
        }
        public static string HashEmailGravatar(string email)
        {
            // Cria uma nova instância do objeto MD5CryptoServiceProvider
            MD5 md5Hasher = MD5.Create();
            // Converte a string para um array de bytes e calcula o hash
            byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(email));
            // Cria um novo Stringbuilder para coletar bytes e cria uma string
            StringBuilder sBuilder = new StringBuilder();
            // Percorre cada byte dos dados e formata cada como uma string hexadecimal
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            //retorna a string 
            return sBuilder.ToString();  
        }
    }
}
Imports System.Security.Cryptography
Imports System.Text
Namespace Imagens_Gravatar
    Public NotInheritable Class Gravatar
        Private Sub New()
        End Sub
        Public Shared Function GetLinkImagem(Email As String) As String
            Try
                'gera o hash para o email
                Dim hash As String = HashEmailGravatar(Email)
                'Monta a url a e retorna
                Return String.Format("http://www.gravatar.com/avatar/{0}", hash)
            Catch
                Throw
            End Try
        End Function
        Public Shared Function HashEmailGravatar(email As String) As String
            ' Cria uma nova instância do objeto MD5CryptoServiceProvider
            Dim md5Hasher As MD5 = MD5.Create()
            ' Converte a string para um array de bytes e calcula o hash
            Dim data As Byte() = md5Hasher.ComputeHash(Encoding.[Default].GetBytes(email))
            ' Cria um novo Stringbuilder para coletar bytes e cria uma string
            Dim sBuilder As New StringBuilder()
            ' Percorre cada byte dos dados e formata cada como uma string hexadecimal
            For i As Integer = 0 To data.Length - 1
                sBuilder.Append(data(i).ToString("x2"))
            Next
            'retorna a string 
            Return sBuilder.ToString()
        End Function
    End Class
End Namespace

Temos aqui uma classe estático com o método estático GetLinkImagem() que recebe o email, calcula o hash e obtém o link da imagem do serviço Gravatar.

Agora vamos criar a interface a partir de onde iremos obter as imagens usando a classe Gravatar.

No formulário padrão form1.cs inclua os seguintes controles:

Disponha os controles conforme o leiaute da figura abaixo:

No evento Click do botão de comando - btnLink -  inclua o código abaixo: (versão C# e VB .NET )

 private void btnLink_Click(object sender, EventArgs e)
  {
            try
            {
                if (!string.IsNullOrEmpty(txtEmail.Text))
                {
                    string link = Gravatar.GetLinkImagem(txtEmail.Text);
                    this.webBrowser1.Url = new Uri(String.Format(link+"?size=120"));
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
   }	
 Private Sub btnLink_Click(sender As Object, e As EventArgs) Handles btnLink.Click
        Try
            If Not String.IsNullOrEmpty(txtEmail.Text) Then
                Dim link As String = Gravatar.GetLinkImagem(txtEmail.Text)
                Me.WebBrowser1.Url = New Uri([String].Format(link & Convert.ToString("?size=120")))
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

 

O código acima verifica se o email foi informado e usa o método GetLinkImagem() para obter o link do email.

A seguir, usando o componente WebBrowser, exibimos a imagem obtida. No exemplo estou aumentando o tamanho da imagem ("?size=120").

Se desejar exibir a imagem no tamanho original basta alterar a linha de código que exibe a imagem conforme abaixo:

                    this.webBrowser1.Url = new Uri(String.Format(link));

Executando o projeto iremos obter o seguinte resultado para o email macoratti@yahoo.com :

Pegue o projeto completo aqui :  Imagens_Gravatar.zip (C#)  Imagens_Gravatar_VBNET.zip (VB .NET)

E esta é a mensagem que dele ouvimos, e vos anunciamos: que Deus é luz, e não há nele trevas nenhumas.
Se dissermos que temos comunhão com ele, e andarmos em trevas, mentimos, e não praticamos a verdade

1 João 1:5,6

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti