/** * A simple set of functions to check our version 1.0 update service. * * @package WordPress * @since 2.3.0 */ /** * Check WordPress version against the newest version. * * The WordPress version, PHP version, and Locale is sent. Checks against the * WordPress server at api.wordpress.org server. Will only check if WordPress * isn't installing. * * @since 2.3.0 * @uses $wp_version Used to check against the newest WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param bool $force_check Whether to bypass the transient cache and force a fresh update check. Defaults to false, true if $extra_stats is set. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_version_check( $extra_stats = array(), $force_check = false ) { if ( defined('WP_INSTALLING') ) return; global $wpdb, $wp_local_package; include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $php_version = phpversion(); $current = get_site_transient( 'update_core' ); $translations = wp_get_installed_translations( 'core' ); // Invalidate the transient when $wp_version changes if ( is_object( $current ) && $wp_version != $current->version_checked ) $current = false; if ( ! is_object($current) ) { $current = new stdClass; $current->updates = array(); $current->version_checked = $wp_version; } if ( ! empty( $extra_stats ) ) $force_check = true; // Wait 60 seconds between multiple version check requests $timeout = 60; $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( ! $force_check && $time_not_changed ) return false; $locale = get_locale(); /** * Filter the locale requested for WordPress core translations. * * @since 2.8.0 * * @param string $locale Current locale. */ $locale = apply_filters( 'core_version_check_locale', $locale ); // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_core', $current ); if ( method_exists( $wpdb, 'db_version' ) ) $mysql_version = preg_replace('/[^0-9.].*/', '', $wpdb->db_version()); else $mysql_version = 'N/A'; if ( is_multisite() ) { $user_count = get_user_count(); $num_blogs = get_blog_count(); $wp_install = network_site_url(); $multisite_enabled = 1; } else { $user_count = count_users(); $user_count = $user_count['total_users']; $multisite_enabled = 0; $num_blogs = 1; $wp_install = home_url( '/' ); } $query = array( 'version' => $wp_version, 'php' => $php_version, 'locale' => $locale, 'mysql' => $mysql_version, 'local_package' => isset( $wp_local_package ) ? $wp_local_package : '', 'blogs' => $num_blogs, 'users' => $user_count, 'multisite_enabled' => $multisite_enabled, ); $post_body = array( 'translations' => json_encode( $translations ), ); if ( is_array( $extra_stats ) ) $post_body = array_merge( $post_body, $extra_stats ); $url = $http_url = 'http://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, null, '&' ); if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $options = array( 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), 'headers' => array( 'wp_install' => $wp_install, 'wp_blog' => home_url( '/' ) ), 'body' => $post_body, ); $response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) return false; $body = trim( wp_remote_retrieve_body( $response ) ); $body = json_decode( $body, true ); if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) return false; $offers = $body['offers']; foreach ( $offers as &$offer ) { foreach ( $offer as $offer_key => $value ) { if ( 'packages' == $offer_key ) $offer['packages'] = (object) array_intersect_key( array_map( 'esc_url', $offer['packages'] ), array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' ) ); elseif ( 'download' == $offer_key ) $offer['download'] = esc_url( $value ); else $offer[ $offer_key ] = esc_html( $value ); } $offer = (object) array_intersect_key( $offer, array_fill_keys( array( 'response', 'download', 'locale', 'packages', 'current', 'version', 'php_version', 'mysql_version', 'new_bundled', 'partial_version', 'notify_email', 'support_email' ), '' ) ); } $updates = new stdClass(); $updates->updates = $offers; $updates->last_checked = time(); $updates->version_checked = $wp_version; if ( isset( $body['translations'] ) ) $updates->translations = $body['translations']; set_site_transient( 'update_core', $updates ); if ( ! empty( $body['ttl'] ) ) { $ttl = (int) $body['ttl']; if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) { // Queue an event to re-run the update check in $ttl seconds. wp_schedule_single_event( time() + $ttl, 'wp_version_check' ); } } // Trigger a background updates check if running non-interactively, and we weren't called from the update handler. if ( defined( 'DOING_CRON' ) && DOING_CRON && ! doing_action( 'wp_maybe_auto_update' ) ) { do_action( 'wp_maybe_auto_update' ); } } /** * Check plugin versions against the latest versions hosted on WordPress.org. * * The WordPress version, PHP version, and Locale is sent along with a list of * all plugins installed. Checks against the WordPress server at * api.wordpress.org. Will only check if WordPress isn't installing. * * @since 2.3.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_plugins( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined('WP_INSTALLING') ) return false; // If running blog-side, bail unless we've not checked in the last 12 hours if ( !function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); $plugins = get_plugins(); $translations = wp_get_installed_translations( 'plugins' ); $active = get_option( 'active_plugins', array() ); $current = get_site_transient( 'update_plugins' ); if ( ! is_object($current) ) $current = new stdClass; $new_option = new stdClass; $new_option->last_checked = time(); // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-plugins.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $plugin_changed = false; foreach ( $plugins as $file => $p ) { $new_option->checked[ $file ] = $p['Version']; if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) ) $plugin_changed = true; } if ( isset ( $current->response ) && is_array( $current->response ) ) { foreach ( $current->response as $plugin_file => $update_details ) { if ( ! isset($plugins[ $plugin_file ]) ) { $plugin_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $plugin_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_plugins', $current ); $to_send = compact( 'plugins', 'active' ); $locales = array( get_locale() ); /** * Filter the locales requested for plugin translations. * * @since 3.7.0 * * @param array $locales Plugin locale. Default is current locale of the site. */ $locales = apply_filters( 'plugins_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 plugins $timeout = 3 + (int) ( count( $plugins ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'plugins' => json_encode( $to_send ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), 'all' => json_encode( true ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/plugins/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); foreach ( $response['plugins'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); foreach ( $response['no_update'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); if ( is_array( $response ) ) { $new_option->response = $response['plugins']; $new_option->translations = $response['translations']; // TODO: Perhaps better to store no_update in a separate transient with an expiry? $new_option->no_update = $response['no_update']; } else { $new_option->response = array(); $new_option->translations = array(); $new_option->no_update = array(); } set_site_transient( 'update_plugins', $new_option ); } /** * Check theme versions against the latest versions hosted on WordPress.org. * * A list of all themes installed in sent to WP. Checks against the * WordPress server at api.wordpress.org. Will only check if WordPress isn't * installing. * * @since 2.7.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_themes( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined( 'WP_INSTALLING' ) ) return false; $installed_themes = wp_get_themes(); $translations = wp_get_installed_translations( 'themes' ); $last_update = get_site_transient( 'update_themes' ); if ( ! is_object($last_update) ) $last_update = new stdClass; $themes = $checked = $request = array(); // Put slug of current theme into request. $request['active'] = get_option( 'stylesheet' ); foreach ( $installed_themes as $theme ) { $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); $themes[ $theme->get_stylesheet() ] = array( 'Name' => $theme->get('Name'), 'Title' => $theme->get('Name'), 'Version' => $theme->get('Version'), 'Author' => $theme->get('Author'), 'Author URI' => $theme->get('AuthorURI'), 'Template' => $theme->get_template(), 'Stylesheet' => $theme->get_stylesheet(), ); } // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-themes.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time() - $last_update->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $theme_changed = false; foreach ( $checked as $slug => $v ) { if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) ) $theme_changed = true; } if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { foreach ( $last_update->response as $slug => $update_details ) { if ( ! isset($checked[ $slug ]) ) { $theme_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $theme_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $last_update->last_checked = time(); set_site_transient( 'update_themes', $last_update ); $request['themes'] = $themes; $locales = array( get_locale() ); /** * Filter the locales requested for theme translations. * * @since 3.7.0 * * @param array $locales Theme locale. Default is current locale of the site. */ $locales = apply_filters( 'themes_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 themes $timeout = 3 + (int) ( count( $themes ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'themes' => json_encode( $request ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/themes/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $new_update = new stdClass; $new_update->last_checked = time(); $new_update->checked = $checked; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); if ( is_array( $response ) ) { $new_update->response = $response['themes']; $new_update->translations = $response['translations']; } set_site_transient( 'update_themes', $new_update ); } /** * Performs WordPress automatic background updates. * * @since 3.7.0 */ function wp_maybe_auto_update() { include_once( ABSPATH . '/wp-admin/includes/admin.php' ); include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ); $upgrader = new WP_Automatic_Updater; $upgrader->run(); } /** * Retrieves a list of all language updates available. * * @since 3.7.0 */ function wp_get_translation_updates() { $updates = array(); $transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' ); foreach ( $transients as $transient => $type ) { $transient = get_site_transient( $transient ); if ( empty( $transient->translations ) ) continue; foreach ( $transient->translations as $translation ) { $updates[] = (object) $translation; } } return $updates; } /** * Collect counts and UI strings for available updates * * @since 3.3.0 * * @return array */ function wp_get_update_data() { $counts = array( 'plugins' => 0, 'themes' => 0, 'wordpress' => 0, 'translations' => 0 ); if ( $plugins = current_user_can( 'update_plugins' ) ) { $update_plugins = get_site_transient( 'update_plugins' ); if ( ! empty( $update_plugins->response ) ) $counts['plugins'] = count( $update_plugins->response ); } if ( $themes = current_user_can( 'update_themes' ) ) { $update_themes = get_site_transient( 'update_themes' ); if ( ! empty( $update_themes->response ) ) $counts['themes'] = count( $update_themes->response ); } if ( ( $core = current_user_can( 'update_core' ) ) && function_exists( 'get_core_updates' ) ) { $update_wordpress = get_core_updates( array('dismissed' => false) ); if ( ! empty( $update_wordpress ) && ! in_array( $update_wordpress[0]->response, array('development', 'latest') ) && current_user_can('update_core') ) $counts['wordpress'] = 1; } if ( ( $core || $plugins || $themes ) && wp_get_translation_updates() ) $counts['translations'] = 1; $counts['total'] = $counts['plugins'] + $counts['themes'] + $counts['wordpress'] + $counts['translations']; $titles = array(); if ( $counts['wordpress'] ) $titles['wordpress'] = sprintf( __( '%d WordPress Update'), $counts['wordpress'] ); if ( $counts['plugins'] ) $titles['plugins'] = sprintf( _n( '%d Plugin Update', '%d Plugin Updates', $counts['plugins'] ), $counts['plugins'] ); if ( $counts['themes'] ) $titles['themes'] = sprintf( _n( '%d Theme Update', '%d Theme Updates', $counts['themes'] ), $counts['themes'] ); if ( $counts['translations'] ) $titles['translations'] = __( 'Translation Updates' ); $update_title = $titles ? esc_attr( implode( ', ', $titles ) ) : ''; $update_data = array( 'counts' => $counts, 'title' => $update_title ); /** * Filter the returned array of update data for plugins, themes, and WordPress core. * * @since 3.5.0 * * @param array $update_data { * Fetched update data. * * @type array $counts An array of counts for available plugin, theme, and WordPress updates. * @type string $update_title Titles of available updates. * } * @param array $titles An array of update counts and UI strings for available updates. */ return apply_filters( 'wp_get_update_data', $update_data, $titles ); } function _maybe_update_core() { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $current = get_site_transient( 'update_core' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) && isset( $current->version_checked ) && $current->version_checked == $wp_version ) return; wp_version_check(); } /** * Check the last time plugins were run before checking plugin versions. * * This might have been backported to WordPress 2.6.1 for performance reasons. * This is used for the wp-admin to check only so often instead of every page * load. * * @since 2.7.0 * @access private */ function _maybe_update_plugins() { $current = get_site_transient( 'update_plugins' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_plugins(); } /** * Check themes versions only after a duration of time. * * This is for performance reasons to make sure that on the theme version * checker is not run on every page load. * * @since 2.7.0 * @access private */ function _maybe_update_themes() { $current = get_site_transient( 'update_themes' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_themes(); } /** * Schedule core, theme, and plugin update checks. * * @since 3.1.0 */ function wp_schedule_update_checks() { if ( !wp_next_scheduled('wp_version_check') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_version_check'); if ( !wp_next_scheduled('wp_update_plugins') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_plugins'); if ( !wp_next_scheduled('wp_update_themes') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_themes'); if ( ( wp_next_scheduled( 'wp_maybe_auto_update' ) > ( time() + HOUR_IN_SECONDS ) ) && ! defined('WP_INSTALLING') ) wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); } if ( ( ! is_main_site() && ! is_network_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) return; add_action( 'admin_init', '_maybe_update_core' ); add_action( 'wp_version_check', 'wp_version_check' ); add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 ); add_action( 'load-plugins.php', 'wp_update_plugins' ); add_action( 'load-update.php', 'wp_update_plugins' ); add_action( 'load-update-core.php', 'wp_update_plugins' ); add_action( 'admin_init', '_maybe_update_plugins' ); add_action( 'wp_update_plugins', 'wp_update_plugins' ); add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 ); add_action( 'load-themes.php', 'wp_update_themes' ); add_action( 'load-update.php', 'wp_update_themes' ); add_action( 'load-update-core.php', 'wp_update_themes' ); add_action( 'admin_init', '_maybe_update_themes' ); add_action( 'wp_update_themes', 'wp_update_themes' ); add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 ); add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' ); add_action('init', 'wp_schedule_update_checks'); Jim Margolis: deconstruyendo a Obama, el rey del marketingSesiónDeControl.com
Arrow

