1. Введение

StreamRotator - это программный комплекс, предназначенный для автоматизации управления контентом на сиджах, содержащий в себе модули граббера и ротатора. Реализован на php с использованием ZendOptimizer, GdLib, mysql, ImageMagick, cron. Имеет 2 варианта - условно-бесплатный (в качестве оплаты взимается 1% кликов, некоторые ограничения в функциональности) и платный.



2. Установка

Загрузите архив http://streamscripts.com/rotator/install.zip, распакуйте, загрузите содержимое на свой сервер в корень домена. Установите на корневую директорию домена права 777. В строке броузера введите http://yourdomain.com/install.php. Вы увидите нечто подобное:



Mysql host, mysql user, mysql password, mysql database - параметры подключения к базе данных mysql, которая будет использоваться ротатором.
Mysql utility location и mysqldump utility location - расположение утилит базы данных- mysql и mysqldump соответственно. Используются при создании или резервных копий и при восстановлении. Уточните расположение этих утилит у своего администратора.
IM convert utility location - расположение утилиты convert из пакета утилит ImageMfgick. Уточните у своего администратора.
PHP location - расположение интерпретатора php. Не используется в работе, но необходимо для правильного написания задания cron-а. Уточните у своего администратора.
Script directory - каталог в котором будет находиться скрипт ротатора.

Примечание. Инсталлятор пытается сам определить конфигурацию сервера и заполнить значения для параметров mysql utility location, mysqldump utility location, IM convert utility location, PHP location, поэтому не удивляйтесь, если в этих полях будут проставлены пути. Если вы все правильно заполнили, то после нажатия кнопки 'install' вы увидите список установленных файлов, и перечень созданных таблиц базы данных. В самом низу будет что-то типа:

all right!
delete install.php
change password in admin zone (default password: adminpass)
make cronjob:
* * * * * cd /home/yourdomain/streamrotator; c:/usr/local/bin/php -q cron.php 1>/dev/null 2>/dev/null


Создайте задания для крона, установите старые права на корневую директорию домена (обычно 755), удалите install.php и переходите в админку.



3. Быстрый старт

Как запустить ротатор потратив на это минимум времени? Рецепт нашего фастфуда:

1. В разделе settings заполняем поля:
   email - почтовый ящик на который будут приходить сообщения об ошибках ротатора;
   script copy order on server - порядковый номер скрипта на этом сервере;
   niche - ниша сайта (можно выбрать несколько);
   new password и confirm new password - пропишите тут новый пароль.
Нажимаем 'save changes'. Более подробное описание этих и других настроек вы сможете прочитать в соответствующем разделе этого руководства.

2. Создаем один или несколько ротаторов. Ротатор - это совокупность позиций на морде сиджа под тумбы/дески характеризующаяся одинаковыми параметрами такими как высота/ширина. Возможно не лучшее определение, но думаю, если вы читаете это руководство то понимаете о чем идет речь:) В разделе rotators вы сможете создавать, редактировать и удалять ротаторы. Создайте необходимые вам ротаторы. Типы ротаторов:
   images (pics+movies) - в этот тип будут попадать пиксовые и мувисные галереи;
   images (pics) - только галереи содержащие картинки;
   images (movies) - только галереи содержащие мувики;
   descs - тип ротатора для десков.
Для чего нужно 3 типа пиксовых ротаторов. Рассмотрим пример - мы хотим, чтобы на морде было 2 блока тумб - на первом только пиксовые гали, на втором только мувисные. Но проблема в том, что у спонсора пиксовые и мувисные fhg идут вразброс. Для того чтобы не сортировать fhg вручную мы просто создаем 2 ротатора и присвоим им соответствующий тип. У первого будет 'images (pics)' у второго 'images (movies)'. Таким образом, во время граба в первый ротатор будут попадать только пиксовые fhg, во второй только мувисные.

3. Настройки качества создаваемых тумб. Вообще говоря, этот пункт можно пропустить. Дело в том, что настройки по умолчанию выставлены оптимально (на мой взгляд), и удовлетворят большинство пользователей ротатора. Если у вас все-таки возникло желание изменить что-то в этих параметрах, загляните в раздел crop profiles. Описание этого режима вы найдете в соответствующем разделе этого руководства.

