/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Добавить комментарий | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Добавить комментарий

Чем дышат сторонники демократических перемен и как устроена система интернет-травли

Чтобы раскрыть механизмы, которые прямо сейчас перемалывают белорусский интернет, мы залезли на чужое поле, к нашим южным соседям. Для этого я взял большой материал издания «СтранаUA» об интернет-бойцах Порошенко, на тот момент еще президента, и несколько адаптировал его под белорусские реалии.

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

Петр Алексеевич лично читает соцсети

Первое, что нужно усвоить – конкретные методы информационной борьбы определяют не столько объективные предпосылки, сколько личное восприятие заказчика (в данном случае речь о Порошенко).

— Я знаю, что Петр Алексеевич лично читает соцсети, и отношение к тебе может поменяться только оттого, чей пост ты лайкнул. Если ты одобрил пост его оппонента, он может месяц не принимать тебя у себя. Я видел, как Порошенко принял решение по судьбе человека после очередного поста в ФБ, где тот его критиковал, — рассказал журналистам один из источников.

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

Впрочем, это же справедливо и по отношению ко многим другим украинским политикам. В итоге украинский сегмент ФБ за последние пару лет превратился в поле битвы сетевых наемников. Тут сражаются за идею или за деньги (последних большинство), в пользу тех или иных политиков, олигархов и их партий, создавая видимость общественной поддержки или, наоборот, гражданской ненависти и патриотического возмущения.

Игроков ФБ-рынка можно поделить на три вида.

ЛОМы (лидеры общественного мнения, они же — блогеры) — люди с высокой базой подписчиков (не менее 5 тысяч) и большим «средним лайком» (более ста за каждый пост). В определенных ситуациях ЛОМами могут считаться люди, которые хоть и не имеют много подписчиков, но пользуются авторитетом в какой-то узкой сфере (напр., врач, учитель) или живут в подходящем, с точки зрения заказчиков, месте (на округе, где проводятся выборы). Таким образом, ЛОМы – это те люди, которые могут продвигать необходимые месседжи для нужной аудитории. При этом, в идеале, эти месседжи не только прочтут – в них еще и поверят.

ЛОМы, которые зарабатывают на работе в социальных сетях, делятся на три типа.

ЛОМы при хозяине. Их основная работа — писать что-либо для заказчика в соцсетях (при этом они могут прикрываться каким-то видом деятельности, чаще всего — журналистикой, политологией или волонтерством).

ЛОМы на зарплате. Работают на конкретного заказчика, но при этом являются занятыми в иной сфере (являются реальными журналистами, известными политологами, работающими на стороне).

ЛОМы на вольных хлебах. Это люди, которые открыто торгуют своими постами в соцсетях от разных заказчиков. Некоторые из них выступают своего рода «купцами», помогая продавать посты, написанные более мелкими ЛОМами.

Сеть «ломов» существует и в Беларуси, большая часть сгруппирована вокруг грантовых проектов и нишевых оппозиционных СМИ, типа городских журналов. С их помощью происходит раскрутка, выращивание и взаимоопыление «ломов» и все тех же мелких СМИ. Условно, если оппозиционный ресурс подсовывает вам мнение какого-то безымянного человека с припиской «известный Х написал пост в соцсети» – это он и есть.

Разница с Украиной в том, что рынок подобных писателей у нас практически отсутствует, поэтому большая часть усиленно занята созданием «личных брендов», т.е. они сами себя бесплатно проталкивают во всевозможные оппозиционные помойки, из расчета покормиться при случае, если позовут в проект или крупную кампанию. Также обратите внимание, что богатые СМИ, типа «Радио свобода», работают сразу по двум направлениям – практически все их штатные журналисты ведут личные блоги, но есть еще и внештатные блогеры, которых привлекают отдельно. Все это делается для дифференциации подачи информации.

Что касается разного рода белорусских селебрити, то белорусский интернет деньгами не избалован, и долларов за 100 вам могут устроить почет и уважение до гробовой доски. Можно, к примеру, вспомнить случай с Прокопеней, когда вскрылось, что тот через своих сотрудников раздавал деньги в независимые редакции (немного, около 200-300 у.е.), чтобы задним числом удалили или изменили статьи про его задержание и тем самым улучшили имидж. Ну, как видим, не миллионы долларов, даже при его доходах.

Система взаимного опыления

Второе важное направление – это черновая работа. Ее выполняют боты — «мертвые души», аккаунты несуществующих людей, которые нагоняют «лайки» под постами, комментируют публикации, делают вбросы. Чаще всего «ботов» в ручном режиме содержат все те же ЛОМы, чтобы «подлайкивать» и перепощивать самих себя, либо крупные политические или бизнес-игроки с той же целью.

Кроме того, применяется программное обеспечение по накрутке лайков. Программы по накрутке — важный элемент системы управления общественным мнением в соцсетях. Причем программами ЛОМы и политики пользуются не столько для того, чтобы потешить свое тщеславие, сколько с целью увеличить процент просмотров своего поста среди друзей и подписчиков (чем больше лайков, тем больший процент друзей и подписчиков увидит данное сообщение — такой алгоритм выдачи «Фейсбука»). Любопытно: когда «Фейсбук» ввел новые кнопки для выражения эмоций, количество лайков у ряда известных политиков резко уменьшилось — программы накрутки не успели перестроиться под новую систему.

На украинском рынке спросом у заказчиков пользуются популярные блогеры — ЛОМы с более чем пятью тысячами подписчиков. Причем чем их больше, тем «дороже» блогер. Точка определения успеха в работе — когда пост попадает в медиа-мониторинг людей, принимающих решения в этой стране, или меняет их точку зрения на резонансные события. Совсем хорошо, когда тема попадает в поле зрения журналистов влиятельных изданий, «цепляет» ведущих из них, мотивируя к дополнительному расследованию.

Ценность блогеров для политиков еще и в том, что информация, которая распространяется без персональной ответственности, весьма сомнительна. Другое дело, когда она подается со ссылкой на реального человека, с именем, фамилией и своей аудиторией. По этой же причине иногда имеет значение не столько количество подписчиков (все же важно, чтобы их было не менее трех тысяч), сколько социальные связи. То есть не численность, а персональный состав тех, кто в друзьях.

Вот что рассказывает блогер Александр Барабошко, который помимо того, что пишет тексты в соцсетях, зарабатывает еще и как посредник.

По его словам, размещение одного поста стоит $50–100 (зависит от веса, авторитета блогера), сам же Барабошко берет не меньше, $100 за публикацию. И он, пожалуй, единственный герой этого текста, который честно признался, что пишет посты за деньги. Все остальные опрошенные «Страной» авторы ответили, что работают за идею.

«Было бы странно, если бы кто-то за это не получал денег. Есть даже такие излишне предприимчивые люди, которые приписывают себе заслуги людей, работающих бесплатно и берут за это деньги», — рассказывает Барабошко.

Информационная пирамида: ЛОМы и посредники

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

«Вот есть какая-то тема и отношение к ней. Если тему начинают «играть» — ее сразу же подхватывает определенная группка людей, блогеров, лидеров мнений, и не важно, из одной они конторы или же нет, главное — на одной волне. Они пишут в одном и том же ключе посты или комментарии под постами, набравшими высокое количество лайков. Ты заходишь на страницу человека, видишь его френдов, смотришь, на кого он в постах нападает, и сразу понимаешь, на какую политическую группу он работает. У меня даже есть списки этих групп. По ним я каждый день снимаю информацию о том, кто какие тезисы запускает и какую цель, соответственно, перед собой ставит», — рассказывает источник.

