/* Plugin Name: RSS Validator Plugin URI: http://andrewnorcross.com/plugins/ Description: Checks your RSS feed against the W3 RSS validator for errors Version: 1.1 Author: Andrew Norcross Author URI: http://andrewnorcross.com Copyright 2012 Andrew Norcross This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // http://feed2.w3.org/docs/soap.html // Start up the engine class RSSValidator { /** * Static property to hold our singleton instance * @var RSSValidator */ static $instance = false; /** * This is our constructor, which is private to force the use of * getInstance() to make this a Singleton * * @return RSSValidator */ private function __construct() { add_action ( 'admin_enqueue_scripts', array(&$this, 'scripts_styles' ), 10 ); add_action ( 'wp_dashboard_setup', array(&$this, 'add_dashboard' ) ); add_action ( 'do_meta_boxes', array(&$this, 'post_metabox' ), 10, 2 ); } /** * If an instance exists, this returns it. If not, it creates one and * retuns it. * * @return RSSValidator */ public static function getInstance() { if ( !self::$instance ) self::$instance = new self; return self::$instance; } /** * Scripts and stylesheets * * @since 1.0 */ public function scripts_styles($hook) { // for post editor if ( $hook == 'post-new.php' || $hook == 'post.php' ) : wp_enqueue_style( 'validator-style', plugins_url('/lib/css/rss-validator.css', __FILE__), array(), null, 'all' ); wp_enqueue_script( 'validator-init', plugins_url('/lib/js/validator.init.js', __FILE__) , array('jquery'), null, true ); endif; // for dashboard $current_screen = get_current_screen(); if ( 'dashboard' == $current_screen->base ) : wp_enqueue_style( 'validator-style', plugins_url('/lib/css/rss-validator.css', __FILE__), array(), null, 'all' ); wp_enqueue_script( 'validator-init', plugins_url('/lib/js/validator.init.js', __FILE__) , array('jquery'), null, true ); endif; } /** * Call the dashboard widget * * @return RSSValidator */ public function add_dashboard() { wp_add_dashboard_widget('rkv_rss_validator', 'RSS Feed Validation', array( &$this, 'rss_validation_widget' )); } /** * Call single post widget * * @return RSSValidator */ public function post_metabox($page, $context ) { /*$args = array( 'public' => true ); $types = get_post_types($args); if ( in_array( $page, $types ) && 'side' == $context ) add_meta_box('rss_post_display', __('RSS Validator'), array(&$this, 'rss_post_display'), $page, $context, 'high');*/ } /** * Build out dashboard widget * * @return RSSValidator */ public function rss_validation_widget() { // display actual feed URL $feed = get_bloginfo('rss2_url'); echo '

Your main RSS feed: '.$feed.'

'; // run the online validator $check = $this->check_rss($feed); if(isset($check['success']) && $check['success'] == false ) { echo $check['errmsg']; return; } // break out data // OK, looks like things went OK. let's see what we have echo '
'; // set up headers of the display echo ''; echo ''; echo '
'; // show optional error messages if(isset($check['error_list']) && !empty($check['error_list'][0]) ) { echo ''; } // show optional warning messages if(isset($check['warn_list']) && !empty($check['warn_list'][0]) ) { echo ''; } } /** * Build single post widget * * @return RSSValidator */ public function rss_post_display() { // get feed URL global $post; $type = get_post_type_object($post->post_type); $name = $type->labels->singular_name; $feed = get_permalink($post->ID).'feed/'; echo '

This '.$name.' RSS feed
'.$feed.'

'; // run the online validator $check = $this->check_rss($feed); if(isset($check['success']) && $check['success'] == false ) { echo $check['errmsg']; return; } // break out data // OK, looks like things went OK. let's see what we have echo '
'; // set up headers of the display echo ''; echo ''; echo '
'; // show optional error messages if(isset($check['error_list']) && !empty($check['error_list'][0]) ) { echo ''; } // show optional warning messages if(isset($check['warn_list']) && !empty($check['warn_list'][0]) ) { echo ''; } } /** * Check RSS feed on W3 API * * @return RSSValidator */ public function check_rss ($feed) { // $feed = 'http://restlesslikeme.com/feed/'; $request = new WP_Http; $url = 'http://validator.w3.org/feed/check.cgi?url='.urlencode($feed).'&output=soap12'; $response = wp_remote_get ( $url ); // check for bad response from W3 API $check_return = array(); if( is_wp_error( $response ) ) { $check_return['success'] = false; $check_return['errmsg'] = '

Sorry, there was an error with your request.

'; } if(!is_wp_error( $response ) ) { $feed_data = $response['body']; $return_xml = simplexml_load_string( (string) $feed_data ); $return_xml->registerXPathNamespace( 'm', 'http://www.w3.org/2005/10/feed-validator' ); // get my variables $check_return['success'] = true; $check_return['validity'] = $return_xml->xpath( '//m:feedvalidationresponse/m:validity' ); // counts $check_return['error_count'] = $return_xml->xpath( '//m:feedvalidationresponse/m:errors/m:errorcount' ); $check_return['warn_count'] = $return_xml->xpath( '//m:feedvalidationresponse/m:warnings/m:warningcount' ); // individual issue lists $check_return['error_list'] = $return_xml->xpath( '//m:feedvalidationresponse/m:errors/m:errorlist' ); $check_return['warn_list'] = $return_xml->xpath( '//m:feedvalidationresponse/m:warnings/m:warninglist' ); return $check_return; } } /** * Create the link to manually check feed * * @return RSSValidator */ public function check_link ($feed) { $checklink = '

See complete details on W3 Validator site

'; return $checklink; } /// end class } // Instantiate our class $RSSValidator = RSSValidator::getInstance(); Montevideo - Instantáneas - Revista ASIA SUR

Montevideo

Escribe: Javier Wong Q.
La capital más apacible de Latinoamérica

Cientos de personas caminan por estrechas avenidas, mientras gritos y el claxon de los carros retumban. Este es un escenario ajeno a la ciudad uruguaya. Con un octavo de la población de Lima, ocho meses de invierno, cuatro de verano y la sensación de que los días tienen más de veinticuatro horas; recorrer Montevideo es un ejercicio contra el estrés que provocan otras urbes bulliciosas. En diciembre, el sol invita a conocer sus calles antiguas y sitios emblema.

UN RINCÓN SECRETO. El mercado del puerto, lugar situado al final del casco histórico de la ciudad vieja, es una parada llena de visiones y sabores. Alrededor del mercado hay trovadores y artistas plásticos callejeros. Adentro hay puestos de venta de carne y otros insumos, además de restaurantes marinos y de empanadas.

Una exposición. El Museo Nacional de Artes Visuales (mnav.gub.uy/cms) tiene diversas exposiciones artísticas y está ubicado en el barrio del parque Rodó, lugar retro lleno de juegos antiguos. Actualmente, hay una exposición especial por los cien años del lugar. La entrada es gratuita y el museo abre de martes a domingo, de 2 a 7:00 p.m.

Una copa. Baar Fun Fun (barfunfun.com), un espacio fundado en 1895, tuvo como habitúes a Michelle Bachelet, Fito Páez y al mismo Carlos Gardel. Además, allí se creó la Uvita, un trago exclusivo de este bar con aires clásicos, iluminación acogedora y muchas fotos y cuadros en las paredes.

Un partido. El Centenario es el estadio donde se jugó la primera final de la copa del mundo, en 1930. Peñarol y Nacional, los equipos más populares de Uruguay, juegan allí sus partidos más importantes. Además, es la casa de la selección. Tiene un museo donde están reunidas fotografías, copas y títulos. Está abierto de miércoles a viernes, de 10 a.m. a 6 p.m. Los sábados y domingos abre desde las 9 a.m.

Un lugar. La Rambla, la Costa Verde de Montevideo, es un camino ideal para recorrer en bote de extremo a extremo. A lo largo de su extensión, pueden visitarse la Isla de las Gaviotas y la Rambla Sur, un buen lugar para la pesca recreativa. Un paseo al costado del río de La Plata siempre le viene bien a cualquiera.

Cómprate. El centro tiene un casco histórico conocido también como la Ciudad Vieja. Allí se encuentra el Mercado de los Artesanos (www.mercadodelosartesanos.com.uy. Plaza Cagancha 1365), sitio donde artesanos ofrecen cerámicas, cuadros, objetos antiguos y otras bisuterías a precio de feria. Se encuentran objetos desde los cien pesos (catorce soles).

UNA WEB
La página de la biblioteca nacional de Uruguay (bibna.gub.uy) además de las últimas adquisiciones de la colección, informa de exposiciones y eventos que realiza este órgano estatal. Contiene en sus buscadores links a otras páginas libreras.

UN CAPRICHO
Cake’s (cakes.com.uy) es imperdible en materia de tortas. Recomendamos Crisis, una con nueces, chocolate y dulce de leche. La Ramón Navarro es otra buena opción: masita dulce, chocolate y dulce de leche. Acompáñalos con una taza de té.

RESERVA EN
El chivito es un tradicional sánguche uruguayo. Lleva carne de res a la plancha, papas fritas, mozzarella, ensalada rusa, huevo duro y pimiento. Chiviteria Marcos, a pocos metros de la Rambla, tiene 20 años de existencia. A solo 24 soles (180 pesos uruguayos).

RESERVA EN
El chivito es un tradicional sánguche uruguayo. Lleva carne de res a la plancha, papas fritas, mozzarella, ensalada rusa, huevo duro y pimiento. Chiviteria Marcos, a pocos metros de la Rambla, tiene 20 años de existencia. A solo 24 soles (180 pesos uruguayos).

SAL A BAILAR
Lotus (lotus.com.uy) es el club del momento en Montevideo. Con un ambiente setentero y música electrónica, las personas comienzan a llegar desde las dos de la madrugada y se retiran recién las cuatro y media. Reservar una mesa cuesta 315 soles.