4. В разделе import вводим список наших галерей, выбираем ротатор, профайл кропа (если мы его задавали) и нажимаем 'add to grab list'.

5. Осталось только создать шаблон морды и состыковать его с сриптом сиджа. Об этом можно узнать в соответствующем разделе мануала.

Теперь скрипт загружен работой и у вас есть время более подробно изучить StreamRotator :)



4. Общие принципы функционирования StreamRotator

Граббер. Берем список спонсорских fhg, импортируем его в ротатор. В фоновом режиме начинает работать граббер. Он загружает галереи, выдергивает из них ссылки на картинки (или превьюшки мувиков) и делает из них тумбы, используя ранее заданные crop profiles (в которых задаются такие параметры как яркость, насыщенность, нанесение мувисного логотипа и еще куча всяких полезных вещей).

Ротатор имеет два режима работы: полный автомат (auto) и полуавтомат (semiauto). В первом случае галереи для грабинга выбираются вразнобой, также и картинка для создания тумбы выбирается случайная, т.е. вновь отграбленные тумбы будут самыми разнообразными. Они сразу попадают в ротацию. Во втором режиме гали грабятся тоже автоматически, но в ротацию попадают только тумбы отобранные вами. Для гали можно выбрать как одну, так и несколько тумб. Выбор отграбленных тумб и добавление их в ротацию осуществляется в режиме grab list, там же можно посмотреть и галереи которые не были срагблены по тем или иным причинам (например отсутствие конетнта на гале) - их можно удалить из списка или переграбить заново.

Ротатор во время работы высчитывает для каждой тумбы показатель rank - по сути это ctr тумбы с поправкой на кликабельность ячеек в которых эта тумба показывалась. Тумбы с самым высоким rank-ом показываются на самых лучших позициях. Уникальной особенностью StreamRotator-а является то, что для вычисления кликабельности ячеек не нужен специальный обучающий режим - все коэффициенты высчитываются в фоновом режиме без потери трафика. Более того, при первой генерации морды скрипт пытается выставить коэффициенты в зависимости от положения ячейки таким образом, чтобы в дальнейшем изменения этого коэффициента были минимальными. В дальнейшем эти показатели очень плавно подстраиваются под существующую статистику кликабельности ячеек.

В процессе ротации, после того как все тумбы для определенной гали показались как минимум N-раз (парамет new thumbs timelive в настройках), в ротации остается только лучшая тумба а все остальные удаляются. Это довольно длительный процесс, но в результате скрипт сможет выжать из контента максимальный эффект. Кстати хоть этот процесс и продолжительный, он вполне безболезненный, так как на морде присутствует только небольшое количество тестируемых тумб (параметр new thumbs percent в настройках), все остальные - 'лучшие из лучших.'.

Еще одной отличительной особенностью скрипта является то, что на статистку ротатора не влияют подозрительные на чит клики/показы, например действия посетителей с выключенными cookie или js не будут влиять на статистику. Все параметры по которым вычисляется чит я не буду расписывать, скажу лишь что они аналогичны механизмам, применяемым в cj-скриптах.

Ну а теперь пару слов о самом эффективном механизме StreamRotator-а, который позволяет очень существенно поднять проду на сайте. Это механизм показа новых тумб для неуникальных посетителей. Проще говоря, если посетитель побывал на вашем сайте, перешел на какого-то вашего трейдера, и вернулся окольным путем обратно, то ему будут показаны совершенно новые тумбы. Несомненно, у него будет большая мотивация посмотреть что скрывается за этими новыми тумбами, чем если бы он увидел тот же сайт с тем же контентом. Или, если ваш сайт окажется в букмарках, то посетитель при каждом посещении будет видеть все новый и новый контент. Этакая иллюзия очень быстро обновляемой tgp. Какие преимущества это дает, думаю объяснять не надо. Опытный вебмастер в этом месте возразит, что такая схема работы будет крайне ресурсоемкой, и... будет неправ :) Во-первых, для уникальных посетителей всегда будет показываться статика, которая генерируется через определенные промежутки времени, как это обычно делается в скриптах подобного рода. Морда с новыми тумбами будет генерироваться "на лету" только для неуникальных посетителей, процент которых обычно колеблется в пределах 10-15%. Более того, эти дополнительные морды для неуников тоже кешируються, и если есть необходимый "свежий" фейс в кеше, то он не будет генерироваться! Во-вторых, морда генерируется не из шаблона заданного в админке, и из некоего полуфабриката, "промежуточного слоя", заточенного под быстрые выборки и быстрое формирование морды сиджа. В-третьих, движок скрипта в своей работе активно использует heap-таблицы mysql. Этот тип таблиц mysql-сервер хранит в оперативной памяти и запросы к ним выполняются на несколько порядков быстрее, чем к обычным таблицам. По итогам тестов, среднее время in-а (при котором формируются и новые морды для неуников) составляет всего несколько сотых долей секунды. Что является очень неплохим результатом.