Из-за дефицита грамотных фейсбучных писателей блогопосредники сами «выращивают» себе ботов. «Подтягивают молодых перспективных студентов или авторитетных профессоров вузов, преподавателей, кандидатов наук с копеечной зарплатой. Беседуют с ними, находят общие идеологические точки соприкосновения и дают возможность заработать», — рассказывает еще один из таких «торговцев душами», политтехнолог Дмитрий Раимов.

По его словам, публикации в центральных СМИ и участие в телеэфирах дают таким начинающим блогерам узнаваемость, рейтинг и подписчиков в ФБ, что в эпоху социальных сетей является частью репутационного капитала, от подписчиков зависит и размер гонорара. По словам Раимова, стоимость одного поста в Facebook с хорошей базой подписчиков колеблется от $50 до $200. Цена зависит от личного репутационного капитала блогера и популярности его личной страницы.

По словам уже упомянутого Александра Барабошко, конкретно к нему чаще всего обращаются для различного рода политических «вбросов». Барабошко в общем-то все равно, кто заказывает.

«Вообще нет смысла разбираться — кто прав, кто неправ. В период выборов на одну и ту же тему приходили заказы с двух сторон. Нас ничего не смущало исполнять их параллельно», — говорит Барабошко.

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

«У нас сейчас пул из 40 блогеров-политологов — молодых ребят-студентов. И вот приходит, допустим, заказ от Администрации президента или какой-то политической партии. Например, нужно рассказать, что выборы на Донбассе — это хорошо. Или, наоборот, плохо. Все 40 человек принимают заказ и дружно пишут об этом в Facebook, колонки в СМИ, а лучше и то, и то. Аудитория их читает, сомневается, а потом начинает думать: действительно, наверное, выборы — это хорошо, это же «независимый» эксперт сказал!» — говорит Раимов.

Информационный фон

Довольно эффективно используется «фоновая» технология. Это когда пользователь «Фейсбука» дает какую-то зарисовку из жизни (реальную или полностью вымышленную), вкрапляя в нее нужный политический акцент. Например: «Зашел на рынок, подешевела клубника. Бабки говорят, поставили нового главу района — из волонтеров, от БПП. Так он посредникам хвосты прижал. И селяне теперь напрямую товар продают. Все довольны». Или: «Еду по Киеву, останавливают патрульные. Ну, думаю, все. Пропало. Взятку начнут вымогать. Но они просто сделали замечание. Улыбнулись, спросили, нужна ли мне помощь». Или со знаком «зрады»: «Вышел мусор выносить, а у подъезда бабки сидят. О Липецкой фабрике говорят: «Негодяй этот Порошенко, армию Путина финансирует налогами своими. Пора ему уже готовить себе место рядом с Януковичем».

Что касается ботов, то этот институт в Украине не структурирован и не систематизирован так, как в России. «В России реально работают целые офисы, которые с утра до ночи штампуют аккаунты в соцсетях. Одна питерская контора создала фейковый аккаунт гадалки, которая у себя на странице публикует предсказания, и ей все верят! У нас такого нет», — говорит политтехнолог Раимов.

Впрочем, боты у нас тоже имеются, просто, в отличие от РФ, их в одном здании не держат и их просто физически не так много, как в соседней стране. Но практически все политические силы, активно представленные в соцсетях, имеют свои армии ботов. Есть они и у самых крупных ЛОМов. Основная задача этих сетевых существ — лайкать, оставлять комментарии, нападать на вражеских ЛОМов или политиков, троллить их, создавать истерику или, наоборот, восторг вокруг заданных свыше месседжей. Вбрасывать какую-то непроверенную информацию, на которую потом смогут ссылаться ЛОМы, а уже на ЛОМов — СМИ. Таким образом легализуется множество фейков.

Против чего нет приема

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