El reinado del marketing


3
Borja Ventura

Periodista. Escribo en Tiempo, eldiario.es, JotDown y Yorokobu. Enseño Periodismo en la Universidad Carlos III. Fui jefe de coordinación de lainformacion.com y coordinador de Actualidad en 20minutos.es. Ahora trabajo en Terra Noticias.


Escrito el 16 de diciembre de 2012 a las 17:09 | Clasificado en EEUU

El marketing y la tecnología han sido claves en la reelección de Obama. Jim Margolis, responsable de la publicidad demócrata durante la campaña, desgrana cómo se construyó su victoria.

Obama y su mujer, en la foto más compartida de la historia de Twitter tras su reelección
Obama y su mujer, en la foto más compartida de la historia de Twitter tras su reelección

Especial: Elecciones en EEUU

¿Cómo conseguir la reelección de Obama cuando decepcionó en las altísimas expectativas creadas durante la campaña de 2008? Con los republicanos captando la atención mediática gracias a sus primarias y ante la hipoteca de su gestión, Jim Margolis y su empresa GMMB fueron los responsables de construir el discurso publicitario y toda la estrategia de marketing que hizo posible la reelección. A su paso por España para intervenir en el 10º Seminario Internacional de Comunicación Política de la George Washington University y Mas Consulting, desgranó la estrategia y las acciones seguidas por su equipo.