Скорость обновления морды. Скорость зависит от состояния статистики по тумбам. Если статистики мало, морда обновляется каждую минуту. Если статистики много - 1 раз в 20 минут. Такая гибкость позволяет во-первых, молниеносно выбирать наиболее кликабельные тумбы и соответственно поднимать проду на минимальном трафике, а во-вторых, максимально щадяще относиться к ресурсам сервера на "набравшем обороты" сидже.

Особенности использования heap-таблиц. Маленькая справка - в отличие от всех остальных видов таблиц mysql, heap-таблицы существуют только в памяти компьютера. Это позволяет работать с ними на несколько порядков быстрее, чем с обычными данными. Обратная сторона медали - при сбое сервера myslq их содержание теряется. Для того чтобы обезопасить себя от несчастных случаев скрипт время от времени делает копию этих данных. Периодичность бакапа - каждые 5 минут. Кроме того, каждую минуту делается проверка, если произошла потеря heap-таблиц, они восстанавливаются из бакапа. В случае сбоя овнер информируеться о типе ошибки на email. Таким образом, в худшем случае мы потеряем статистику за последние 5 минут. Хотя следует заметить, что при правильной настройке сервера mysql он будет работать безпроблемно годами. Подобная организации хранения данных позволяет в иметь в базе данных десятки и сотни тысяч тумб, и выдерживать трафик сотни тысяч посетителей в сутки на сервере средней производительности.



5. Структура меню

Home. Пока пусто, планируется постить сюда новости.


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


Grab List. Здесь будет список галерей которые ротатор не смог сграбить, например при невозможности открыть урл, корректно его пропарсить и т.д. Причина будет указана, рядом с сообщением об ошибке. Сюда же попадают предупреждения. Пример - ротатор имеет тип images (pics) а галя содержит только мувики. В ротацию такая галя не попадает, так как не соответствует типу ротатора, в то же время ошибки при грабе не было. Когда ротатор находится в полуавтоматическом режиме (semiauto) то в этом разделе будут показаны все гали которые находятся в состояниях grabbing или ready. Grabbing - галерея сейчас грабится. Ready - все тумбы уже готовы но в ротацию не отправлены. Чтобы отобрать лучшие тумбы и пустить их "в оборот" выберите все ready и нажмите "select thumbs & add to rotation". Точно также можно удалить (delete) или перекропить заново (reset state) выбранные галереи.


Rotators. Раздел для создания, редактирования, удаления, а также просмотра статистики ротаторов. Ротатор имеет 4 вида:
   images (pics+movies) - в этот тип попадут и писксовые и мувисные гали;
   images (pics) - только пиксовые гали;
   images (movies) - только мувисные гали;
   desc - все гали, имеющие описание (description).
Такое разделение ротаторов на виды позволяет не сортировать смесь из мувисных и пиксовых спонсорских fhg вручную для каждого из ротаторов. Мы просто задаем тип ротатора и граббер сам определит, какой контент содержится на гале и нужно ли ее (галю) добавлять в ротатор. В этом разделе также можно увидеть сколько позиций каждого ротатора располагается на морде сайта, а также сколько в каждом ротаторе галерей и тумб. Примечание. Интерфейс админки не позволит удалять и редактировать ротаторы, содержащие галереи или используемые в шаблоне.


