Nesse artigo você vai aprender como integrar seu app com o Gravatar para exibir Avatar dos usuários.
Demo
O que é o Gravatar?
Um Avatar é uma imagem que te representa online. É uma foto que aparece próximo ao seu nome e ao você interagir com sites ou blogs.
O Gravatar é uma plataforma para criar avatar mundialmente conhecida (Globally Recognized Avatar). Nessa plataforma você faz o upload de uma foto e vincula ao seu e-mail e esta imagem é automaticamente exibida nos websites que fazem a integração que eu vou mostrar nesse tutorial.
O Gravatar é um serviço gratuito para proprietários de sites, desenvolvedores e usuário e é suportado pela Automattic.
Como implementar?
A API do Gravatar não precisa de autenticação e todos os requestes são feitos via GET.
As URLs do Gravatar são baseadas em um hash md5. Você precisa seguir esses passos para gerar a URL.
- Remover os espaços em branco
- Forçar todos os caracteres para minusculo (lower-case)
- Gerar o hash md5
var email = 'Contato@fabricadecodigo.com' email = email.trim(); // removendo espaços em branco email = email.toLowerCase(); // forçando tudo para minusculo var hash = md5(email);
Como gerar o hash md5
Como nesse exemplo o app será web, eu vou utilizar a biblioteca JavaScript MD5 para gerar o hash.
Para usar basta fazer o download no site clicando aqui.
No Client-side importa o javascript:
<script src="js/md5.min.js"></script>
No código do app, calcule o hash MD5 de uma string chamando o método md5 passando uma string por parâmetro:
var hash = md5("value"); // "2063c1608d6e0baf80249c42e2be5804"
Se você estiver utilizando outra linguagem de programação, você pode ver os exemplos diretamente no site do Gravatar clicando aqui.
A URL base para o request
A url basica para fazer o request no Gravatar é a abaixo:
https://www.gravatar.com/avatar/HASH
Onde “HASH” é substituído pelo hash md5 criado a partir do e-mail do usuário.
https://www.gravatar.com/avatar/205e460b479e2e5b48aec07710c08d50
Logo depois de montar a url basta incluir na atributo src da tag img do html:
<img src="https://www.gravatar.com/avatar/205e460b479e2e5b48aec07710c08d50" />
Parâmetros adicionais
O Gravatar tem alguns parâmetros que podem ser passados na URL para definir tamanho, imagem padrão (para quando o usuário não tem um Gravatar) e classificação.
Tamanho
Tamanho padrão, caso não seja passado na URL, é de 80px. Para recuperar a imagem já no tamanho necessário para o seu app, basta passar o parâmetro s= ou size= na url.
https://www.gravatar.com/avatar/205e460b479e2e5b48aec07710c08d50?s=200
Imagem padrão
A imagem padrão do Gravatar é a abaixo:
Porem você pode exibir uma dessas opções como imagem padrão: 404, mm, identicon, monsterid, wavatar, retro e blank.
O valor 404 não carrega nenhuma imagem e o servidor do Gravatar devolve o status 404 (Nenhuma página encontrada). Já os outros valores retornam as imagens abaixo, caso o hash passado não corresponda a nenhuma imagem.
O parâmetro utilizado para exibir as imagens acima é o d=.
https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm
Classificação
O Gravatar permite que os usuários classifiquem suas imagens em 4 tipos:
- g: Adequado para exibição em todos os sites com qualquer tipo de público-alvo.
- pg: Pode conter gestos rudes, indivíduos com rupas provocantes, com palavões ou violência moderada.
- r: Pode conter coisas como profanidade áspera, violência intensa, nudez, ou uso de drogas.
- x: Pode conter imagens sexuais ou violência extremamente perturbadora.
O parâmetro utilizado para exibir somente imagens com a classificação que você deseja é o r= ou rating=.
https://www.gravatar.com/avatar/205e460b479e2e5b48aec07710c08d50?r=g
Combinação de parâmetros
O Gravatar permite que você combine todos os parâmetros acima e faça apenas um request. No exemplo abaixo todos os parâmetros estão sendo utilizados:
https://www.gravatar.com/avatar/205e460b479e2e5b48aec07710c08d50?s=200&r=g&d=mm
Criando o app de exemplo
index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> <title>Gravatar</title> <!-- Bootstrap --> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <link href="style.css" rel="stylesheet" /> </head> <body ng-app="app"> <div class="container" ng-controller="GravatarController as vm"> <div class="row"> <div class="center-block profile"> <p class="text-center"> <img src="{{ vm.imgUrl }}" class="img-rounded" /> </p> <hr> <form novalidate> <div class="form-group"> <label>E-mail</label> <input type="email" class="form-control" ng-model="vm.model.email" /> </div> <div class="form-group"> <label>Classificacao</label> <select class="form-control" ng-model="vm.model.rating"> <option value="g">G</option> <option value="pg">PG</option> <option value="r">R</option> <option value="x">X</option> </select> </div> <div class="form-group"> <label>Tamanho</label> <input type="number" class="form-control" ng-model="vm.model.size" min="0" max="2048" step="1" /> </div> <button type="submit" class="btn btn-primary" ng-click="vm.loadImg();">Carregar imagem</button> <button type="submit" class="btn btn-primary" ng-click="vm.reset();">Reset</button> </form> </div> </div> </div> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <!--Javascript MD5--> <script src="md5.min.js"></script> <!--AngularJS--> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular-route.min.js"></script> <!--App--> <script src="app.js"></script> <script src="gravatar.ctrl.js"></script> </body> </html>
app.js
'use strict'; // Declare app level module which depends on views, and components angular.module('app', [ 'ngRoute' ]) .config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) { $routeProvider.otherwise({redirectTo: '/'}); }]);
style.css
body { background: #f5f5f5; } .profile { width: 400px; padding: 10px 20px 10px 20px; margin-top: 20px; background: #fff; box-shadow: 0 1px 6px 1px rgba(0,0,0,0.2); } .widget_mailchimpsf_widget { padding: 10px; background: #EEE; color: #000; border: 3px dashed #6B6B6B; }
gravatar.ctrl.js
angular.module('app').controller('GravatarController', GravatarController); function GravatarController() { var vm = this; vm.model = { email: '', rating: 'g', size: 80, default: 'd' }; vm.imgUrl = 'https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm&s=200'; vm.loadImg = loadImg; vm.reset = reset; function loadImg() { if (vm.model.email) { // Criando o hash var hash = md5(vm.model.email.trim().toLowerCase()); // Montando a url var url = 'https://www.gravatar.com/avatar/'; url += hash; url += '?'; url += 'r=' + vm.model.rating; if (vm.model.size > 0) { url += '&s=' + vm.model.size; } url += '&d=mm'; vm.imgUrl = url; } } function reset() { // exibindo a imagem padrão vm.imgUrl = 'https://www.gravatar.com/avatar/00000000000000000000000000000000?d=mm&s=200'; } }
Referências
- Gravatar – https://www.gravatar.com/
- Javascript MD5 – https://blueimp.github.io/JavaScript-MD5/
Eu espero que esse tutorial tenha sido útil para você. Qualquer dúvida deixe seu comentário abaixo.