/* 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(); Permiso para sentir - Columnistas, Jeremías Gamboa - Revista ASIA SUR

Permiso para sentir

O carta de batalla contra el burger periodismo

En la edición 100 de la revista Etiqueta Negra, Julio Villanueva Chang, su editor, traza un conmovedor paralelo entre los primeros años de la revista que fundó y los últimos de la vida de su madre: «Viví entre la depresión de ver morir a mi madre y la euforia por parir cada número de esta revista», escribe. «Trabajar se convirtió en un antídoto para evitar que ella se fuera. Cada madrugada yo le daba la espalda para insistir en una revista que a ella le gustara leer». Hace solo unos días, leyendo el texto que abre el primer número del periódico trimestral Cometa –sin duda el batacazo periodístico del año–, descubro que Marco Avilés –su fundador junto al fotógrafo Daniel Silva– rememora allí la historia de la biblioteca que su abuelo Leopoldo Hurtado enterró en algún lugar de su hacienda antes de que se la expropiara la Reforma Agraria de Velasco Alvarado. Avilés solo guarda un recuerdo borroso de él (además de dos incunables apolillados que una tía suya rescató de aquella biblioteca): «Era una mañana y él estaba leyendo el diario en el patio, bajo unos árboles. Corrí hacia él y le arrebaté el periódico. Lo tiré al suelo y me escondí. Ahora me gustaría disculparme por esa travesura infantil devolviéndole este periódico para enriquecer su colección, esté donde esté», escribe.

El aire común de estos textos no es casual. Revela, creo, que entre ambos esfuerzos editoriales hay un lazo acaso más profundo que la apuesta notoria por un periodismo riguroso, sensible y de gran calidad formal, en medio de la tendencia casi generalizada de una prensa atomizada y acéfala que el propio Avilés, en un ensayo lapidario publicado en su blog y replicado en el diario La Primera, ha denominado el burger periodismo o periodismo chatarra. «Muchos editores de diarios y revistas dicen que la gente no lee. O que lee cualquier cosa. O que no tiene tiempo para nada y que por eso hay que darle textos enanos. Y lo hacen», señala Avilés en ese texto. Ante ese escenario, entonces, es posible leer su flamante periódico –igual que la revista que fundó Villanueva diez años atrás– como el intento por construir otro tipo de lector al que no se subestima y que, por lo tanto, se entiende mucho más humano que aquel que solo pide información directa y puntual. Quienes leemos, parecen decir ellos, no solo reclamamos nuestro derecho a pensar y a exigir calidad y profundidad. También, a sentir.

Uno se interna en la experiencia de lectura gráfica y textual de Cometa

de personal

ender desde un compromiso asuerzos que ante y bien. criterioso, emana o agradecen a los y se da cuenta de la cantidad de piel que han dejado en su trabajo el fotógrafo Daniel Silva y el cronista Marco Avilés. El reportaje Contactados. Amor y sangre en el lote 88 no tiene precedentes, lo que se debe al despliegue que le dedica a la realidad de un grupo de personas habitualmente excluidas de las publicaciones locales (la historia de esta familia machiguenga correrá a través de 16 mil palabras en casi 80 páginas de 48 por 68 centímetros) y también a que el retrato que hace de ellas posee un nivel de concreción y materialidad difíciles de hallar en la prensa escrita. Las imágenes de luz primordial capturadas por Silva y el texto de Marco Avilés, que relata la historia pasada y la rutina de subsistencia de Mayoro, Ernestina, Aladino y de sus familiares de una forma minuciosa y a la vez poética –por momentos recoge el rigor del informe y en otros recrea de modo persuasivo y extrañamente lírico la dicción del pensamiento de los personajes del relato–, son un verdadero acto de generosidad para los retratados y también para nosotros, sus lectores, desorientados entre tanto periodismo monocorde, de notas intercambiables y textos anodinos que de pronto parece haber plagado la mayoría de los medios tradicionales del país.

Hace algún tiempo, me apenó bastante escuchar al editor de una revista bastante representativa del medio decir que a él no le interesaba en absoluto el «estilo» o –así lo dijo él– la «pluma» de los redactores o colaboradores de su publicación. Leyéndola, uno comprueba que aplicó con bastante éxito aquello que pensaba. Por suerte, me digo, no todos piensan igual. Las páginas de Cometa se pueden leer, una a una, como el combate obstinado de un par de periodistas que han sabido cuidar su mirada y su voz para emplearla de un modo específico y brillante en la noble labor de modificar nuestra visión de la realidad con el fin de enriquecerla. «Descubrimos que no es cierto lo que andan pregonando los gurús que diseñan y rediseñan diarios y revistas para empeorarlos», escribió Avilés en un correo colectivo a quienes fuimos a la exitosa presentación de Cometa. Tiene razón. Seguramente, su abuelo, Leopoldo Hurtado, habría colocado con orgullo su periódico entre las mejores adquisiciones de su biblioteca.