Template. Шаблон морды. Тут, наверное, будет проще увидеть пример готового шаблона :) Сделать это можно по ссылке "Example". В шаблоне Вы увидите тэги типа #SUB_N#, где N - это номер субтемлейта (их описание расположено ниже). В субтемплейтах можно (и нужно) использовать следующие выражения::
   #POS# - обязательное значение для параметра "l" в ауте ротатора;
   #GAL# - url галереи;
   #ENCODED_GAL# - кодированный url галереи. На морде можно использовать одновременно и кодированные и некодированные url-ы. Например в alt-е показывать реальный url, а в href-е кодированный;
   #THUMBS# - относительный путь к тумбе относительно директории ротатора или ссылка на удаленное место хранения тумбы при активированном ftp-модуле;
   #LOCAL_THUMB# - относительный путь к тумбе относительно директории ротатора. На морде можно использовать одновременно и #THUMBS# и #LOCAL_THUMB#. Например в верхнем блоке выводить тумбы с локального быстрого сервера, на котором работает ротатор, а нижние с более медленного и с более дешевыми каналами сервера :)
   #DESC# - description галереи.

Немного о формате аута ротатора. В общем виде он должен иметь следующее представление: {директория_ротатора}/out.php?l=#POS#&u={out_cj_скрипта}.

При клике на ссылку на морде посетитель попадает на аут ротатора, который обрабатывает этот клик, а потом уже редиректит на аут cj-а, который уже по своему усмотрению распределяет клик дальше. Ну и напоследок - как подсоединить ротатор к срипту сиджа. Для этого нужно просто добавить одну небольшую строчку в тот раздел cj-скрипта, в котором должен находиться шаблон морды. Если такого раздела нет, то строчку прописываем в индексный файл. Вот собственно строчка для индексов и скриптов на php:
<?php include("{директория_ротатора}/in.php");?>

А вот эта - для .shtml файлов:
<!--#include virtual="{директория_ротатора}/in.php"-->

Есть специальная опция и для инклуда топов:
#INCLUDE_{имя_файла_топа}#
Следует учесть что путь к файлу топа следует указывать от корня домена.

Ин ротатора имеет одну небольшую но иногда полезную фичу - если слать трафик на урл типа http://mydomain.com?updatestat=off то этот трафик не будет влиять на статистику ротатора. Для чего это может понадобиться. Например, мы разгоняем сидж с помощью ненишевого подлива, который может существенно повлиять на картину популярности тумб. Для того чтобы этого не происходило и стоит применять такой маневр.


Stat. Статистика по галереям. Доступны самые разнообразные параметры для выборки статистики и сортировки. В статистике показывается тумба с самым высоким rank-ом галереи. Если необходимо посмотреть все тумбы гали, кликните на тумбу. Галереи в состоянии disable подсвечены серым цветом, галереи в которых уже определена лучшая тумба - розовым цветом. Здесь же вы сможете удалить галереи, изменить статус, а также отправить галерею на переплавку (переграб) :)


Export. Раздел в разработке. Здесь будет возможен экспорт базы данных галерей/тумб в различных форматах, заданных пользователем.


Settings. Раздел MYSQL SETTINGS - параметры подключения к серверу mysql, а также пути к утилитам. Эти поля заполняются во время инсталляции скрипта и обычно менять их надобности не возникает.

grabber mode - режим работы ротатора auto или semiauto. Более подробно о них читайте в описании работы ротатора.

IM convert utility location - путь к утилите convert из пакета утилит imagemagick.

new thumbs timelive - после того как каждая тумба для какой-либо галереи покажется new thumbs timelive раз, скрипт выберет для дальнейшего использования лучшую, остальные будут удалены.

new thumbs percent - процент от общего количества мест на морде, на которых будут тестироваться новые тумбы.

max clicks counted - максимальное количество кликов, которое может быть засчитано для уника в течение одной сессии. По действию аналогичен такому же параметру в системе античит защиты cj-скриптов.

ctr recalculation period - количество последних показов, по которым рассчитывается ctr и rank тумб. Этот параметр позволяет более оперативно реагировать на изменения статистики тумб и не держать в топе тумбы, которые раньше были очень популярны, а сейчас по тем или иным причинам перестали быть таковыми. Хочу отметить, что статистика не просто сбрасывается после ctr recalculation period количества показов, а перессчитывается плавно, без скачков.

