Геотаргетинг + интеллектуальное позиционирование

Вчера днем начал тестировать геотаргетинг по показу объявлений в шапке сайта Аудиоведа. Второй день у меня кипят мозги от того, что необходимо реализовать алгоритм выдачи банеров с ранжированием по URL, сортировочному весу, определнному географическом положению посетителя сайта и смысловому контексту страницы на которой он выводится. Я думаю надо решать вопрос фундаментально.

Дано:

  1. Посетитель с устновленным IP, а следовательно как минимум страной и городом
  2. URL страницы на которой он находится в настоящий момент

Условия, которые необходимо соблюсти при выдаче банера в шапку:

  1. банеры с указанным геотаргетингом имеют преимущество в выдаче перед «интернациональными», где он не указан. Это означает, что для москвичей в первую очередь следует показывать московский банер если такой есть и если нет — интернациональный.
  2. банеры с указанным местом — страницей размещения имеют преимущество при выводе перед «сквозными» банерами без указанной страницы.  То есть нужно показывать на странице банер предназначенный для этой конкретной страницы, если такой есть. И если спецального для этой страницы нет — тогда случайный сквозной с геотаргетингом. И если нет таких — любой случайно из сквозных-интернациональных.
  3. показ баннеров считается в cookies  на стороне клиента. Количество показов не должно превышать установленного для данного баннера количества показов одному посетителю в сутки, если такое было установлено для данного баннера. Как только баннер с известным ID будет показан посетителю дважды он более не показывается в этот день вообще.
  4. любой баннер может быть отмечен тегами и выводиться на странице тега в первую очередь ибо он имеет преимущества перед баннером у которого теги не прописаны. Также баннер отмеченный тегами выводится на страницах материалов отмеченных этими тегами.
  5. пользователь может нажать на крестик у баннера и он ему не будет показываться больше вообще в течении сегодняшнего дня. Это так же решается на стороне пользователя через cookies.
  6. банер может иметь ограничения по времени и дням недели для показа.
  7. банер может показывать только зарегистрированным или всем пользователям.

А также еще масса нюансов которые нужно учесть. И это вот просто одна из сотен задач по сайту, если вы собираетесь все делать фундаментально. И иногда мне кажется, что проще купить битрикс … Надо завтра показать Петру эту хрень. Надеюсь, у него есть готовое решение.