Делаем голосование для сайта

В этом месяце я впервые столкнулся с задачей провести серьезные голосования с помощью сайта. Это "Самая красивая деревня во Владимирской области 2015" и "Диплом Доверие потребителей 2015". Оба голосования проводила "Опора России". Соответственно, всё должно было на их сайте, который я делал на Modx Revo.

Голосования и конкурсы, когда они адекватно сделаны, всегда дают хороший эффект на развитие сайта. Вот пример того, что случилось с посещаемость сайта "Опоры России" в месяц голосований. Кстати, второе голосование ещё не закончилось. Итоговый результат будет больше 40 тысяч посещений.

Рост посещаемости сайта

Конечно, не у всех есть такие административные ресурсы, как у Опоры. Раскрутить сам конкурс бывает довольно сложно. Но одним из пунктов участия в нем обязательно должен быть "Опубликовать у себя на странице информацию о конкурсе". О конкурсах Опоры написали практически все региональные СМИ.

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

Выбор и настройка сервиса для голосования

Есть выбор среди нескольких вариантов платформ для голосования: плагин для CMS, интернет-сервис, отдельный готовый php-скрипт, программы на заказ, API социальных сетей. Для Modx Revo буквально пара плагинов для голосований: популярный Polls и его отечественный аналог Xpoller. У обоих откровенно бедная функциональность. Главное, что нет подробной статистики по голосующим. Чтобы плагин показал вам график, а не просто цифры с процентами, то придется его модифицировать. К счастью, в поисковых системах можно найти инструкции.

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

Php-скрипты также не облагают богатой функциональности, тем более, не хотелось дополнительно нагружать свой сервер. Вдруг, его бы попробовали "завалить". Заказывать у программистов голосование будет дорого. Остаются интернет-сервисы для голосований.

В основном, сервисы для голосования платные. Причем оплата, конечно же, за месяц или год. Что-то мне подсказывает, что людям нужно провести голосование 1 раз, например. К чему эти помесячные оплаты? Стоимость таких сервисов примерно 500-1000 рублей в месяц. Самое интересное, что даже заплатив деньги, вы все равно ограничены в количестве участвующих людей в голосовании. Например, за 8 долларов, принимается только 5000 голосов. Я с таким решением категорически не согласен.

Помимо этого, функциональность платных сервисов далеко не всегда меня устраивала. Например, результаты не показывались автоматически при последующих посещениях страницы с голосованием - висит надпись "Вы уже проголосовали", и всё. Примеры популярных платных сервисов - Survey Monkey, Poll Daddy, Formdesigner.

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

Дошла очередь до Pollservice.ru. Сервис, судя по новостям на их сайте, уже пару лет не развивается. Это кстати показатель, проверьте, давно ли обновлялись новости и статьи на ваших сайтах? Может посетители думают о вас также?

Пример голосования на сайте

Сервис очень простой в освоении. Есть подробная статистика с географической расшифровкой IP-адресов голосующих вплоть до города. Вставка на сайт двумя строчками, одна из которых подгружаемый JS-файл. Можно публиковать несколько голосований на страницу (JS-файл будет загружаться все равно только один). Можно менять оформление голосования с помощью своих CSS-надстроек.

Но есть и недостатки. Например, нельзя в варианты ответов встраивать ссылки. Это решается дополнительным скриптом, который подгружает ссылки после вариантов ответа. У каждого варианта ответа есть свой id. К ним легко привязаться. Но надо учитывать, что этот скрипт должен загружаться после полной загрузки голосования. Ниже пример с загрузкой через 5 секунд (недостающие кавычки найти не сложно).

setTimeout(function () {
$("#pollservice_poll_0_answer_216430").after("
div style='float:right'>a target='_blank' href='http://www.site.ru'>(перейти на сайт)a>div>
");}, 5000);

Вторая проблема - это проблема с показом результатов при следующих заходах на страницу. Сервис дает как бы возможность проголосовать ещё раз, потом показывает этот результат. Но голос он учитывает только первый. Результаты доступы на странице самого сервиса по странице с постоянным адресом. Я пошел по самому простому пути - вставка через iframe окна, где будут отображаться результаты. Когда голосование у вас на сайте одно, то это сделать проще простого. В моем случае голосований девять. К счастью, сам сайт pollservice.ru достаточно легкий, загружается быстро. Поэтому даже 9 параллельных страниц у меня загружается примерно за 1-2 секунды. На телефоне через 3G загрузка идет секунд 5. Терпимо.

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

Итак, прописываем стили, вставляем код с голосованием (что куда вставить разберется любой с начальными знаниями html и js).

.outerdiv1{width:670px;height:128px;overflow:hidden;position:relative;margin-top:-36px;display:none}
.outerdiv1-1{width:670px;height:128px;overflow:hidden;position:relative;margin-top:-36px;display:block}
#innerIframe1{position:absolute;top:-260px;left:-73px;width:708px;height:390px;border:0}

img src="assets/images/vote-logo1.jpg">
div class="pollservice-poll" data-key="jdljw3ajac">/div>
div class='outerdiv1'> iframe src="http://pollservice.ru/p/jdljw3ajac/results" id='innerIframe1' scrolling=no>/iframe>/div>

Скрипты onclick на кнопки с классами .button и .button2.

a class="button" href="/golosovanie#gol">Показать результаты/a>
a class="button2" href="/golosovanie#gol">Показать голосование/a>

setTimeout(function () {
$(".button").click(function(){
$(".pollservice-ru_answer-list").hide();
$(".outerdiv1").removeClass("outerdiv1").addClass("outerdiv1-1");
});}, 1000);

setTimeout(function () {
$(".button2").click(function(){
$(".pollservice-ru_answer-list").show();
$(".outerdiv1-1").removeClass("outerdiv1-1").addClass("outerdiv1");
});}, 1000);

Теперь по кнопке "Показать результаты" выходит такая табличка, а блок с возможностью голосования пропадает.

Итоги голосования

Если посетитель ещё не голосовал, а решил сначала ознакомится с результатами, то по кнопке "Показать голосование" он возвращается к оригиналу страницы.

Боремся с накрутчиками голосов

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

Накрутка голосов

Согласитесь, самую красивую деревню во Владимирской области не будут выбирать по всему миру. Также много подозрительных голосов с Китая и Украины. Обычно они очень сжаты временными рамки. То есть за понедельник отдали 100 голосов, а за 5 минут утра вторника 100 голосов только из Китая. Такие голоса легко подсчитываются и просто вычитаются. Вдруг это конкурент пытался опорочить честь и нагнал ботов специально не на себя.

Также накрутчики пользуются сервисами по платному выполнению определенных действий. Например, за 25 копеек предлагали проголосовать за одну из деревень. К счастью, они тоже отслеживаются. Только на этот раз через системы Веб-аналитики. Если видите сомнительные сайты, с которых идут переходы именно на голосование, то зайдите на них. Не всегда такие страницы доступы незарегистрированным. Зарегистрируйтесь, ещё раз зайдите на эту страницу. Вы увидите текст задания с описанием желаемого действия.

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

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

Автор: . Дата публикации:

Больше материалов с сайта: