Как мы делали amd2013.ru
В начале декабря мы начали делать небольшой, чисто новогодний проект http://amd2013.ru. Это конкурс, куда одни люди присылают свои креативные работы, а другие за них голосуют.
Проект заказали студии Simple Dream, а они уже подтянули меня.
Приз - 8 ноутбуков, по одному для лучшей работы в каждом из регионов РФ. В целом - ничего необычного, многие крупные фирмы устраивают подобные конкурсы, но я хочу рассказать об интересных моментах в реализации.
Во-первых (и это очень важно для меня), проект сделан на Tickets. Это первое боевое применение компонента, "не для себя". А во-вторых, там будет прикольная история, как мы считали голоса.
Добавление работ
По условиям ТЗ, посетители сайта могут добавлять работы на конкурс без регистрации. То есть, в терминологии MODX - неавторизованные юзеры должны создавать страницы сайта. Tickets этого не позволяет, принципиально, поэтому пришлось сделать фоновую регистрацию пользователя, чтобы потом было кем оперировать в системе.
Все работы разбиты на 8 регионов. При добавлении новой, выбор региона подсказывался по ip через сервис http://ipgeobase.ru. В админке MODX это были 8 разделов секций для тикетов.
На конкурс принимались либо картинки, либо видео, с обязательным условием - собственноручное изготовление. Дизайнеры придумали отображать все работы этакой стеной картинок, то есть, мне нужно было из видео выделять кадр для вывода на главной странице.
Кстати, страница не только главная, но и единственная. То есть, все операции производятся через окошки и ajax запросы. Для того, чтобы окошки можно было открывать по прямым ссылкам - я написал такую штучку.
Видео можно принимать с трех сервисов, каждый из которых генерирует несколько видов ссылок. Конечно, приниматься должны все ссылки, без исключений и ошибок.
Пришлось попотеть, но в итоге, у меня получился симпатичный класс для добычи картинок с Youtube, ruTube и Vimeо. Он не завязан на MODX, можно использовать в любом проекте.
После добавлении работы модератору высылается письмо, с двумя ссылками - утвердить работу, или удалить. При удалении он пишет причину отказа, и она уходит юзеру. Изначально предполагалась модерация, перед публикацией. Однако, в первый день решили её отключить, ибо поток работ был небольшой.
Запуск
Сайт запускали 17го декабря. То есть, чуть больше чем за две недели дизайнеры умудрились всё нарисовать, верстальщики сверстать, я - написать внутренности, тестировщик проверить и мы поехали!
Ну как, поехали. В пылу работ мы немного забыли про любимый браузер всех верстальщиков - Internet Explorer. Внешне всё было хорошо, а вот форма добавления работа не отправлялись на сервер из за какого-то конфликта jquery.form.js с непонятно чем. Применили,кажется, Ajax uploader - и всё наладилось.
Представляете, да, как пришлось парням из Simple Dream это всё разруливать и в какие сроки? В такие моменты я счастлив, что являюсь обычным программистом, а не владельцем веб-студии. Им геморой - а мне премии за скоростную работу в выходные =)
Как я уже говорил, мы отключили премодерацию и заодно - пагинацию (разбивку на страницы), что было связано с дизайнерскими заморочками. Оба этих 2 момента нам еще аукнутся.
Голосование
Самое основное в любом конкурсе - возможность голосовать за участников. В конкурсе были доступны голосования через 3 социальных сервиса Facebook, Vkontakte и Twitter, а также по email - специально для будущих накруток.
Общение с сервисами я сделал через HybridAuth. Мне он так понравился, что после работ над сайтом первым делом я написал компонент для авторизации в MODX с его помощью.
Было принято решение собирать все голоса, а при подведении результатов исключать накрутки. И тут вылезла первая проблема - накрутки пошли со страшной силой. За две недели конкурса на нем проголосовали более 80 000 раз!
Голосование по почте было устроено максимально просто: вводишь адрес и тебе приходит ссылка с уникальным кодом. Переходишь по ней - и голос активируется. Логично, что все накрутчики сконцентрировались именно на ней. Отсюда - 70 000 голосов через почту. Представили, да?
То есть, реальных голосов менее 10 000, что уже более-менее походит на правду.
Из за простоты накрутки, и того факта, что голоса не обнулялись в процессе конкурса, накрутчики окончательно потеряли совесть. Дошло до того, что они начали вешать похабные картинки с жалобами на других накрутчиков! А им в ответ появлялись новые картинки, со скриншотами их работ, где за 15 минут 1000 голосов.
Короче, это была вакханалия любителей халявы, и мы включили премодерацию обратно.
Подсчет голосов
А вот тут самое смешное. Никто не менял ip адреса!
С одного ip проголосовали более 30 000 раз, с другого - 7000 раз и так далее. Из-за явной легкости накрутки через почту, в плюсе остались только честные люди, которые голосовали всеми семьями и друзьями с разных айпишников и социальных сервисов.
В итоге, выявление основной массы обманщиков вылилось в примитивный SQL запрос:
SELECT `parent`, `ip`, COUNT(`ip`) AS `votes`
FROM `modx_tickets_votes`
GROUP BY `parent` , `ip`
ORDER BY `parent` ASC, `votes` DESC
И мы видим все работы по порядку с айпишниками, которые голосовали, и количеством голосов с каждого ip. Понятно, если с одного ip 20 000 голосов за одну работу - это не совсем нормально.
Поэтому, в данный момент накрутки вычищаются, остальные юзеры проверяются и скоро будет подведен итог конкурса.
Про Tickets
История получилась больше про социальную ловлю обманщиков на конкурсе, а мне бы хотелось еще рассказать, как справился мой компонент Tickets.
Плюсы:- Благодаря защите через Jevix, ни в одной работе не оказалось ни XSS, ни другой гадости. Взломать сайт через создание ресурса в Tickets вообще пока никому не удалось.
Минусы:- В целом, никаких.
Были разве что, тормоза при выводе 250 работ. Помните, я говорил, что мы отключили пагинацию? Так вот, ближе к концу конкурса стало тяжеловато выводить все работы сразу.
Но этот вопрос решился написанием сниппета при помощи перспективной утилитки pdoTools, благодаря чему время вывода главной страницы сократилось до 0,3 сек.
В общем, работой Tickets я абсолютно доволен, и советую его всем юзерам MODX Revolution не только для создания блогов, но и для вывода новостей, комментирования любых ресурсов сайта, и организации подобных конкурсов!
0
👍
👎
❤️
🔥
😮
😢
😀
😡
1 577
09.01.2013 15:10:29
12 комментариев
Лажанулся я с IP. Не стал прокси подключать, хотя это дело буквально 5 минут. А так, вот сервис какой у меня получился)) http://amd.agelnash.ru/
Я очень удивился, когда увидел, что ты не самый мощный накрутчик.
Самый мощный 30 000 голосов с одного Ip накрутил.
У меня в кроне стоял скрипт удеражние позиции. Он проверял сколько голосов у меня ближайшего конкурента в окнуге и выходил в отрыв на 130+ голосов. Т.е. если бы с ближайшим конкурентом у меня был разрыв в 10 голосов, то после запуска скрипта я бы вышел опять в открыв 130 голосов. Скрипт в кроне у меня работал каждые 30 минут. В последние пару часов каждые 2 минуты.
Единственно, что я не предусмотрел - отключение вывода числа голосов)) Т.к. конкурентов вдруг не стало, а по умолчанию стояла активация 10 голосов за 1 выполнение, то у меня каждые 2 минуты стало прибавляться 10 голосов. Чухнулся я когда было уже 3500 голосов вместо 1100(( Именно потому я был не самым ярым накрутчиком. Хотя в запасе у меня было 10000 почтовых ящиков + 3000 твиттер аккаунтов + 1000 фэйсбуков.
Зато от того конкурса я получил море драйва + готовый инструмент для накрутки любых голосований по e-mail + прочеканые аккаунты на валидность)) Хотя не скрою. Обидно будет, если после чистки голосов победа достанется моему конкуренту. Бог с ним с другими. Но если победит работа "Новый год будет с сыном", то это жесть, т.к. накручивали мы с ним 27-29 числа каждый вечер втечении 3 часов. После последней 3 часовой битвы у моего конкурента не получилось выбраться в лидеры и он остановился на 980 голосах. Так что эта работа 100% накручена. Поэтому в моем федеральном округе должен победить либо я, либо любые другие работы.
Ахаха, супер!
Моя б воля — точно бы тебе отдал победу, настоящий "технологичный новый год"
УРА. Обнулили работу конкурента. У меня уже давно обнулили и теперь я на 1 месте в своем федеральном округе)) А новый год на самом деле технологичный получился. Чуть позже подготовлю исходники и залью на гитхаб, если кому-то интересно.
Поздравляю!
Уже не уроа. И поздравлять незачем. Коммент так, для истории.
Andrey Shin
При помощи sms защита от накруток не рассматривалась? Интересно, нет ли чего-то в этом роде.
Не знаю, в моём ТЗ смс точно не было =).
А так да, идеальный вариант.
Александр Донский
Спасибо за статью, интересно почитать как проекты на практике реализируют. Я хочу задать нубский вопрос >но и для вывода новостей вместо getResources?
Tickets - это система создания и организации специальных ресурсов, рассчитанная на большие объёмы.
Выводить эти ресурсы можно по разному, в том числе, и через getResources. Основные особенности Tickets расписаны тут.
bezumkin.ru
Личный сайт Василия Наумкина
Прямой эфир
Дмитрий
08.02.2025 09:09:01
Спасибо за ответ. Есть желание разобраться самому. Прочитал все ваши статьи и понял, что VESP перспе...
Василий Наумкин
04.02.2025 19:27:08
Я таким давно не занимаюсь и с MODX не работаю.
Попробуйте обратиться к ребятам с modx.pro.
Василий Наумкин
23.12.2024 05:33:00
В MODX сначала создали проблему, автоматически генерируя адреса, а потом "решили" заморозкой.
Так ч...
Дмитрий
14.12.2024 09:10:38
Василий, прошу прощения, тупанул, не разобрался сразу. Фреймворк отличный! "Чистый лист" на vue, рис...
Василий Наумкин
05.12.2024 20:01:14
В итоге основная ошибка была в неправильном общем root в Nginx, из-за чего запросы не улетали на фай...
Василий Наумкин
01.07.2024 11:56:41
Да, верно, именно так.
А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024 09:38:15
О, точно, вылезает если не залогинен.
Спасибо, исправил!
Уровни подписки
Спасибо!
500 ₽ в месяц
Эта подписка ничего не даёт, просто возможность сказать спасибо за мои заметки. Подписчики отмечаются зелёненьким цветом в комментариях.
Большое спасибо!
1 000 ₽ в месяц
И эта подписка не даёт ничего, кроме оранжевого цвета в комментариях и возможности сказать спасибо, но уже большое!