Разработка системы моделирования поисковой оптимизации веб-сайта

курсовая работа

3. Описание работы программы: описание функциональных возможностей скрипта, описание подпрограмм, алгоритмов и принципа работы

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

Проверка версии PHP и установка кодировки страницы происходит согласно строчкам 1-6 пункта 1 приложения А. Кодировка utf-8 выбрана по причине её популярности в среде web-программистов. Следствие из этого - отсутствие конфликтов в работе большинства внутренних функций PHP, обрабатывающих строки. Как известно, в любой работе следует придерживаться установленным стандартам, и выбор кодировки utf-8 для исходного кода - это отличный способ избежать ненужных проблем и трудностей в работе скрипта. Для ясности следует заметить, что кодировка базы данных также utf-8, именно поэтому при запросе данных из базы, нам не нужно производить дополнительных действий над текстом.

Подключение файлов config.php, mysql.php, a.charset.php, а также подключение базы данных описаны в строчках 7-10 п.1 приложения А.

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

Генерирование последних позиций по всем запросам для главной страницы происходит с помощью функции generateLastStatList в строчках 12-21 п.1 приложения А. Это несложная функция, состоящая из двух внутренних SQL-запросов, логику которых можно описать двумя пунктами:

1) получаем последнюю дату для записей статистики в базе данных;

2) получаем все записи из базы для выбранной нами даты.

И если первый запрос реализуются с помощью примитивного синтаксиса, то для второго запроса приходится использовать сложные JOIN запросы, объединяющие записи из двух различных таблиц.

Вычисление плотности ключевых слов описано в функции keyWords (23-85 строки п.1 приложения А). В строках 25-30 находятся регулярные выражения для получения списка ключевых слов со страницы сайта, в строке 25 используется функция charset_x_win, которая любую кодировку переводит в cp1251 и функция iconv, которая переводит cp1251 в utf-8; 37-83 строки отвечают за удаление лишних символов из HTML кода, замену HTML-сущностей и подсчёт общего количества слов, а также за подсчёт плотности ключевых слов. Следует тщательнее разобрать этот алгоритм. Как известно, любая HTML страница представляет собой сочетание тегов и всевозможные слова, несущие информационную нагрузку. Для подсчета плотности ключевых слов, нам необходимо отделить ненужные теги от слов, поэтому мы удаляем всевозможные HTML сущности и оставляем только текст. Для наглядности можно пояснить - результирующий текст совпадает с текстом, который мы могли бы получить просто выделив весь текст в браузере и скопировав его в текстовый документ. Именно в этом тексте мы находим количество вхождений ключевого слова, и полученный результат делим на общее количество слов. В результате и получается интересующая нас величина - плотность ключевого слова.

Функция v_stat (87-121 строки п.1 приложения А) отвечает за статистику конкретного URLа, историю последних двадцати позиций и запрос ключевых слов из функции keyWords, описанной на 23-85 строках. В этом же блоке осуществляется вывод данных в браузер. Как известно, для качественного анализа страниц необходимо вести подробную статистику за определенный период времени. Функция v_stat как раз работает с собранными данными из базы данных. Для наглядности эти данные можно представить как массив соотношений позиция - адрес страницы. Получив эти данные для заданного URL, можно доверить скрипту их анализ. Конкретно для нашей задачи скрипт анализирует последние 20 позиций и выдает их пользователю в удобном виде, пригодном для уже ручного анализа эффективности продвижения в поисковых системах. Для того чтобы пользователь мог составить полную картину работы сайта, необходимо вывести так же плотность ключевых слов, обработка которых была описана выше.

На строках 123-141 п.1 приложения А описана функция v_back, отвечающая за получение списка беков (сайтов, ссылающихся на конкретный URL). Подробнее: 127 строка - это запрос списка беков в файле от Yahoo; 128-139 строки - разбор файла, вывод данных в браузер. Вообще сервис получения списка беков от Yahoo - это очень удобный способ анализа ссылаемых сайтов. Скрипт делает простой запрос к системе и на выходе принимается поток текста, представленный в CSV формате, который просто обработать и вывести пользователю для ручного анализа.

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

Строка 142 п.1 приложения А отвечает за вывод в браузер HTML заголовков. Строка 144 - это разбор пути запрошенной страницы, выбор исполняющей функции. Строки 168-190 отвечают за вывод содержимого главной страницы. В строках 192-193 описано закрытие открытой базы и HTML теги.

Хранение конфигурационных строк базы данных в отдельном файле это не только правило хорошего тона, но и удобная необходимость. При использовании базы многими файлами, достаточно одного файла конфигурации и при случае изменения этих данных, нет необходимости редактировать каждый файл, использующий базу. В пункте 2 приложения А описано содержимое конфигурационного файла config.php с переменными: сервер БД - 2 строка; пользователь БД - 3 строка; пароль БД - 4 строка; таблица БД - 5 строка.

Рассмотрим теперь содержимое файла requestStat.php, описанное в пункте 3 приложения А.

В строке 1 задаём бесконечное время выполнения скрипта (это необходимо для успешного завершения получения и обработки данных). В коде скрипта содержится большое количество необходимых sleep-функций, поэтому время выполнения может достигать нескольких минут. Стандартных 60 секунд выполнения скрипта в этом случае может не хватить, и работа будет совершаться «вхолостую».

В строках 2-5 происходит проверка версии PHP. Строка 7 отвечает за кодировку страницы. В 9-10 строках происходит подключение файлов. Строка 12 задаёт значение региона (по параметрам Yandex). Строка 14 отвечает за подключение БД. Строки 16-17 описывают получение из базы последней даты обновления статистики (причем если обновления уже были сегодня, то нам следует завершить работу скрипта). В строке 20 получаем список запросов из БД простым sql запросом. В строках 22-24 генерируем запросы к поисковым системам по известному шаблону.

Строки 35-53 описывают, каким образом мы запрашиваем страницу Yandexа, получаем результат и записываем в БД. Подробнее: в 41 строке запрашиваем страницу с результатом поиска; в 42 строке с помощью регулярного выражения получаем в массив позиции, заголовки и URL страниц; страницы 44-50 отвечают за запись результатов в БД; строка 51 отвечает за то, чтобы перед выполнением следующего запроса проходило 5 секунд (это делается для того, чтобы поисковая система нас не забанила).

Делись добром ;)