Каждая строка запроса, фиксируемая в журнале, предваряется текущей датой и временем, что позволяет не только выяснить наиболее популярные запросы, но также проанализировать, что пользователи ищут в разное время суток, в разные дни недели, месяца и так далее. Этот сценарий может извлечь огромный объем информации, особенно на популярном сайте!
Чтобы на самом деле задействовать сценарий, нужно создать HTML-форму, дать сценарию право на выполнение и поместить его на веб-сервер. (Подробнее об этом рассказывается выше, в разделе «Запуск сценариев из этой главы».) Однако мы можем протестировать его с помощью curl. Для проверки сценария выполним HTTP-запрос, вызвав команду curl с параметром q, содержащим строку поиска:
$ curl "10.37.129.5/cgi-bin/log-duckduckgo-search.cgi?q=metasploit"
Found
The document has moved here.
Apache/2.4.7 (Ubuntu) Server at 10.37.129.5 Port 80
$
И затем проверим факт регистрации попытки поиска, для чего выведем содержимое журнала на экран:
$ cat searchlog.txt
Thu Mar 9 17:20:56 CST 2017: metasploit
$
Открыв сценарий в веб-браузере, вы увидите результаты поиска в DuckDuckGo, как и ожидалось (рис. 8.2).
На популярном веб-сайте иногда бывает полезна возможность непрерывного мониторинга поисковых запросов командой tail −f searchlog.txt, позволяющая в режиме реального времени получать информацию о том, что люди ищут на вашем сайте.
Усовершенствование сценария
Если поле поиска присутствует на каждой странице веб-сайта, было бы полезно знать, с какой страницы пользователь сделал запрос. Это могло бы подсказать, насколько хорошо подобрано ее содержимое. Например, пользователи постоянно ищут пояснения к теме, описываемой на данной странице. Регистрация в журнале дополнительных сведений о странице, откуда выполнен поиск (их можно получить, например, из HTTP-заголовка Referer), стала бы отличным усовершенствованием сценария.
№ 65. Динамическое конструирование веб-страниц
Многие веб-сайты включают графики и другие элементы, меняющиеся ежедневно. Наглядным примером могут служить веб-комиксы, такие как «Kevin & Kell» Билла Холбрука (Bill Holbrook). На главной странице его сайта всегда отображается самая последняя серия комикса, и, оказывается, нетрудно выяснить, какие соглашения об именовании отдельных изображений используются на сайте, и использовать их, чтобы поместить комиксы на свою страницу, как показано в листинге 8.6.
Рис. 8.2.Результаты поиска в DuckDuckGo появились в браузере, а строка поиска зафиксирована в журнале!
ВНИМАНИЕ
Предупреждение от наших юристов: собирая содержимое других веб-сайтов, необходимо учитывать массу вопросов, связанных с авторским правом. Для данного примера мы прямо попросили у Билла Холбрука разрешения включить его комиксы в данную книгу. Мы советуем вам также получать разрешение на воспроизведение на своем сайте любых материалов, защищенных авторским правом, чтобы не вырыть себе глубокую юридическую яму.
Листинг 8.6.Сценарий kevin-and-kell
#!/bin/bash
# kevin-and-kell — динамически создает веб-страницу для отображения последней
#·· серии комикса "Kevin and Kell" Билла Холбрука (Bill Holbrook).
#·· <���Ссылка на комикс используется с разрешения автора>
month="$(date +%m)"
··day="$(date +%d)"
year="$(date +%y)"
echo "Content-type: text/html"
echo ""
echo "
"
echo "
"
echo "
"
echo "
"
echo "
Bill Holbrook's Kevin & Kell |
# Типичный URL: http://www.kevinandkell.com/2016/strips/kk20160804.jpg
/bin/echo −n " src=\"http://www.kevinandkell.com/20${year}/"
echo "strips/kk20${year}${month}${day}.jpg\">"
echo "
|
"
echo "© Bill Holbrook. Please see "
echo "kevinandkell.com"
echo "for more strips, books, etc."
echo "
|
"
exit 0
Беглого обзора исходного кода главной страницы сайта «Kevin & Kell» оказалось достаточно, чтобы понять, что URL со ссылкой на данный комикс включает текущий год, месяц и число:
http://www.kevinandkell.com/2016/strips/kk20160804.jpg
Чтобы динамически сконструировать страницу, включающую ссылку на эту серию, сценарий должен определить текущий год (две цифры), месяц и число (оба с ведущими нулями, если необходимо). Остальная часть сценария просто создает HTML-обертку для придания странице привлекательного внешнего вида. В действительности это очень простой сценарий, учитывая получаемые возможности.
Читать дальше