Граватар: Как я знаю, есть ли у пользователя реальное изображение

Я получил сервис граватара, работающий над моим сайтом. Но я хотел бы знать, загрузил ли пользователь их картинку или нет. Существует ли способ знать это?

34
задан Luke101 20 January 2010 в 17:50
поделиться

5 ответов

Я предлагаю вам рассмотреть возможность варианта.

Опциональный шаблон действует как обертка вокруг вашего возвращенного типа, и определяет два особых случая: опция. None () и опция .some (). Таким образом, вы всегда знаете ваш возвращенный тип (опция) и можете проверить, имеете ли у вас значение в возвращенном объекте параметра, используя такие методы, как опция. SuSsome () и опция .isnone ().

Таким образом, вы можете гарантировать, что у вас нет никаких неконкуренных нулей.

Конечно, все это происходит по стоимости дополнительной сложности кода.

Для получения дополнительной информации о типе опции см. В здесь (Scala Code, но тот же основной)

-121--3140603-

При построении URL используйте параметр d = 404. Это приведет к тому, что Gravatar вернет ошибку 404, а не изображение, если пользователь не установил изображение.

Если вы используете элемент управления .NET, связанный с сайтом Gravitar, вам понадобится изменить перечисление Iconset (и, вероятно, вытащите код из элемента управления, поэтому вы можете получить по статусу напрямую).

90
ответ дан 27 November 2019 в 16:07
поделиться

In 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;
}
3
ответ дан 27 November 2019 в 16:07
поделиться

.NET и MONO - отличные среды, со многими инструментами и отличными навыками базы людей, которые знают, как их использовать.

Я думаю, что у Mono есть возможность стать мобильной межплантальной средой разработки выбора, видя, когда они являются единственной альтернативой объектам на iPhone и должны быть портативными на Android, а .NET уже на Windows Mobile Отказ

Я действительно надеюсь увидеть твердую реализацию MONO на Android, с обертками для API Android API как с Monotouch, и будет готов заплатить за него, так как я не в состоянии сделать это сам.

-121--569470-

Учитывая максимум N n n n , вы хотите вернуть наименьшее число, которое следует на 1-20.

Давайте посмотрим на набор от 1 до 20. Первый Выкл., Он содержит ряд простых чисел, а именно:

2
3
5
7 
11
13
17
19

так, потому что он должен быть разделен на 19, вы можете проверить только кратные 19, потому что 19 - простое число. После этого вы проверяете, можно ли разделить на тот и т. Д. Если номер можно успешно разделить всеми простыми номерами, он может быть разделен на число с 1 по 20.

float primenumbers[] = { 19, 17, 13, 11, 7, 5, 3, 2; };

float num = 20;

while (1)
{
   bool dividable = true;
   for (int i = 0; i < 8; i++)
   {
      if (num % primenumbers[i] != 0)
      {
         dividable = false;
         break;
      }
   }

   if (dividable) { break; }
   num += 1;
}

std::cout << "The smallest number dividable by 1 through 20 is " << num << std::endl;
-121 3429517-

Что я сделал:

  • Создать гравитар с несуществующим E-mailadress
  • Сохранить изображение
  • Сделайте контрольную сумму MD5 содержимого изображений и хранить его в качестве константы в вашем коде приложения

После этого я сделал это для каждого запроса на гравитар:

  • загрузить изображение Gravatar
  • MD5 Checksum содержимое и сравнить его против константы
  • , если он совпадает с изображением по умолчанию, если это не так Это пользовательское изображение

Я также кэшировал изображение Gravatar в течение 24 часов, поэтому вам не нужно все время полагаться на Gravatar. Необязательно вы можете поставить первые 3 балла в функцию и позволить ему работать время от времени, чтобы убедиться, что Gravatar по-прежнему использует одно и то же изображение по умолчанию, которое у них нет, по крайней мере, за последние пару месяцев.

6
ответ дан 27 November 2019 в 16:07
поделиться

Я в настоящее время делаю что-то подобное. У меня есть настройка таблицы для профилей пользователей, а в этой таблице у меня есть один столбец под названием Avatar. Вот где будет храниться URL-адрес Gravatar. Следующий код - это то, что я использую для управления этим столбцом.

// 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);
}

Это, кажется, очень хорошо работает для меня. У меня всегда есть показывать аватар по умолчанию, и когда пользователь на самом деле хочет иметь отображаемый пользовательский аватар, они связывают их электронную почту Gravatar (который я хэш и никогда не хранят в качестве адреса электронной почты), который создает URL-адрес, который я могу просто прийти в виде изображения Отказ Когда пользователь удаляет свою ссылку Gravatar, я не отудаю столбец базы данных, и ImageURL возвращается к моему изображению по умолчанию.

Удачи, и надеюсь, что это поможет вам.

1
ответ дан 27 November 2019 в 16:07
поделиться

в C #, на основе кода PHP, размещенного ранее (непроверенного исходного кода предварительного обеда):

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");
}
2
ответ дан 27 November 2019 в 16:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: