ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Выработка рекомендаций для пользователей

Выработка рекомендаций для пользователей

В завершении, мы переходим к сценарию recommend.php, который реализует рекомендацию ссылок.

Существует множество различных способов выработки рекомендаций. Мы решили применить принцип "сходства образа мышление". Другими словами, выполняется поиск остальных пользователей, у которых хотя бы одна закладка совпадает с закладкой данного пользователя. Предполагается, что их остальные закладки также могут представлять интерес для пользователя.

Простейший метод реализации этого подхода в SQL-запросе связан с использованием подзапросов. Первый подзапрос выглядит следующим образом:

select distinct(b2.username)
from bookmark b1, bookmark b2
where b1.username='$valid_user'
and b1.username != b2.username
and b1.bm_URL = b2.bm_URL

В этом запросе используется псевдонимы для соединения таблицы bookmark базы данных с собой же — странная, но иногда полезная концепция. Предположим, что действительно существуют две таблицы закладок — b1 и b2. В таблице b1 выбираются данные по закладкам текущего пользователя. В другой таблице просматриваются закладки всех остальных пользователей. Выполняется поиск других пользоватетелей (b2.username), имеющих закладку (то есть URL-адрес), совпадающий с закладкой текущего пользователя ( b1.bm_URL = b2.bm_URL). Их имена не должны совпадать с именем текущего пользователя (b1.username != b2.username).

Этот запрос выдает список пользователей, интересы которых совпадают с интересами текущего пользователя. Воспользовавшись полученным списком, можно выполнить поиск всех остальных закладок пользователей, представленных в списке, с помощью следующего внешнего запроса:

select bm_URL
from bookmark
where username in
(select distinct(b2.username)
from bookmark b1, bookmark b2
where b1.username='$valid_user'
and b1.username != b2.username
and b1.bm_URL = b2.bm_URL)

Второй подзапрос служит для фильтрации закладок текущего пользователя. Если пользователь уже имеет какую-то закладку, не имеет смысла рекомендовать ему ее еще раз. Наконец переменная $popularity добавляет некоторый элемент фильтрации — не следует рекомендовать "слишком персональные" закладки. Выбираются лишь те URL-адреса, которые сохранены определенным числом других пользователей. В конечном итоге запрос приобретает следующий вид:

select bm_URL
from bookmark
where username in
(select distinct(b2.username)
from bookmark b1, bookmark b2
where b1.username='$valid_user'
and b1.username != b2.username
and b1.bm_URL = b2.bm_URL)
and bm_URL not in
(select bm_URL
from bookmark
where username='$valid_user')
group by bm_url
having count(bm_url)>$popularity

Если ожидается регистрация в системе большого количества посетителей, можно увеличить значение переменной $popularity, тем самым рекомендуя лишь такие URL-адреса, которые были сохранены большим числом пользователей. Эти адреса должны оказаться наиболее интересными и отвечать более широкому спектру интересов по сравнению с обычными веб-страницами.

recommend.php — предлагает пользователю ссылки, которые могут заинтересовать пользователя

<?php
require_once('bookmark_fns.php');
session_start();
$title = "Рекомендация URL-адресов";
$description = "Рекомендация URL-адресов ";
$keywords = "рекомендация url-адресов ";
do_html_header($title, $description, $keywords);
blok_left();
echo'<div id="blok_right">';
echo '<div class="blok_text">';
echo'<div class="text_top" align=left>';
do_html_heading($title);
try
{
check_valid_user();
$urls = recommend_urls($_SESSION['valid_user']);
display_recommended_urls($urls);
}
catch(Exception $e)
{
echo $e->getMessage();
}
display_user_menu();
echo '</div></div></div>';
do_html_footer();
?>

Функция recommend_urls() из библиотеки urljfns.php — этот сценарий вырабатывает рекомендации

function recommend_urls($valid_user, $popularity = 1)
{
// Мы попытаемся обеспечить для пользователей выдачу *полуинтеллектуальных*
// рекомендаций. Если пользователи имеют URL-адрес, совпадающий с закладками
// других пользователей, их могут заинтересовать и прочие URL-адреса,
// которые имеют другие пользователи
$conn = db_connect();

// Найти других пользователей, закладки которых
// совпадают с закладкой текущего пользователя.
// В качестве простейшего способа исключения из рассмотрения
// приватных страниц посетителей, а также для более совершенной
// рекомендации мы устанавливаем минимальный уровень популярности.
// Если $popularity = 1, могут рекомендоваться лишь
// адреса, сохраненные более чем одним пользователем

$query = "select bm_URL
from bookmark
where username in
(select distinct(b2.username)
from bookmark b1, bookmark b2
where b1.username='$valid_user'
and b1.username != b2.username
and b1.bm_URL = b2.bm_URL)
and bm_URL not in
(select bm_URL
from bookmark
where username='$valid_user')
group by bm_url
having count(bm_url)>$popularity"
;

if (!($result = $conn->query($query)))
throw new Exception('Не удается найти закладки для рекомендации.');
if ($result->num_rows==0)
throw new Exception('Не удается найти закладки для рекомендации.');

$urls = array();

// Сформировать массив подходящих URL-адресов
for ($count=0; $row = $result->fetch_object(); $count++)
{
$urls[$count] = $row->bm_URL;
}

return $urls;
}

Пример вывода сценария recommend.php показан на рисунке.

Сценарий рекомендует пользователю сайт http://php.net. Этот адрес был сохранен, по меньшей мере, двумя другими пользователями

Возможные расширения сайта закладок

Мы рассмотрели базовые функциональные возможности веб-приложения ABCMemori. Ниже представлен список возможных расширений.

  • Группирование закладок по темам.
  • Реализация в функции выдачи рекомендаций ссылки Добавить это к моим закладкам.
  • Выдача рекомендаций, основанных на наиболее популярных URL-адресах в базе данных либо на определенной теме.
  • Интерфейс для администрирования пользователей и тем.
  • Методы повышения "интеллектуальности" либо быстродействия закладок.
  • Дополнительная проверка вводимой пользователемя информации на предмет ошибок.