Технические лайфхаки для конкурсов

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

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

Конкурс прогнозов

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

И да, любые призывы делать всё в едином формате обычно игнорируются. Аудитория не любит читать условия конкурса – «Monkey see – Monkey do», сделают примерно как у всех, не глядя в правила.

Что же было предпринято нашим маркетологом (с техническим прошлым)? Процесс очистки данных в Excel был автоматизирован несколькими VBA-макросами. Рассказываем про каждый.

Перед началом копируем старым дедовским «Ctrl+C» – «Ctrl+V» методом данные в таблицу. И дублируем в соседнюю ячейку те же данные, они пригодятся, чтобы можно было сравнить результат работы макросов с оригиналом.

Первым делом надо удалить всё, кроме цифр и десятичных знаков. Первый макрос делает именно это:

Const AlfaBet As String = "=-/\()`'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"

Sub Macros1CharDel()
    Set R = Application.Selection
    
    R.Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    R.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    R.Replace What:="+", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    R.Replace What:="$", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    R.Replace What:="~?", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    R.Replace What:="~!", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    R.Replace What:="~#", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    R.Replace What:="~;", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    R.Replace What:="~@", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    R.Replace What:=":", Replacement:="%", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    
    Dim n As Integer, i As Integer, S() As String
    n = Len(AlfaBet): ReDim S(1 To n)
    For i = 1 To n
        S(i) = Mid(AlfaBet, i, 1)
        R.Replace What:=S(i), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Next i
End Sub

Задаём алфавит, по которому потом пройдём циклом, удаляя все символы из списка.

Дальше идёт предварительное причёсывание данных:

  1. Меняем все точки на запятые, именно они выступают десятичным знаком в Excel.

  2. Удаляем все пробелы.

  3. Дальше по одному удаляем спецсимволы (в цикле обработать не выйдет, он захватывает только один символ, а в макросах они должны экранироваться тильдой).

  4. Подменяем для удобства двоеточие на знак процента, иначе рискуем получить в итоге ячейки со «временем» после удаления лишних символов.

Наконец данные готовы для удаления символов из заданной в самом начале строки.

Второй макрос удаляет размеченные ранее даты:

Sub Macros2DatesDel()
    Set R = Application.Selection
    
    R.Replace What:="*%*", Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      
End Sub

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

Выход есть, заставляем Excel работать, меняя формат ячеек третьим макросом:

Sub Macros3DoNumbers()
    For Each Cell In Selection
    If Cell.Value <> "" And IsNumeric(Cell.Value) Then
        Cell.Value = (Cell.Value * 1)
        Cell.NumberFormat = "General"
    End If
    Next
End Sub

И вот у нас уже нужный результат. Визуально уже можно определить где числа. Но, всё же полученные данные портят оставшиеся записи о лайках (эти 1,2 или 3…).

Делаем последний макрос:

Sub Macros4DelLittleNumbers()
    For Each Cell In Selection
    If Cell.Value < 1000 And Cell.Value > 0 Then Cell.Clear
    Next
End Sub

Им мы удалили всё, что меньше тысячи. Но не трогали отрицательные значения, если где-то закралась ошибка, и прилипшее тире превратило число в отрицательное.

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

Быстро исправляем ошибки, благо справа у нас есть оригинал для сравнения. Всё, переносим на страничку с сортировкой разницы от цифры по модулю =ABS(A2-B$2)и сортируем ASC.

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

Викторина с купонами

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

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

Первый этап: Экспортируем ответы викторины в CSV и считаем правильные ответы в каждой графе. В итоге получаем список: ссылка + верные ответы.

Копируем, чтобы избавиться от дублей (при вставке указываем: только уникальные значения) на столбце с именами. Все повторные попытки стираются – profit.

Полученный CSV импортируем в любую БД, у меня под рукой mysql. А дальше ловкость рук и никакого мошенничества:

<?php
$link = mysqli_connect("хост", "логин", "пароль", "база");
mysqli_query($link, "SET NAMES utf8");
$names = mysqli_query($link, "SELECT * FROM `таблица`");
$number=1;
while ($arr = mysqli_fetch_array($names)) { while ($arr[2]>0) {echo $number++.';'.$arr[1].'<br>'; $arr[2]--;}}
?>

Простейший скрипт «раздаёт билетики», повторяя каждого участника нужное количество раз с глобальным счётчиком.

Сохраняем текст как CSV и полученные данные вставляем в гугл.док, из которого в прямом эфире будет происходить выбор победителя.

А тут всё просто, отбираем претендентов вертикальным просмотром по номеру из рэндомайзера: =VLOOKUP(C9;'Список билетов'!A:B;2;0)

Проверяем адекватность победителей и готово!

Конкурс с комментариями

И если этого вам показалось мало, ловите ещё один мини-лайфхак для очередного типа конкурса.

По условиям необходимо просто оставить комментарий под публикацией. А нам, как маркетологам, достать список участников, не прибегая к лишним инструментам.

Делаем старый добрый «Ctrl+C» – «Ctrl+V» комментариев в табличку (с сохранением исходного форматирования).

Дальше запускаем на новом листе простейший макрос по доставанию ссылок:

Sub доставательссылок()
With ActiveSheet
For I = 1 To .Hyperlinks.Count
.Hyperlinks(I).Range.Offset(0, 1).Value = .Hyperlinks(I).TextToDisplay
.Hyperlinks(I).Range.Offset(0, 2).Value = .Hyperlinks(I).Address
Next I
End With
End Sub

В первом столбце текст ссылки (Имя и Фамилия), а во втором сама ссылка.

А теперь удаляем из списка ссылки на публикации:

Sub удалятельпостов()
    Set R = Application.Selection
    
    R.Replace What:="*wall*", Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      
End Sub

Готово! Удаляем дубли и вставляем в рэндомайзер.


Надеемся, было полезно. И чьи-то соцсети теперь наполнятся более глубокими конкурсами, чем простые угадайки с подключёнными ботами.

А если есть идеи для новых активностей или упрощения приведённых схем, делитесь в комментариях.

Источник: https://habr.com/ru/articles/741170/


Интересные статьи

Интересные статьи

В #CloudMTS мы активно используем Go. Например, Go основной язык в балансировщике нагрузки (GSLB), в сервисах создания и управления кластерами PostgreSQL и Redis. Благодаря производительности,...
Приветствую! Меня зовут Максим Куртлацков, и я работаю игровым продюсером днем и инди-разработчиком своего собственного проекта по ночам. Мой пет-проект находится в разработке уже около года, и я гото...
Рассказываем, что такое Школа Авторов от Хекслета и как мы бесплатно учим разработчиков, аналитиков, тестировщиков и администраторов создавать курсы и писать классные технические тексты.
Исторически сложилось, что sudo права регулировались содержимым файлов из /etc/sudoers.d и visudo, а авторизация по ключам велась с использованием ~/.ssh/authorized_keys. Однако с ростом инфрастр...
Как и обещали, продолжаем рассказывать про освоение процессоров Эльбрус. Данная статья является технической. Информация, приведенная в статье, не является официальной документацией, ведь получена...