За таких журналистов можно только порадоваться, у них есть и работа, и зарплата. Но есть ли какая-то польза от этой сетевой армии для самого Порошенко?
Вопрос дискуссионный. Главный вред, который наносило «порохоботство» президенту, — это жупел продажности. Грубо говоря, если журналисты, эксперты, экономисты, трэвел-блогеры, юристы, домохозяйки и прочие понимают, что за положительные посты о президенте платят направо и налево, то они никогда ничего хорошего о Порошенко бесплатно не напишут. Наоборот, они скорее будут стараться писать о президенте плохо, в надежде, что им предложат деньги за изменение позиции. В какой-то момент в Администрации перегнули палку с тотальной скупкой ЛОМов. И теперь положительный отзыв о президенте прочно ассоциируется с финансовым вопросом.

Еще один важный момент – это целевая аудитория, на которую выбрасывают деньги.

Впервые термин «боты» в Украине появился еще лет 10 назад в связи с активностью людей Юлии Тимошенко. Тогда соцсети не были популярны, а полем деятельности «активистов» были комментарии под статьями в интернете либо на форумах. Тимошенко первая начала нанимать специалистов, основной работой которых стало комментирование в ее пользу. Впоследствии Тимошенко рассудила, что ей нет смысла тратить деньги на соцсоревнования ботов в песочнице «Фейсбука». А потому бросила бюджет на покупку времени у телеканалов, справедливо полагая, что ее сельский электорат в голубой экран заглядывает чаще, чем в ленту соцсетей.

Это, опять же, говорит нам о целесообразности финансирования тех или иных направлений.

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

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

Опять же, если вернуться к Украине и России, где соцсети буквально искрят от денег, нужно не забывать, что конечное слово все равно остается за силовыми методами контроля оппозиции. Соцсети в данном случае являются вспомогательным инструментом, который дополняет силовые действия.

Например, год назад руководителю КПУ Петру Симоненко подкинули пистолет Стечкина и коробки с патронами, следствие ныне практически не ведется и заморожено. А ранее против активистов КПУ завели более 400 дел за сепаратизм. Заводились они по одному шаблону – как правило, за фейковые переписки в соцсетях от их имени, после чего человек мог ГОДАМИ находится в СИЗО под следствием. По сути, это законная форма изоляции от общества, без какого-либо судебного решения. И все националистические СМИ орали, что это очень хорошо и правильно, обосновывая тотальную декоммунизацию в стране пистолетом Стечкина.

2

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

Противодействуя им, можно пойти по их же дорожке, создавая иллюзию, что у государства есть невероятная органическая поддержка в сети (этим и занимались порошенковские боты). Однако надо помнить, что несмотря на сетевую армию, Порошенко бодро согнал с поста Зеленский, сделавший ставку на популярный ТВ-сериал. Что называется, карту перекрыли.

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

По этому поводу есть старый анекдот:

Сидят в гримерке два клоуна — молодой и старый, выдумывают репризу. Молодой говорит: давайте вы выйдете на манеж, уроните кошелек, нагнетесь, а я выбегу из-за кулисы и дам вам сапогом по ж..пе. Старый печально отвечает: «Не годится. Слишком тонкая шутка для нашего цирка».

А вот что годится для нашего цирка.

Приведу пару скриншотов о том, что писали членам БРСМ (в основном девушкам) активисты из чатов Тихановского (из приличия мы замазали мат красной краской).

1

2

3

Как вам голоса пробудившейся от спячки демократической Беларуси? Причем это писали практически детям, молодым людям по 18-19 лет.

Но зато авторитетные СМИ будут, хлопая ресницами, рассказывать вам о хороших и добрых певцах, актерах и гимнастках, которые пели-пели, и вдруг открыли честные глазки на режим. Ох и ах! Сначала откройте глазки на 97% своих соратников и свою «революцию надежды».

Особенно мне понравилось последнее сообщение: «Радио свобода хотя бы платят, а вас е…ут за бусы».

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

Подготовил Андрей ЛАЗУТКИН

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