/** * 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'); Twitter, en el SenadoSesiónDeControl.com
Arrow

Twitter, en el Senado


5
David Álvarez

Bloguero especializado en análisis de redes sociales. Estudiando continuamente la relación entre el ámbito de la política y el social media. Miembro de la Asociación AERCO (Profesionales del Social Media)


Escrito el 28 de marzo de 2013 a las 10:38 | Clasificado en Nacional

Aunque la repercusión se ve influenciada por la actualidad autonómica y local de muchas de sus señorías, el uso de Twitter en el Senado denota un crecimiento progresivo tanto en presencia como en actividad.

Sesión plenaria en el Senado (Fuente: Senado.es)
Sesión plenaria en el Senado (Fuente: Senado.es)

Si se analiza la actividad en Twitter de los quince primeros meses del Senado se observan algunas diferencias respecto a lo que sucede en el mismo periodo en el Congreso de los Diputados.

Para empezar, no son quince meses sino doce, un año completo, de marzo del 2012 a marzo del 2013. Un año que da la oportunidad de ver si ha aumentado la presencia de senadores o si la actividad ha seguido una tendencia al alza.

Pero la medición no sólo es eso: también es medir cómo se usa Twitter de forma individual y por partido, quiénes son los senadores más activos, los más mencionados y los más conversadores. El objetivo final: entender las motivaciones de nuestros representantes políticos a la hora de usar Twitter.

A todos estos datos analizados y segmentados por diferentes criterios cabría añadir los datos totales específicos de cada senador, y que están colgados en esta hoja de Excel. Resulta especialmente interesante comparar los datos extractados con el dato concreto de cada senador.

Datos generales

El período analizado comprende los meses que van desde marzo del 2012 a marzo del 2013.

Como se aprecia en el siguiente gráfico, en marzo del 2012, de los 266 senadores con escaño, 88 tenían cuenta en Twitter, es decir, un 33,08%. Mientras que en marzo del 2013 la cifra ascendía a 121 senadores tuiteros, un 45,49%. Se produce un aumento del 12,41% durante estos 12 meses.

Evolución presencia senadores en Twitter (Fuente datos: Twitter)

Si se toman los dos datos principales de actividad en Twitter, tuits emitidos y menciones recibidas, tenemos los siguientes datos:

Actividad total en twitter de los senadores durante 12 meses (Fuente datos: Topsy Pro)

Entre los 121 senadores se han emitido un total de 154.734 tuits, por lo que una media aritmética daría un resultado de 1.279 tuits por cada senador durante los 12 meses, es decir, 107 tuits por mes. Evidentemente esta media está muy alejada en el caso de muchos senadores, tanto al alza como a la baja -dato que se aprecia en la hoja Excel antes mencionada).

Sobre la repercusión generada, es decir, menciones recibidas, se alcanza la cifra de las 422.030 menciones, a 3.488 por senador sacando la media.

¿Pero todos estos datos han seguido una evolución mensual positiva, o bien son fruto de altibajos constantes?

Tomando los tuits emitidos se observa en el siguiente gráfico que la progresión ha sido la constante, exceptuando dos meses, agosto y diciembre de 2012. ¿Twitter es una herramienta de trabajo para los senadores y en períodos de baja actividad parlamentaria también disminuye la actividad en la red social? Parece ser que sí.

Evolución mensual tweets emitidos por senadores (Fuente datos: Topsy Pro)

Si la actividad tuitera coincide en su intensidad con la actividad propiamente parlamentaria en la Cámara Alta, ¿sucede lo mismo en cuanto a la repercusión generada por los senadores?

Atendiendo al gráfico correspondiente a estos datos se aprecia que, de hecho, no se cumple esta correlación.

Evolución mensual menciones recibidas por senadores (Fuente datos: Topsy Pro)

En estos 12 meses se han producido tres aumentos considerables de la repercusión generada. El primero en el mes de marzo del 2012, el segundo en noviembre del 2012 y el tercero en febrero del 2013.

Los dos primeros hay que analizarlos en clave local. El motivo, las elecciones autonómicas en Andalucía, Asturias, Cataluña y País Vasco. ¿Y por qué hay que tratarlo bajo ese contexto? La razón es muy sencilla: los principales senadores con más repercusión en Twitter no lo son precisamente por su condición de representantes del Senado, sino más bien por sus funciones en sus comunidades autónomas respectivas.

El tercer pico del gráfico, el correspodiente a febrero del 2013, no tiene que ver con la actividad de sus señorías en sus respectivas autonomías, más bien tiene que ver con la presión popular en dicha red social a raíz de la Plataforma de Afectados por la Hipoteca, que aunque tuvo su principal escenario en el Congreso, el Senado también se vio afectado.

Abordando la información de la misma forma que se hizo cuando se trató el Congreso, se podría categorizar el uso de twitter en tres vertientes diferentes:

  1. Uso informativo – publicitario: tuits directos
  2. Uso conversador: replies
  3. Uso redistributivo de contenido de terceros: retuits (RT’S)

Tipo de tweets emitidos por senadores (Fuente datos: TweetStats)

Según esta clasificación, los datos en términos generales serían los siguientes:

Casi la mitad de la actividad generada es en forma de tuits directos, un 47,10%, seguido del uso de retuits, con un 31,71% y como tercer recurso los replies, con un 21,19%. También resulta interesante comparar estos datos generales con los segmentados por partidos políticos, así como con los datos individuales de cada senador desde la hoja Excel antes mencionada.

¿Cómo lo hacen los partidos?

Cabría observar primero cómo queda el reparto de cuentas de Twitter por partido político a los que están adscritos los senadores, añadiendo los escaños obtenidos por cada partido.

Escaños vs número de cuentas twitter por partido político (Fuente datos: Twitter)

En cuanto a los dos partidos mayoritarios, el PP tiene a un 37,18% de sus senadores en Twitter, mientras que los socialistas lo tienen con un porcentaje del 57,14%, casi 20 puntos porcentuales de diferencia. CIU y PSC casi hacen pleno, y quien baja mucho su porcentaje es EAJ-PNV (aunque después resulta que el senador que está presente en Twitter es uno de los más destacados en toda la Cámara).

En el resto, cabe destacar la nula presencia en la red social de cinco partidos: PAR, UPN, Independientes (senadores no adscritos a un partido), Bildu y FAC.

¿Presencia es sinónimo de actividad? Ni mucho menos. Éste es el retrato de la actividad generada en términos totales por partido político:

Tweets emitidos por partido político (Fuente datos: Topsy Pro)

Cabe pensar por tanto que es lógico que los partidos políticos que más actividad hayan generado sean los mayoritarios, simplemente por el hecho de la diferencia notable de número de escaños y senadores con Twitter.

Así, el PP encabeza los datos con 73.366 tuits emitidos por sus 58 senadores tuiteros, seguido del PSOE con 52.395 tuits  por 36 senadores.

Un dato muy llamativo: el tercer partido con más actividad es EAJ-PNV, cuando sólo tiene un senador con Twitter (Iñaki Anasagasti) superando, por ejemplo, a CIU y sus doce senadores tuiteros.

Si se sacara la media de tuits por senador, estas diferencias se verían de modo muy claro en el siguiente gráfico:

Media tweets por senador en partidos políticos (Fuente datos: Topsy Pro)

EAJ-PNV, es decir, Iñaki Anasagasti, se destaca de un modo considerable. Bajo este criterio vamos como el PSOE mantiene mejores baremos que el PP, estando el resto de partidos por debajo de la media general.

Si se analizara la repercusión generada –menciones recibidas– se da una situación similar a la anterior. En términos generales los dos partidos mayoritarios (sobre todo el PP) son los que acaparan la mayoría de menciones.

Menciones recibidas por partido político (Fuente datos: Topsy Pro)

Pero si se sacara la media aritmética,se apreciaría que las tendencias varían de forma muy clara:

Media menciones x diputado en partidos políticos (Fuente datos: Topsy Pro)

Vuelve a ser EAJ-PNV el protagonista, mientras que aquí sí que el PP mantiene la supremacía sobre el PSOE.

Todos los datos referentes a la repercusión generada están totalmente condicionados, no por la actividad del Senado, sino por la actualidad política en determinadas comunidades autónomas o provincias-.

El motivo es que un número considerable de senadores mantienen responsabilidades y cargos públicos u orgánicos importantes en sus respectivas localidades. El número de alcaldes y líderes autonómicos es mucho más elevado en el Senado en comparación al Congreso. Y eso hay que tenerlo en cuenta a la hora de analizar estos datos.

¿Cómo usan Twitter?

Siguiendo la segmentación de los datos en función del partido político al que pertenece cada senador, es interesante desglosar el tipo de uso de Twitter según a tres categorías: informativo-publicitario, conversador y redifusor de contenidos de terceros.

En el siguiente gráfico se aprecian los datos por partido político:

Tipo de tweets emitidos por partido político (Fuente datos: TweetStats)

EAJ-PNV vuelve a destacar en un apartado en el que el resto no lo hacen, la categoría de conversador. En concreto, el senador Iñaki Anasagasti usa Twitter principalmente para interactuar con otros usuarios de la red social.

Cabe destacar la gran similitud en el tipo de uso de la Red por parte de los dos partidos mayoritarios, ¿quizás sea una característica de uso en representantes de organizaciones mayoritarias? En el Congreso, aunque con algunas pequeñas diferencias, también se producía esta similitud.

Curioso también el caso del PSC, donde lo que prima entre sus siete (ahora seis) senadores es la redifusión de tuits de terceros (retuits).

En todo caso, lo que queda claro es que no hay patrón de uso común entre todos los partidos, hecho que quizás denote que todavía se está en un proceso de asunción de dicha red social por parte de los senadores.

Senadores destacados

Aunque es interesante analizar los datos de actividad en Twitter en el contexto de partidos políticos, también lo es hacerlo bajo el punto de vista del político, es decir, del senador de forma individual.

Habría que atender entonces a quienes son los senadores más activos durante estos doce meses:

Senadores más activos en Twitter (Fuente datos: Topsy Pro)

Un dato relevante del anterior gráfico: los principales senadores más activos en Twitter lo son precisamente en esa condición, la de senadores. Es decir, ninguno es por ejemplo alcalde o líder autonómico. Y este factor es muy interesante porque en el siguiente gráfico se aprecia que precisamente ocurre todo lo contrario.

Entre los cinco más activos hay dos senadores del PP, dos del PSOE y uno de EAJ-PNV. Si se retoma la cifra total de tuits emitidos por los 121 senadores, 154.734, y ahora sumemos el total de tuits emitidos por estos cinco senadores, 62.617, resulta un 40,47% del total. De lo que se deduce al instante que hay muchos senadores con una actividad muy pobre.

Si se estudia a los senadores que más repercusión han generado, se obtendría el siguiente gráfico:

Senadores más mencionados en Twitter (Fuente datos: Topsy Pro)

De los cinco, tres desde luego no acaparan esa repercusión por su condición de senadores. No es muy factible que ni Alicia Sánchez-Camacho (líder del PP en Cataluña), ni Javier Arenas (candidato del PP en la elecciones autonómicas de Andalucía), ni Paco de la Torre (Alcalde de Málaga) hayan adquirido protagonismo en la Red por su presencia en el Senado. Si además se tiene en cuenta que los meses de mayor repercusión han sido precisamente los protagonizados por las diferentes elecciones autonómicas, se podría concluir que lo autonómico predomina sobre la Cámara Alta.

Senadores más conversadores en Twitter (Fuente datos: Topsy Pro)

Muy destacable el papel de la senadora popular Mariana Lorite y el senador del grupo vasco Iñaki Anasagasti. En ambos casos hay una relación directa entre la alta actividad generada y la repercusión obtenida.

Por último, y aunque Twitter en el ámbito de la política no es sólo conversar e interactuar, añadimos un tercer ranking, el del senador ‘conversador’:

El senador Iñaki Anasagasti se destaca sobre el resto. Aunque quizás lo más destacable sea la presencia de otros senadores que hasta ahora no habían sobresalido: Juan Espadas (PSOE), Emiliano García-Page (PSOE) y Beatriz Jurado (PP).

En resumen, la presencia y actividad en Twitter dentro del Senado está creciendo de forma regular, aunque la repercusión que se genera no está ni mucho menos relacionada con este crecimiento, ya que la influencia de la política autonómica y local está muy presente también en todo el conjunto de senadores con presencia en dicha red social.

Los votantes dicen...
  1. ismael peña-lópez dice:

    Interesantes los datos sobre, por ejemplo, @AliciaSCamacho.

    No me cabe ninguna duda que su actividad en Twitter (especialmente como receptora de comentarios o menciones) tiene poco o nada que ver con su cargo como senadora, y muchísimo más como presidenta del grupo parlamentario del Partido Popular en el Parlament de Catalunya.

    Es una lástima no poder hacer esta diferenciación, porque nos daría una idea (aunque aproximada y grosera) de en qué proporción se dirigen al ciudadano según un cargo u otro. Y veríamos, y esto es una opinión personal, lo perverso de compatibilizar cargos públicos.

    • Ismael, por contenido no tengo la capacidad para hacer esa diferenciación. Pero quizás sirva como indicativo el nivel de actividad (tweets emitidos) en su evolución mensual.

      Curiosamente, puede que los picos en este tipo de perfil de senador se, por ejemplo, durante las campañas electorales de sus respectivas elecciones autonómicas (consultar excel y fijarse en Alicia Sánchez-Camacho y Javier Arenas por ejemplo) ;-)

      Abrazos.

      @dalvarez37

  2. De acuerdo, es un análisis juicioso pero en extremo cuantitativo.
    La mayor o menor actividad te da una idea del interés del senador en aprovechar
    el canal, pero no sobre el tipo de uso que le da. Este puede ir desde los más
    loables fines cívicos hasta la más cruda demagogia con fines electorales. Sería
    interesante que intentaras un análisis de hashtag y cruzar los datos con la
    información que nos presentas aquí a ver qué resulta.

    • Gracias por el comentario y sugerencia.

      En anteriores artículos de Sesión de Control he escrito sobre hashtags recientes relacionados con la actividad parlamentaria: #opendragi y #DEN2013.

      En este tipo de análisis trato de aportar sobre precisamente el interés que los políticos tienen sobre Twitter. Para hacer análisis cualitativos basados en estudios semánticos ya se necesitan plataformas más complejas.

      Saludos,
      @dalvarez37

  3. […] Así se usa Twitter en el Senado (SesiónDeControl.com) […]

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>