unique timelife - время уникальности посетителя. Если посетитель не был на сайте время большее чем unique timelife, то ротатор будет считать его новым посетителем. Напомню, что неуникальным посетителям ротатор подсовывает морды с другими тумбами. Как только рав становится опять уником он опять увидит на морде лучшие по статистике тумбы. Это достаточно любопытный параметр, и у автора есть небольшая теория по поводу его использования :) Рассмотрим 3 варианта:

Вариант 1. Период уникальности равен 0. Это значит, что каждый раз посетитель, попадая на сайт, будет считаться уникальным, так как разница между текущим временем и временем последнего посещения больше 0. Так работают подавляющее большинство ротаторов.

Вариант 2. Период уникальности 24 часа. Как показали эксперименты, это наиболее эффективная политика в плане максимально быстрого разгона сайта. Но не самая лучшая, в плане долгосрочной перспективы. Попытаюсь объяснить свою точку зрения. Посетитель во время серфинга по сайтам с некоторой степенью вероятности может вернуться на ваш сидж. Он видит новые тумбы, кликает снова, дрок доволен, прода растет. Допустим что сайт попал к нему в букмарки. Вернувшись на сайт через несколько дней (время > 24 часа) он будет опять уником и увидит опять морду с самыми лучшими тумбами. Так как тумбы лучшие из лучших, то кликать он будет замечательно, но в букмарках скорее всего при таком раскладе наш сайт не задержится - так как контент серфер будет видеть постоянно один и тот же.

Вариант 3. Период уникальности 30 дней. В этом случае посетитель каждый раз попадая на сайт будет видеть все новые и новые тумбы. Не самые лучшие, но всегда новые. Прода в этом случае будет не максимальной, но и вероятность жить в букмарках выше.

Все это похоже на стратегию со скимом: выше ским -больше букмарков, медленнее разгон; ниже ским - быстрее разгон, меньше букмарков.

script folder. Директория ротатора. По сути, это префикс используемый при формировании url-а для локальной тумбы. Нигде больше этот параметр не используется. Если у вас на морде пустые места, хотя в статистике тумбы отображаются нормально, то начните поиск ошибки с этого параметра.

FTP SETTINGS. (Только для платной версии) Раздел настроек для удаленного хранения тумб. Используя эти параметры можно реализовать схему, когда сидж и ротатор будут установлены на одном сервере, а тумбы хранятся на другом. Сам процесс выглядит следующим образом. По расписанию запускается скрипт который проверяет, существуют ли галереи для которых произошел отбор лучшей тумбы, но которая еще не скопирована на удаленный сервер. Если такая тумба найдена, она отправляется на ftp и в базе данных делается соответствующая запись. При выборе другого ftp-сервера или другого каталога на уже используемом сервере все записи о месте размещения удаленных тумб удаляются и соответственно на морде используются локальные версии тумб. До тех пор пока они не загрузятся на новое место. Такая организация работы позволяет прописать параметры ftp сервера в любое время (не обязательно перед грабом галерей), а также изменять удаленное место хранения без копирования директории с тумбами на новое место вручную - скрипт выполнит все ваши прихоти на лету и не допустит, чтобы на морде были пустые места.

use ftp module. "Yes" - модуль удаленного хранения тумб включен, "No" - соответственно выключен.

ftp server, ftp user, ftp password, ftp folder(s). параметры подключения к ftp-серверу, а также путь по которому будут храниться наши тумбы.

remote url prefix. url по которому сервер будет брать тумбы с удаленного сервера.

max files in subfolder. максимальное количество файлов в директории на ftp-сервере.

Кнопка "test ftp settings". Запускает тест ftp сервера. Происходит подключение к серверу, переход в необходимую директорию, создание тестовой директории, копирование тестового файла на сервер, попытка получить этот файл через http-протокол, сравнение с исходным файлом. Если на одном из этапов теста происходит ошибка необходимо еще раз проверить параметры.

email. Сюда будут высылаться сообщения об ошибках mysql-сервера если таковые будут.

