Сразу проясню несколько моментов. Во-первых, я буду говорить об очень конкретном использовании роботов. Вполне могут быть и другие варианты использования автоматики в подобных делах, и наверняка есть. Во-вторых, это не о майдане, то о чем я пишу, я наблюдал годами и в процессе развития, а основная часть изложенного ниже получена в ходе наблюдения за информационным обеспечением так называемой «иранской весны» 2009-го года. Вполне вероятно, что с майданом делается то же самое, но этот вопрос я специально не изучал, сказать не могу. И в-третьих, это не имеет никакого отношения к моей работе, и вообще, в 2009-м я работал в совсем другой фирме, которая, к слову, к той революции тоже не имела никакого отношения (к нынешней, увы, имеет — директор Майкрософт Украина торчит на майдане, вместо того чтобы заниматься своей работой).
Ну, и совсем уж для ясности, я сам вообще никогда не делал этого для политических кампаний. Откуда я тогда это знаю? Позвольте мне не заниматься полным раскрытием источников и лишь указать на некоторые. Немалую роль сыграли профессиональные контакты, когда встречаются два программиста, о чем только не услышишь. А немалую роль сыграло также пристальное наблюдение за событиями в сочетании с профессиональными наклонностями. Причем не только мои личные наблюдения, таких заинтересованных оказалось несколько больше, чем организаторы ожидали. Ну, да, проклятые гики...
Знаете старую загадку? Как видит симпатичную женщину мужчина, другая женщина и сапожник? Мужчина смотрит на грудь и бедра, женщина на одежду и макияж, а сапожник — на каблук, который вот-вот оторвется. Вот, о каблуках и поговорим.
Вообще-то я не собирался об этом писать, на фейсбуке попросили в ответ на комментарии. Если честно не вижу ничего особо интересного в этом всем. Да и технически все достаточно просто. Итак...
Языком репортера
Для начала кратко изложу события «языком репортера». Есть такая штука в журналистике, разделения репортерства и аналитики. Репортер не имеет этического права высказывать суждения, а только то, что видел. А уже сложив сведения от нескольких репортеров, аналитику могут рассуждать, что правда, а что померещилось. Добавлю, что я не профессиональные репортер, так что без претензий - как получится, так получится.
Итак, 2009-ый год, в Иране по поводу выборов началась очередная цветная революция, от которой, по мнению многих, за много часовых поясов воняло оранжевыми розами перевязанных белым лентами. Волнующаяся иранская молодежь использовала Твиттер, чтобы поведать правду urbi et orbi. Сообщения говорили о столкновениях со стражами исламской революции, уличных боях, жертвах... Увы, английский — не самый популярный язык в Иране, так что твиты сначала шли на фарси, что для освещения событий в странах с развитыми СМИ работало не очень хорошо. Ну, не показать на весь телевизионный экран ровные строчки непонятных загогулин так, чтобы народ впечатлился. Как по заказу пошли твиты на английском, которые подхватывались репортерами как последние сводки с места боевых действий.
И тут выяснилось, что большая часть англоязычных твитов идет от сплоченной группы пользователей, которые часто ретвитают друг друга, и которые сидят на десятке-другом IP адресов в Канаде. Было высказано мнение, что это роботы, особенно если учесть дополнительные заявления, что пара из этих IP адресов была в data centers Амазона, который предоставлял легко доступные публике вычислительные мощности через свои сервисы (во многом сходные с Microsoft Azure и Google Application Engine, равно как и приватными бизнес предложениями от компаний вроде EMC, IBM или VMWare) и никак не могли быть ноутбуками или сотовыми телефонами реальных людей.
Правда, вскоре к этой группе присоединились пользователи, которые никак не могли быть роботами. Хотя бы потому что одного из них за этим занятием застал отец. Оказалось, что разогретые первоначальной группой и СМИ, некоторые студенты в Северной Америке и Западной Европе подключились по собственной инициативе к процессу, и стали ретвитать сообщения роботов, так же добавляя временами свои творения в жанре художественной литературы.
Вот так это все выглядело с моей точки наблюдения. Правда ли, нет ли, я даже разбиратья не собираюсь. Я пишу не о самой революции, а о том как это проделать самому. Это и правда очень просто. Это можно сделать даже на бюджете «шнурков от ботинок» и не написав ни строчки кода, хоть и слегка топорно, а если уж вы готовы нанять программистов или сами знаете, где у Visual Studio хвост... Для справки, заказов на подобную деятельность я не принимаю. Серьезно. Во-первых, я не считаю это этичным, а во-вторых, у меня куда интереснее дела есть. Итак, репортаж сделан, теперь о деле.
Плывет клиппер, на клиппере шкипер, у шкипера Твиттер...
Прежде всего, почему Твиттер? Зачем?
На Твиттере можно изобразить общение «восставшей оппозиции» с фразами типа «Я слышал, сюда идут стражи исламской революции. Прощайте!», ну, и прочее в том же роде. Если разогреть роботами это чисто виртуальное общение до нужного градуса, то в игру втянутся ничего не подозревающие игроки, причем в количестве значительно превышающем этих роботов. А если они понесут все это в другие соцсети и реал, то общественное мнение будет значительно лучше подготовлено к принятию любых санкций против «режима». Наконец, Твиттер очень удобен для представления состояния дел публике и — особенно — прессе. Ввел ключевое слова #iranspring и сразу тебе целый экран сообщений от «борцов за свободу» с развитием событий в реальном времени. А дальше уже начинаются сетевые эффекты реального мира и прессы, и откуда пришел твит «несгибаемого бойца» уже не только не найти, но и никого не волнует. Это ответ на вопрос почему. Скорее всего неполный, люди занимающиеся такими вещами профессионально, наверняка обьяснили бы это подробнее и более квалифицированно, но по понятным причинам, они о таких вещах не пишут.
К слову, а почему именно Твиттер? Не фейсбук, не ЖЖ, что там еще массовое есть... Ну, Гугл+ тогда еще не было, но тоже вряд ли на него пал бы выбор. Причин несколько. Прежде всего это по ряду причин Твиттер проще. Для начала, Твиттер — фактически анонимный ресурс. Они, конечно, пытаются блокировать роботов, честно пытаются, но судя по всему это у них не очень получается. По открыто гуляющим в Интернее цифрам, около четверти твитов принадлежит роботам, и около половины последователей брендов — тоже роботы.
Во-вторых, помните шутку об успехах искусственного интеллекта, который теперь уже может соревноваться со вполне натуральными идиотами? Я уж не буду говорить, что революция — это само по себе занятие не слишком интеллектуальное, но твиттеровские 170 литер на сообщение и сами по себе опускают дискуссию до уровня вполне доступного нынешнему искусственному интеллекту. К слову, этот самый нынешний уровень искуственного интеллекта достаточен, чтобы вести переписку от имени одинокой романтичной девушки из России-Украины, ищущей суженого в стране обетованной по Интернету. Года три назад в Communications of ACM была статья, где человек, участвовавший в такой переписке, обнаружил подмену женщины на автомат (ну, прямь как в Кин-Дза-Дза) за счет своих знаний в этой области.
В-третьих, ваша история в Твиттере ограничена. Одно время вроде бы удалялись твиты после 3-х месяцев, сейчас это отменили, но держат только порядка 3000 твитов. Заметьте, как это удобно для таких игр. Революция прошла, и тонны исследователей соцсетей начнут копаться во всех сообщениях, и еще неизвестно, что откопают. Вот только бесстрашный выживший революционер продолжил твитать о чем-то совершенно абстрактном и все записи революционной поры ушли в долу. Неплохо, правда?
Ну, и кроме того, Твиттеровские API — программные интерфейсы, сделанные специально для роботов — очень качественные и удобные, писать для них код — просто удовольствие, на личном опыте знаю. Ну, как только с ауфентикацией разберешься, ее они и правда сделали через что-то не то.
Nuts and bolts — Потроха системы
Словарик-напоминалка
Если вы никогда не имели дела с Твиттером, то вот краткая справка основных твитов.
Твит — короткое сообщение до 170 литер, которое публикует пользватель Твиттера. Это единственный тип сообщений, которые можно публиквать на Твиттере. Часть сообщения может быть URL ссылкой на веб страницу, документа, картинку, видео...
Лента — список твитов других пользователей Твиттера, которых вы отслеживаете (т.е. нажали кнопку «follow»). Это основной экран пользователя Твиттера, который и обеспечивает основное чтение новосте и передачу информации на нем.
Поиск — лента это не единственный способ прочитать сообщение другого пользователя, можно его просто найти по ключевому слову. Для этого обычно используется хеш (он же таг). Поиск — это способ находить новых пользователей, чтобы «следовать» им.
Последователь (follower) – пользователь Твиттера, который нажал кнопу «follow», и потому видит ваши твиты на своей ленте.
Ретвит — чужое сообщение, которое вы переопубликовали как свое, со ссылкой на автора. Теперь его увидят и ваши последователи.
Хеш он же Таг (hash tag) – ключевой слово, помеченное знаком хеша (#) в начале, которое позволяет искать твиты, посвященное одное теме. Например, вставив в сообщение хеш #Madrid, его смогут найти все пользователи Твиттера, которые будут искать твиты о Мадриде. Для этого они будут вводить свое ключевой слово в поиске как хеш: #Madrid Эта традиция Твиттера уже перекочевала в другие соцсети тоже.
Ответы — твиты в ответ на другие твиты. Содержат имя автора со знаком @, например, «@cooldude Where R U now?»
Время собирать камни и время разбрасывать камни
Как большая часть проектов, использование роботов для распространения информации содержит две фазы — подготовку и эксплуатацию.
В фазе подготовки, вам нужно создать виртуальных пользователей с некоторой легендой, и раскрутить их так, чтобы у них оказалось максимально возможное количество последователей, читающих их твиты.
В фазе эксплуатации, они должны твитать то, что вам нужно, когда вам нужно.
Это в частности означает, что готовиться надо заранее. Раскрутка включает в себя реакцию реальных людей, которые совершенно не в курсе своего участия в процессе, так что это занимает как минимум недели. Кроме того, есть и чисто технические ограничения как быстро вновь зарегистрированный пользователь может стать популярным — это уже часть борьбы собственно Твиттера с роботами.
Фаза подготовки: персонажи
Для начала, вам надо определиться с персонажами и минимальной легендой для них. Нет, писать подробную биографию размером в «Войну и Мир» совсем не нужно, и даже вредно, но некоторый минимальный набор определить надо.
Как минимум имя, пол, примерный возраст и хобби. Да-да, хобби или увлечения. Они понадобятся на фазе раскрутки. Неплохо также заготовить все, что понадобится для регистрации на Твиттере и заполнения профиля.
Когда данные подготовлены, зарегистрируйте ваши персонажи на Твиттере. Эта операция ручная просто потому что автоматизировать ее нет никакого смысла, да и регистрация нового пользовател через приложение — это куда более подозрительно, чем ручная, а вы совсем не хотите привлекать внимание инженеров Твиттера и их охотников за роботами (да, разумеется, охота на роботов и спаммеров обычно в основном автоматический процесс тоже).
Отдельное примечание — регистрация слишком большого количества пользователей с одного IP адреса тоже отслеживается. Одна простая опция регистрации массы пользователей с разными IP адресами — это заказать это у одной из фирм, специализирующихся на Facebook лайках. Просто введите в любом поисковике «buy facebook likes cheap» и попробуйте спросить найденные фирмы, сколько будет стоить зарегистрировать тысячу пользователей Твиттера из электронной таблички с разных IP адресов.
Фаза подготовки: раскрутка
Раскрутка на Твиттере является удивительно тупым занятием. Делается это, насколько я знаю, тоже вручную, хотя в принципе, можно и приложение для этого написать. Только в этом случае надо быть осторожным, чтобы ваше приложение не выглядело как робот, поскольку повторюсь, инженеры Твиттера с роботами борются и правильно делают.
Итак, как же раскручивать на Твиттере для таких полумеханических целей? Для справки, цель раскрутки — получить как можно больше последователей (followers), потому что в основном только они и будут видеть ваши твиты.
Скелетный механизм достаточно просто. Вы ищете твиты по интересующим вас тагам. Предположим, вы решили, что ваш герой увлекается леди Гагой. В самом деле, почему бы скромному иранскому студенту не увлекаться леди Гагой? Значит вы ищете по тагу #ladygaga. Найдя, нажмите у всех кнопку Follow (Следовать), пока Твиттер позволяет, а лучше несколько поменьше, чтоб вас не засекли как спамера или робота. Подождите от трех дней до недели. Выкиньте всех, кто не стал следовать вам взаимно. Можно последовать всем тем, кто нашел вас сам, но необязательно (детали ниже). Найдите следующую партию. Повторите.
Для справки, зачем делать это в много этапов? Для начала на Твиттере есть ограничение для новичков — вы не можете следовать больше чем паре тысяч. А со временем, в зависимости от того, сколько следует вам. Есть таже ограничения на день и некоторые другие. Полные ограничения описаны открыто: https://support.twitter.com/articles/66885-why-can-t-i-follow-people
Многоэтапный процесс позволяет эти ограничения частично обойти и получить более двух тысяч последователей. Для интересующихся, есть программы и сервисы, которые этот процесс авоматизируют (как и дальше в статье, рекламировать эти сервисы я не собираюсь, поскольку не одобряю, но кто хочет и сам найдет).
Это если делать топорно. В таком исполнении главная беда в том, что вы неибежно получаете слишком много роботов и спаммеров в свои ряды, а они вам для дела совершенно бесполезны. Кстати, именно поэтому возникает вопрос, стоит ли следовать тем, кто вас сам нашел. Среди них будет еще более высокая концентрация тех, кто делает точно так же как вы сами.
В общем, кроме тага #ladygaga, вполне возможно, что стоит примерно смотреть насколько вам тот или иной пользователь подходит. Практически во всех сценариях помогает смотреть, есть ли у пользователя свои твиты и как часто он это делает, а также ретвитает ли он чужие сообщения. В зависимости от вашего сценария можно вводить дополнительные критерии, например, в описываемом здесь сценарии вам скорее всего более полезны пользователи, в твитах которых встречаются таги вроде #liberal.
Вот с такой дополнительной предварительной сортировкой, вам точно могут помочь приложения. Я видел готовые и доступные для загрузки, многие в пределах 20-30 долларов, а некоторые и с ограниченной бесплатной версией. Конечно, свой собственный код позволит вам значительно большую гибкость.
Фаза подготовки: твиты
Вы заметили, что у нашего автоматизированного друга отсутствует одна важная деталь — твиты. А без них много последователей не соберешь. Твиты на обеих фазах можно делать полностью автоматизирированными, но в зависимости от типа твита автоматизация должна быть разной.
Твиты бывают нескольких сортов:
1. Оригинальные твиты.
2. Ссылки на веб.
3. Ретвиты других пользователей.
4. Ответы
Итак, пойдем по ним по одному.
Фаза подготовки: оригинальные твиты
В оснвоном, оригинальные твиты делятся на три группы.
Во-первых, знаменитые «я сижу в туалете» или «я ем макароны», иначе называемые статус твиты. В ту же группу попадают твиты вроде «Гы-ы-ы!» или «Coo-o-ol!» Как вы понимаете, заготовить такие твиты несложно. Однако, проще эту группу проигнорировать, поскольку скучность и пошлость этих твитов совсем не помогает в расширении аудитории.
Вторая группа, это твиты заблудших душ, которые еще не поняли для чего предназначен Твиттер и пытаются сказать что-то содержательное. Для набора аудитории, которую вы потом хотитет использовать для чего-то совсем другого, содержательные сообщения просто напросто вредны, они отсекают тех, кто с ними несоглаен. Так что эту часть мы тоже пропустим.
Наконец, вы можете захотеть создавать имидж будущего борца за свободу, вставляя иногда фразы по целевой тематике. Для этого есть несколько способов.
Во-первых, вы можете просто искать твиты других пользователей по ключевым словам, отсеивать тех пользователей, которые вашему герою уже «следуют», а из остальных выбирать одну и публиковать от имени вашего героя. С одной стороны это полная автоматизация, с другой стороны, я не знаю о таких коммерческих доступных приложениях, так что придется писать свой код. Кроме того, есть риск украсть сообщение с полностью противоположным смыслом, например, «И пусть #либералы пользуются #свободойслова в аду».
Второй способ, просто заказать рассказ в твитах на тему где-нибудь на eLance.com или Guru.com. Серию небольших статей по теме там можно заказать в пределах примерно $20 за штуку, а количество писателей-по-найму из Индии позволяет сделать такой проект очень экономно, а не всегда идеальный английский от имени иранского студента добавляет оттенок правдоподобности. Потом просто заряжаете эту последовательность твитов в робот, который выдает их по расписанию раз в сутки или еще как. К слову, такие роботы доступны даже в виде бесплатных сервисов (опять же, не рекламирую, сами найдете). Ну, а если свой код — так вообще нет проблем.
В целом, я бы советовал очень основательно подумать, нужны ли вам вообще оригинальные твиты или их можно заменить другими типами. В случаях, о которых я знаю, оригинальные твиты для раскрутки не использовались.
Фаза подготовки: твиты со ссылками на веб
Это осноная часть твитов для раскрутки, и делается на удивление просто. Что вам нужно для этого типа твитов?
1. Свежие ссылки по теме, что именно они говорят не так важно.
2. Краткая аннотация ссылки.
3. Автомат, который по расписанию возьмет такую ссылку с аннотацией и опубликует ее как твит.
Где взять ссылки вместе с аннотацией? Ответ на удивление прост: RSS feed. RSS feed — это машинночитаемый формат для блогов, новостей и тому подобных ресурсов на вебе. Ответ насколько удобен, что уже существуют сервисы, в том числе и бесплатные, которые берут первый результат по расписанию из RSS feed и публикуют его как твит. Наверняка есть и более сложное поведение, а со своим кодом тем более, но «ленивый» способ — вот он, под рукой.
Второй вопрос, где взять СВЕЖИЕ ссылки. Ответ тоже простой — поисковики. Практические все поисковики имеют API. Вызвали поиск по ключевым словам, сохранили результат. Через час, или сколько там по расписанию, повторили, сравнили с предыдущим результатом, выбрали первый из новых, опубликовали как RSS фид (а то и прямо как твит).
Впрочем, код писать вовсе необязательно. Google Alerts сама делает это для заданных вами слов и результат доступен как RSS Feed. Разумеется, этот сервис сделан не для такого использования, но работает. Единственная проблема — вы можете захотеть искать по нескольким наборам ключевых слов. Ну, пропустите эти отдельные RSS feeds через какой-нибудь аггрегатор вроде Feedly (feedly.com). Так что сценарий со своим кодом опять же для трудолюбивых.
К слову, если хотите подготавливать репутацию, то сделайте просто отдельный поток таких сообщений с линками на нужную вам тему, и задайте роботу более редкое расписание, чем для #ladygaga, вот и все.
Фаза подготовки: ретвиты других пользователей
Делайте то же самое, что выше, только ищите по ключевым словами на самом Твиттере. Пропорцию ретвитов можно держать не очень высокой по сравнению с линками.
Фаза подготовки: ответы другим пользователям
А вот тут засада. Что делать, если вас упомянули в твите?
Вообще-то, можно совсем не отвечать. В большинстве случаев так и делается. Не забывайте, ваша аудитория набрана совсем иным спосбом. Но есть и недостатки — отсутствие ответов может быть воспринято как высокомерие. Впрочем, на Твиттере этим никого не удивишь, и не забывайте, что у вас есть тонны отговорок, почему не вышло ответить. В фазе активного использования вообще было бы подозрительно, если бы борец за свободу, прячущийся в развалинах дома от правительственных войск, мог бы еще и общительно чирикать на Твиттере, отвечая на вопросы болельщиков. Так что, строго говоря, можно и не отвечать.
Если же очень хочется или почему-то надо, есть несколько возможностей с увеличивающейся сложностью.
Во-первых, очень часто можно отвечать из заготовленного невнятного списка, вроде «@cooldude Thanks!», «@otherdude Ha-ha-ha!», или «@thirddude OMG!». Если нарветесь случайно на зануду, который хочет содержательный ответ, просто проигнорируйте второй раз. Это будет выглядеть будто ваш герой хотел быть вежливым, и сказал так, что не хочет продолжать тему. А может просто докурил, что он там курил, и отрубился.
Второй способ, это ответы в стиле программы Элиза, первой попытки имитации естественного разговора. Элиза просто переиначивала фразу собеседника и превращала его в вопрос. Многие испытуемые решали, что Элиза очень вежливая собеседница и внимательная слушательница.
Третий способ состоит в том, чтобы отправить реплику в поисковик, и ответить первым возвращенным результатом (только не с Твиттера, естественно). В таком случае, выглядит так, будто вы внимательно прочитали твит, и нашли то, что вам кажется ответом. А то, что непонятно, какое отношение этот ответ имеет к делу, ну, подумаешь? Как говорится, «проблемы перевода».
Ну. и наконец, если вам уж совсем невтерпеж, можно на это дело поставить современные варианты систем искусственного интеллекта. Звучит это страшно, но как ни смешно, уже давно существуют готовые продукты, в том числе и open source. Естественно, они делаются не для революций, а в основном для ответов на запросы пользователей с имеющейся базой статей по продукту. Тут тоже можно рассмотреть вопрос примерно так. А вместо статей взять заранее выбранные страницы в интернете по теме. Но в целом это перебор.
Фаза эксплуатации: оригинальные твиты
Ну, вы уже поняли как это сделать? Заказываете в Индии на guru.com рассказ в твитах о паре влюбленных, разлученных революцией, с трудом выживших (или нет), ищущих друг друга среди летающих пуль и обломков зданий, и может быть даже находящие друг друга в конце концов, необязательно в идеальном состоянии. Потом заряжаете в автомат, расписание твитов - часть рассказа. И так для каждого персонажа или группы персонажей.
Если вы опасаетесь, что заказ может выплыть, закажите у специализированной фирмы. Знаете, есть такие, где на работу с сотовым нельзя заходить и компьютеры для работы от Интернета отключены. Но это, конечно, будет значительно дороже. Подумайте, стоит ли революция таких денег.
Фаза эксплуатации: твиты с линком
Вы догадались, что твиты в леди Гагой на время революции надо остановить, верно? На это время твиты с линком не нужны, или можете транслировать посты с нужных вам блогов. Делается через RSS feed, который есть практически у всех блогов.
Фаза эксплуатации: ретвиты других пользователей
Вы уже поняли, кого надо ретвитать? Ну, да, ваша дружная электроная команда должна ретвитать друг друга. Можно также случайно тех, кто использует нужные таги, врое #iranspring.
Фаза эксплуатации: ответы
Как и в фазе подготовки, в принципе, можно и не отвечать. Но если хочется тоже есть способы, примерно те же, что и при подготовке, но с другими настройками.
Один отдельностоящий способ, это ответы заранее подготовленными лозунгами, причем выбирая те из них, которые содержат ключевые слова вопроса. Не верите, что это будет работать? Попробуйте сами поговорить о киевском майдане с роботом, имеющим такой вот очень коротенький список ответов (я воспользуюсь русским):
- Коррумпированую банду геть, хотим чтоб не воровали!
- Мы — Европа! Мы — Евросоюз!
- При чем тут фашисты? Бандера хотел цивилизованной процветающей Украины как части Европы!
- Русскую банду геть! Долой марионеток России!
Подозреваю, что даже с этими четырьмя лозунгами, и учитывая ограничения Твиттера, любой диалог будет в пределах ожиданий спрашивающего. Главное тут — покрыть лозунгами все ключевые слова, а отдельные несоответствия можно списать на стресс. Ну, и сделать список побольше, чтоб не слишком заметно повторялись. Ведь и правда можно куда больше лозунгов подготовить.
А напоследок я скажу...
В заключении напомню, эффект таких средств исключительно ограниченный и работают они только в комплекте с совершенно иными воздействиями. Кроме того, не нужно искать руку госдепа в создании этих технологий, все это было придумано в первую очередь для коммерческих приложений, в первую очередь спама и SEO, и между прочим отнюдь не только в Штатах, ко многим упомянутым мною сервисам и приложениям приложили руку в том числе и программисты из России (а также Украины, Румынии, Египта, Индии, Китая...)
В общем,
Как обычно, кросс-пост с основного блога.