La clave de la estrategia demócrata fue la clase media, según Magolis. “Estas elecciones no iban de tácticas, sino de grandes cosas. Obama fijó las bases de la campaña en un discurso que dio el 6 de diciembre en Osawatomie, en Kansas. Habló de la clase media. Fue un mensaje universal: el objetivo de toda la campaña sería convencer de que la idea era garantizar que la gente pudiera construir un hogar, tener unos ingresos, unos ahorros que les permitiera llevar una vida normal”

[media url=”http://www.youtube.com/watch?v=VbnplgnVG4s” width=”600″ height=”400″]

La estrategia

Primer objetivo: Fijar el contexto

En sus palabras, la campaña de este año “fue una campaña muy diferente la de 2012″. El primer paso era fijar un contexto tras una primera campaña especial:

En 2008 había una percepcion de algo nuevo, de hacer historia. La idea de que un negro pudiera ser presidente, alguien llamado Barack Hussein, era algo muy complicado de entender. A pesar de la crisis que despuntaba, había un profundo entusiasmo con millones de personas siguiendo la campaña

Todo había empezado cuatro años antes, en la Convención Demócrata que proclamó a John Kerry como candidato y donde él dio el discurso central. “Con aquel discurso de que no existía una América liberal, republicana o demócrata, sino unos Estados Unidos de América, demostó tener unos argumentos muy consistentes”

[media url=”http://www.youtube.com/watch?v=eWynt87PaJ0″ width=”600″ height=”400″]

Sin embargo, Margolis se centró en las diferencias: “En estas ultimas elecciones los desafíos eran diferentes y significativos: desempleo del 8%, bloqueo del Congreso, el 60% de la gente creyendo que el país va mal, el presidente con una aprobación por debajo del 50% y los republicanos amasando dinero de las donaciones”, describe. “Sin embargo, la gente seguía confiando en que Obama cuidaría mejor de ellos”, apunta.

“Hubo también decisiones que le ayudaron, como el rescate del sector automovilístico, la retirada de Iraq, la reforma sanitaria, la cierta recuperación económica, la muerte de Osama Bin Laden… La gente entendió que le tocó gobernar en circunstancias adversas”, asegura. Pero también estuvieron los errores de su rival : “Romney tuvo ciertos problemas, fundamentalmente su giro conservador enfrentándose a inmigrantes, mujeres y moderados, además del hecho de de que su perfil no encajaba con los votantes: Obama fue un estudiante normal, mientras Romney tiene un ascensor para coches en una de sus casas además de millones de dolares en cuentas fuera del país”, cuenta.

En total, la campaña de Obama gastó 413 millones de dólares en anuncios y comunicación, por los 206 que gastó la de Romney. La diferencia la marcaron los fondos de las Super PAC, recaudaciones no controladas por los partidos, que invirtieron unos 64 millones en campaña a favor de Obama en medios mientras que del lado Romney se fueron hasta los 401 millones extra. “Sin embargo, no fueron tan eficientes”, comenta Margolis.

¿Cómo consiguieron esa eficiencia? La clave de todo estuvo en el uso de los datos y la tecnología, según reveló Margolis.  “Creamos una enorme base de datos con información de distintas fuentes, como audímetros que nos decían qué veía exactamente y por cuanto tiempo cada hogar de cada zona. Eso lo cruzamos con otra información, como la respuesta que daban determinados hogares ante los voluntarios cuando iban puerta a puerta, además de lo que se dice en las encuestas. Con toda esa información, filtrada y ordenada gracias a la tecnología, se fijaron objetivos de colectivos y se lanzaron mensajes en los lugares donde esos votantes están.

Segundo objetivo: Definir el mapa y al votante

La enorme inversión de tiempo, efectivos y dinero en tecnología para gestionar datos tenía un doble objetivo, según Margolis. Primero, “definir el mapa, centrándonos en conseguir los Estados suficientes como para sumar los votos necesarios para ganar y los diferentes caminos que había hasta esa meta” y segundo “definir a los votantes, cambiando el foco a colectivos cercanos con los que el candidato conecta bien: jovenes, mujeres e inmigrantes”

Con ambas cosas se lanzaron anuncios temáticos para cada uno de los sectores definidos con el objetivo de “aprovechar el profundo cambio demográfico: invertimos millones de dólares en televisiones en español con spots en tres frentes. El primero, el oficial, como este ‘Buen ejemplo’ que Obama grabó en español “lo que costó horas hasta que la pronunciación fonética fue lo más perfecta posible”

[media url=”http://www.youtube.com/watch?v=fRCitjn7Ojs” width=”600″ height=”400″]

El segundo tipo de spots conectaba con uno de los logros de la inversión tecnológica: “queríamos ser locales, volver a movilizar a esos voluntarios que fueron puerta a puerta en la campaña local acercándonos a cada lugar que habíamos señalado en el mapa con centenares de oficinas locales, tratando la cita como si de unas elecciones locales se tratara”. Un ejemplo es el anuncio ‘Elena’, que cuenta una historia individual de una de nuestras voluntarias. “Éste es uno de esos anuncios, pero rodamos uno para cada Estado con un testimonio de dicho Estado”. El estilo tampoco es casual: “en esta serie no hubo nada de grandes producciones, todo se hizo con un formato pretendidamente cercano, estilo YouTube”

[media url=”http://www.youtube.com/watch?v=rz45PpzNmWk” width=”600″ height=”400″]

Una tercera línea fue una excepción en su planteamiento: “como queríamos hablar de gente decidimos no usar a ‘celebrities’, salvo con un caso: el spot ‘Muchísimo’ de Cristina por su enorme influencia en el colectivo latino”

[media url=”http://www.youtube.com/watch?v=2_Ncla4bXbA” width=”600″ height=”400″]

Tercer objetivo: El otro puerta a puerta

Además de la presencia física, una importancia crucial ha tenido el uso de las redes sociales, cuenta Magolis, por su enorme expansión.

“Desde 2004 Facebook ha pasado de ser una plataforma en estudio a alcanzar mil millones de usuarios. Ahora Obama tiene allí 34 millones de amigos, que están conectados al 95% del total de los votantes de EEUU. Los blogs han pasado de ser 1,4 millones en 2004 a ser en 2012 175 millones. Twitter no existia en 2004, y ahora Obama tiene 24 millones de seguidores. YouTube tampoco existía entonces y ahora 133 millones de personas han visto los vídeos de campaña de Obama, sin contar los vídeos hechos por la gente”

“Hemos ido a muchos lugares para encontrar a gente. Gracias a las redes sociales los votantes ya no esperan a recibir anuncios, sino que los crean en YouTube. La gente influye a otra gente”. El mejor ejemplo: #forwardsong.

[media url=”http://www.youtube.com/watch?v=1GOwfCSiuGg” width=”600″ height=”400″]

Cuidar esa movilización es un objetivo primordial. “Hay que hacer que la gente se sienta implicada, porque el mensaje que ellos dan es mucho mas poderoso que el que cualquier campaña puede hacer. Para eso tenemos que ir a los lugares donde los votantes están, no esperar que ellos vengan”, cuenta Magolis.

Las ideas

Primera: Se avanza, pero falta más

El tercer paso una vez fijado el contexto y definidos los objetivos “fue recordar a la gente que Obama ha pasado cuatro años trabajando en mejorar las cosas en una época en la que la clase media estaba bajo presión. En resumen: demostrar avances, pero manteniendo la idea de que aún quedaba mucho por hacer, intentando mantener el equilibrio entre ambas ideas”, cuenta Margolis.

Con esas premisas lanzaron ‘Go’, el primer spot de la campaña, en mayo. “El anuncio no va sobre Obama, sino sobre ti”, define

[media url=”http://www.youtube.com/watch?v=F0OVngTHkNg” width=”600″ height=”400″]

Segunda: Definir a Romney antes de que se defina él

El tiempo es vital en una campaña, por eso el cuarto paso que dieron fue “definir a Romney antes de que él se definiera a sí mismo o a Obama”. La campaña demócrata lo mostró “como un gobernador que no cumplió sus promesas, alguien que no tiene capacidad de solventar la economía”, algo en lo que el republicano basó su fuerza.

Así, en junio, lanzaron ‘We’ve heard it all before’, “mostrando lo que prometio como gobernador no hizo: en Massachussetts subía el paro mientras en sus compañías externalizó la producción a gente fuera”. El esfuerzo en esa idea fue tal que se creó una web para esos datos:

[media url=”http://www.youtube.com/watch?v=oWdZEJW1vWY” width=”600″ height=”400″]

Con esa misma idea lanzaron también ‘Firms’, donde se hablaba de esa externalización y del dinero que Romney tiene en paraísos fiscales

[media url=”http://www.youtube.com/watch?v=Ud3mMj0AZZk” width=”600″ height=”400″]

Tercera: Elección, no referéndum

El quinto de los objetivos de los anuncios fue “hacer que las elecciones fueran una elección entre dos candidatos”, oponiendo sus diferencias y propuestas, “y no un referéndum” sobre la gestión de Obama. Por eso plantearon preguntas cómo “¿quién de los dos te entiende mejor y te va a cuidar mejor?”

En esa línea lanzaron ‘Clear choice’, centrado en Bill Clinton, para la Convención de los republicanos. El expresidente, con el aval de su sólida gestión económica, habla de una clase media fuerte comparando con su propia gestión

[media url=”http://www.youtube.com/watch?v=9xsZ45Weng0″ width=”600″ height=”400″]

Cuarta: Defensa de la clase media

En septiembre también lanzaron ‘My job’. aprovechando la grabación que publicó Mother Jones en la que Romney dilapidó buena parte de sus opciones al decirle a un grupo de donantes que había un 47% de “dependientes irresponsables que no le interesaban”. “Esa grabación alcanzó una penetración del 85% en una semana”, asegura Margolis, “y nada llega tan lejos en EEUU”. El spot es ese audio superpuesto con imágenes de familias y trabajadores

[media url=”http://www.youtube.com/watch?v=B9xCCaseop4″ width=”600″ height=”400″]

Cierre de campaña

‘Determinación’ fue el título del último spot de campaña

[media url=”http://www.youtube.com/watch?v=uONGtgxHjYk” width=”600″ height=”400″]

El resto, lo que pasó después en las elecciones, ya forma parte de la historia

Los votantes dicen...
  1. […] University y Mas Consulting, desgranó la estrategia y las acciones seguidas por su equipo. Así se encumbró a Obama, rey del marketing (18 de diciembre de […]

  2. […] alturas, está de vuelta de todo. Consumada su reelección, en minoría en las Cámaras y habiendo cimentado su reinado sobre el márketing, uno de los presidentes más carismáticos de su historia apura su mandato. Y lo hace con sentido […]

  3. […] del marketing en política sólo hay uno, pero políticos que intentan copiar estilos hay un montón. Como muestra, las últimas primarias […]

Comparte tu punto de vista

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>