script copy order on server. Порядковый номер скрипта ротатора установленного на сервере. Этот параметр позволяет разнести во времени запуск некоторых ресурсоемких заданий. Вообще говоря эти задания могут вполне успешно выполняться одновременно, но для того чтобы не создавать пиковые нагрузки на сервер заполните это поле.

niche. В условно-бесплатной версии, скрипт отдает 1% кликов в качестве оплаты за использование. Выберите пожалуйста нишу сайта для того чтобы этот 1% попадал на ресурс с той же нишей что и ваш сидж. Для платной версии параметр не имеет смысла.

licension key. Номер ключа для платной версии. При приобретении лицензии вы получите сигнатуру которую нужно будет ввести в это поле.

new password и Confirm new password - новый пароль и подтверждение.



Crop profiles. Создание, редактирование и удаление профайлов для кропинга (процесса создания тумб). Для чего это все нужно. Например, на галереях какого-либо спонсора имеется логотип, который вы ну никак не хотите видеть на своих тумбах. У другого спонсора на fhg хронически темные фотографии, у третьего не хватает контраста. Есть два способа решения проблемы:

Вариант 1 (классический). Выбираем спонсора, подкручиваем под него параметры, грабим галереи, переходим ко второму спонсору.

Вариант 2 (StreamRotator). Создаем под каждого спонсора индивидуальный crop profile и при импорте галерей указываемый соответствующий профайл. Дешево, надежно и сердито. Ну и на будущее пригодится, если партнерка регулярно выкладывает новые fhg. Нажмите "Create new profile" для создания нового профайла или edit для редактирования уже существующего. Далее введите url "подопытной" галереи и дождитесь когда появятся уменьшенные копии картинок. Выберите одну из них и погрузитесь в изучение нашего мега-редактора :) Выглядит он так:



В левой части мы видим увеличенную картинку (original image area). Справа внизу (current thumb) - тумбу с примененными фильтрами и настройками кропа. В поле last thumb будет изображена тумба с предпоследними настройками. Т.е. изменив какой-либо параметр вы сразу увидите изменение и сможете наглядно сравнить с тем что было. Изменение параметров и наблюдение за результатами очень познавательное занятие и думаю, вы проведете в этом редакторе массу времени. Теперь о самих параметрах кропа:

Top shave, bottom shave, left shave, right shave - значения для предварительной обрезки исходной картинки в пикселах. Эти значения нужно использовать для вырезания регулярных логотипов на картинках;

Normalize color - нормализация цвета, в 95% делает картинку более привлекательной, но изредка "промахивается";

Shine filter - фильтр добавляет блики на светлых частях изображения;

Dark filter - фильтр осветляет чрезмерно темные места изображения;

Enhance filter - сглаживает мелкие дефекты изображения;

Brightness - яркость;

Unsharp - аналог unsharp mask из photoshop-а, делает изображение резче;

Saturation - насыщенность;

Movie logos - логотипы которые будут наноситься на мувисные тумбы. Можно выбрать несколько (используя CTRL), в этом случае при создании тумб будет выбираться случайный логотип. В окне предпросмотра на тумбе будет первый из выбранных логотипов;

Logos positions - расположение логотипа для мувисных тумб. Аналогично movie logos можно выбирать несколько значений;

quality - качество jpeg.

После установки удовлетворительных значений параметра кропа введите имя нового (или измените имя редактируемого) ротатора и нажмите "save".



Backup. Менеджер резервных копий. Создание, восстановление, удаление резервных копий.



Update. Эта замечательная ссылка позволяет обновить скрипты и таблицы баз данных до последней версии. Все происходит очень удобно, быстро и без лишних вопросов. Пару слов о безопасности. Перед апдейтом скрипт проверяет целостность и соответствие контрольным суммам обновляемых файлов и структуры базы данных на сервере. Как вычисляются контрольные суммы я никогда никому не скажу, подобрать их невозможно, взломать алгоритм расчета теоретически возможно, но практически крайне сложно. Кроме всего вышеперечисленного, перед каждым апдейтом автоматически создается бакап и в случае какого-либо сбоя скрипт апдейтера автоматически произведет восстановление из резервной копии.



Logout - выход из админки.