He obtenido el servicio Gravatar trabajando en mi sitio. Pero me gustaría saber si el usuario ha subido su foto o no. ¿Hay alguna manera de saber esto?Gravatar: cómo sé si un usuario tiene una imagen real
Respuesta
Al construir la URL, use el parámetro d = 404. Esto hará que Gravatar devuelva un error 404 en lugar de una imagen si el usuario no ha configurado una imagen.
Si está utilizando el control .Net vinculado desde el sitio gravitar, necesitará modificar la enumeración IconSet (y probablemente extraiga el código del control, para que pueda obtener el estado directamente).
Lo que hice:
- generar un gravatar con un no-existente e-mailadress
- Guardar la imagen
- Hacer una suma de comprobación MD5 de los contenidos imágenes y almacenarlo como una constante en su código
aplicación Después de que hice esto para cada solicitud gravatar:
- descargar la imagen gravatar
- suma de control MD5 de los contenidos y compararla con la constante
- Si coincide que es la imagen por defecto, si lo hace, no se trata de una imagen personalizada
también almacena en caché el Gravatar la imagen durante 24 horas para que no tenga que depender de Gravatar todo el tiempo. Opcionalmente, puede poner los primeros 3 puntos en una función y dejar que se ejecuten de vez en cuando para asegurarse de que Gravatar todavía use la misma imagen predeterminada aunque no hayan aparecido en los últimos dos meses (probablemente nunca).
Bastante bueno idea..What es una suma de comprobación MD5? – Luke101
La suma de comprobación MD5 es un hash MD5 del contenido completo del archivo; Fragmento de código para C# aquí: http: // sharpertutorials.com/calculate-md5-checksum-file/ – fijter
La respuesta elegida es mucho mejor, pero este truco es útil en algunos casos. Por ejemplo, en Javascript en una página web o extensión de navegador si no desea que su navegador registre un error "404 no encontrado" en las herramientas de desarrollo. –
En PHP:
function hasGravatar($email)
{
return (md5(file_get_contents(sprintf('http://www.gravatar.com/avatar/%s?default=identicon&size=32', md5($email)))) == '02dcccdb0707f1c5acc9a0369ac24dac') ? false : true;
}
¿Hay un traductor de código en línea para convertirlo en C#? – Luke101
@ Luke101: No lo sé, y todavía estoy dando los primeros pasos en C#. Lo siento. –
¿Por qué la comprobación de igualdad a 02dcccdb0707f1c5acc9a0369ac24dac? – adrianbanks
En C#, basado en el código PHP publicado anteriormente (no probado - código fuente antes del almuerzo sigue):
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Net.WebClient;
public string GenerateMD5(string plaintext)
{
Byte[] _originalBytes;
Byte[] _encodedBytes;
MD5 _md5;
_md5 = new MD5CryptoServiceProvider();
_originalBytes = ASCIIEncoding.Default.GetBytes(plaintext);
_encodedBytes = _md5.ComputeHash(_originalBytes);
return BitConverter.ToString(_encodedBytes).ToLower();
}
public string file_get_contents(string url)
{
string sContents = string.Empty;
if (url.ToLower().IndexOf("http:") > -1) {
System.Net.WebClient wc = new System.Net.WebClient();
byte[] response = wc.DownloadData(url);
sContents = System.Text.Encoding.ASCII.GetString(response);
} else {
System.IO.StreamReader sr = new System.IO.StreamReader(url);
sContents = sr.ReadToEnd();
sr.Close();
}
return sContents;
}
public bool hasGravatar(string email)
{
string _mailMD5 = GenerateMD5(email);
string _url = String.Format("http://www.gravatar.com/avatar/{0}?default=identicon&size=32", _mailMD5);
string _fileMD5 = GenerateMD5(file_get_contents(_url));
return !(_fileMD5 == "02dcccdb0707f1c5acc9a0369ac24dac");
}
Actualmente estoy haciendo algo similar. Tengo una configuración de tabla para los perfiles de los usuarios y en esa tabla tengo una columna llamada Avatar. Aquí es donde se almacenará una URL de Gravatar. El siguiente código es lo que uso para administrar esta columna.
// first gather the email address that is going to be associated with this user as
// their gravatar.
// once you have gathered the email address send it to a private method that
// will return the correct url format.
protected void uxAssocateAvatar_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
string emailAddress = uxEmailAddress.Text;
try
{
Profile.Avatar = GetGravatarUrl(emailAddress);
Profile.Save();
Response.Redirect("Settings.aspx", true);
}
catch (Exception ex)
{
ProcessException(ex, Page);
}
}
}
// use this private method to hash the email address,
// and then create the url to the gravatar service.
private string GetGravatarUrl(string dataItem)
{
string email = dataItem;
string hash =
System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(email.Trim(), "MD5");
hash = hash.Trim().ToLower();
string gravatarUrl = string.Format(
"http://www.gravatar.com/avatar.php?gravatar_id={0}&rating=G&size=100",
hash);
return gravatarUrl;
}
// on the page where an avatar will be displayed,
// just drop in an asp.net image control with a default image.
<asp:Image ID="uxAvatar" runat="server" ImageUrl="~/images/genericProfile.jpg"
AlternateText="" CssClass="profileAvatar" BorderWidth="1px"/>
// and on page_load or something like that,
// check to see if the profile's avatar property is set
if (Profile.Avatar != null)
{
uxAvatar.ImageUrl = Profile.Avatar;
}
// by default the profile's avatar property will be null, and when a user decides
// that they no longer want an avatar, the can de-associate it by creating a null
// property which can be checked against
// to see if they have one or don't have one.
protected void uxRemoveAvatar_Click(object sender, EventArgs e)
{
Profile.Avatar = null;
Profile.Save();
Response.Redirect("Settings.aspx", true);
}
Esto parece funcionar bastante bien para mí. Siempre tengo un avatar predeterminado que muestra, y cuando un usuario realmente desea que se muestre su avatar personalizado, asocian su correo electrónico Gravatar (que hechizo y nunca almacena como dirección de correo electrónico), lo que crea una URL que puedo incluir como imageURL . Cuando el usuario elimina su enlace gravatar, anulo la columna de la base de datos y el imageURL vuelve a mi imagen predeterminada.
Buena suerte, y espero que esto ayude a algunos.
private bool HasUserPublicGravatar(string email)
{
try
{
var gravatarPath = GravatarService.GetGravatarUrlForAddress(email,
new GravatarUrlParameters { DefaultOption = GravatarDefaultUrlOptions.Error });
WebRequest wReq = HttpWebRequest.Create(gravatarPath);
var wRes = wReq.GetResponse();
return true;
}
catch (System.Net.WebException ex)
{
if (ex.Message.Contains("404"))
return false;
else
throw new Exception("Couldn't determine if ueser has public avatar");
}
}
function get_gravatar($email, $s = 80, $d = '404', $r = 'x', $img = false, $atts = array()) {
$url = 'http://www.gravatar.com/avatar/';
$url .= md5(strtolower(trim($email)));
$url .= "?s=$s&d=$d&r=$r";
if ($img)
{
$url = '<img src="' . $url . '"';
foreach ($atts as $key => $val)
$url .= ' ' . $key . '="' . $val . '"';
$url .= ' />';
return $url;
}
$headers = @get_headers($url);
if (!preg_match("|200|", $headers[0]))
{
$has_valid_avatar = 'no';
}
else
{
$has_valid_avatar = 'yes';
}
return $has_valid_avatar;
}
- 1. Gravatar: ¿Hay una imagen predeterminada?
- 2. ¿Cómo debo verificar si existe Gravatar?
- 3. ¿Cómo sé si el perfil del usuario que ejecuta una aplicación es un perfil temporal?
- 4. ¿Cómo comprobar si Contact tiene imagen?
- 5. ¿Cómo sé si hay un teclado de hardware?
- 6. gravatar resolución más alta
- 7. ¿Cómo comprobar si una imagen tiene transparencia usando GD?
- 8. cómo detectar si el usuario tiene una aplicación en Cocoa
- 9. Verificar gravatar válido (PHP)
- 10. Cómo construir una URL de la imagen del Gravatar de un correo electrónico dada
- 11. python zipfile, ¿cómo sé si un artículo es un directorio?
- 12. ¿Cómo puedo determinar si un usuario tiene una aplicación de iOS instalada?
- 13. jquery: ¿cómo sé si lo tengo?
- 14. Comprobando si un usuario específico tiene un rol
- 15. ¿Hay alguna manera en Android de saber si un dispositivo de un usuario tiene un teclado real o no?
- 16. ¿Cómo sé si un sistema se ha encendido?
- 17. Detectar si la ruta del usuario tiene un directorio específico
- 18. ¿El rubí tiene multithreading real?
- 19. Cargando gravatar usando jquery
- 20. Compruebe si una función tiene un decorador
- 21. Comprobación de Java si una imagen tiene transparencia
- 22. ¿Qué picazón hace un rasguño gravatar?
- 23. Compruebe si un formulario tiene una clave?
- 24. ¿Cómo comprobar si una orden tiene un envío en Magento?
- 25. ¿Cómo verificar si un usuario tiene una suscripción (facturación en la aplicación de Android)?
- 26. ¿Prueba si una clase tiene un atributo?
- 27. ¿Cómo saber si una SqlConnection tiene un SqlDataReader adjunto?
- 28. Si un formulario HTML tiene dos botones <input type = "submit">, ¿cómo sé cuál fue cliqueado?
- 29. ¿Cómo sé quién tiene el shared_ptr <>?
- 30. Si quiero utilizar una fuente específica que sé que no está disponible en la mayoría de la computadora del usuario
-> http://www.gravatar.com/avatar/aaa?default=404 – thijs
Esa es una respuesta mucho más limpia que el resto. Me gusta, vale la pena leer la documentación que parece. – Paddy
Una vez que tienes el 404, ¿cómo lo conviertes en gravatar = falso? – woodenfox