WordPress 2.6 deshabilitará el XML-RPC

Para los que utilizan clientes externos para publicar en sus blogs, sepan que en Worpress 2.6 se estará deshabilitando la opción de XML-RPC y Atom Publishing Protocol, con el fin de aumentar la seguridad de muchos blogs que no utilizan esta función y que ha sido el punto de muchos fallos en el pasado.

Wordpress 2.6 - XMLRPC

Esto solo afectara a las instalaciones nuevas, a quienes estén actualizando su instalación la opción quedara activa.

BlogDesk, publica en tu blog desde el escritorio

BlogDesk - DefaultEl editor gráfico que incluye WordPress no es muy bueno, y muchas personas no conocen mucho de código HTML como para usar el editor de código (además de que resulta algo tedioso ver tanto código); pero gracias a la interface XML-RPC que incluye wordpress es posible usar aplicaciones externas para publicar contenidos en el blog, sin tener que entrar al administrativo del mismo.

Una de esas aplicaciones es BlogDesk. BlogDesk es un cliente bastante pequeño, con una interface sencilla, opciones de primera mano; y compatible con WordPress, MovableType, Drupal, Serendipity y ExpressionEngine. Pero solo funciona en ambientes Windows 😦 .

Para poder publicar en tu blog, tiene un asistente que solicita algunos datos básicos de tu blog, puedes obtener una lista de las categorías ya creadas (aun que no jerárquica como las maneja WordPress), además puedes manejar varios blogs a la vez. Incluso puedes publicar el mismo post en varios blogs en un solo clic.

El editor visual que incluye no es muy versátil, cuando pegas texto con estilos, enlaces e imágenes solo acepta el texto (bueno y malo); pero funciona mejor que el de WordPress. Contiene las opciones básicas de un editor visual, nada en especial. También incluye una vista de código fuente para afinar detalles a mano, pero la gran cagada es que no puedes utilizar los botones de negritas, itálicas, etc, tienes que escribir todo, y que al cambiar entre uno y otro te regresa al inicio del post. Además incluye soporte para diccionarios , solo 13 idiomas por el momento entre ellos uno para español. La interface también puede cambiar de idioma cuando instalas un nuevo diccionario.

Los posts los puedes guardar en el disco, posee auto guardado de los mismos, o bien dejarlos como plantillas para usarlos de base para otros; aunque me gustaría que pudiera cargar/editar también los drafts que tienes en el blog y volverlos a dejar como drafts. Es posible editar los post ya publicados, pero solo puedes descargar los últimos; las páginas que hayas creado no es posible editarlas.

El manejo de las imágenes tiene opciones básicas como redimencionar, alineación, calidad de la imagen, crear vistas previas, rotar, convertir a otro formato; y quizá lo más interesante agregar unos efectos rápidos a las mismas:

blogdesk-efectos

Aunque he de decir que a veces se vuelve una pesadilla manipular las imágenes desde el editor visual, hay que recurrir al código para evitar un desastre. Tiene la maña de insertar la imágen entre un párrafo.

Otras opciones que incluye son:

  • Notas personales, como para tener un to-do list, cosas que debes cuidar del post, etc;
  • Frases frecuentemente usadas, útil si en todos los post agregas una firma al final;
  • Generador de tags para Technorati, creas una lista de los tags que quieres manejar, seleccionas los que deseas para el post y BlogDesk te genera el código HTML y los enlaces a Technorati. Me hubiese gustado que pudieran modificarse los enlaces que genera para usar mis etiquetas de búsqueda 😉

BlogDesk - CssLo que sí me gusto fue poder modificar el CSS por defecto del editor y ajustarlo al que usa mi blog, te puedes dar una mejor idea del resultado final. Para modificar el css debes buscar el archivo C:\Documents and Settings\%user%\Application Data\BlogDesk\UserData\default.css y agregar el código que deseas. Para facilitarte las cosas usa selectores generales (body, p, a, img, etc) no los que realmente usas en el blog que dependen de una jerarquía de clases.

Conclusión, BlogDesk luce como buena alternativa al editor de wordpress desde tu escritorio, útil para eso días en los que el server anda medio lento o quieres trabajar en algún post cuando no vas a estar con acceso a Internet, sin mencionar que tiene una copia de tus posts; solo ten cuidado al tratar con las imágenes se puede despelotar todo el texto. Este post ha sido escrito y publicado desde BlogDesk.

Etiquetas de búsqueda: , , , ,

Ping via XML-RPC

Desde hace varios dias andaba buscando como es que funciona lo de los pings via RPC-XML, vaya fue algo dificil encontrarlo pero ya se como esta esa onda.

Hace ya tiempo atras escuche de servicios como weblogs.com donde listan los ultimos blogs actualizados, solo que el metodo de actualizacion es mucho mas automatico ya que es posible hacerlo via XML-RPC. El ping via XML-RPC consite en una llamada a un procedimiento en un serividor remoto, a través del protocolo HTTP. Decide buscar mas hacerca del tema y encontre en el sitio web de la implementacion, la especificacion de como se realiza el proceso del ping en weblogs.com:

Lo que se debe hacer es una llamada a un procedimiento como este:

weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname=”none”) returns struct

donde:

  • weblogname, es el nombre del blog
  • weblogurl, es la url del blog.
  • changesurl, es la url donde buscar nuevos cambios
  • categoryname, es el nombre de la categoria del blog

los primeros 2 parametros son requeridos y todos son de tipo cadena. Esta funcion debe devolver 2 parametros, uno indicando si tuvo exito o no y el otro un mensaje descriptivo del error en inglés.

Este es un ejemplo de la comunicación entre el cliente (quien solicita el ping) y el servidor (quien buscará cambios en el blog):

POST /RPC2 HTTP/1.0
User-Agent: Radio UserLand/7.1b7 (WinNT)
Host: rpc.weblogs.com
Content-Type: text/xml
Content-length: 250

<?xml version=”1.0″?>
<methodCall>

  <methodName>weblogUpdates.ping</methodName>
  <params>
  <param>
  <value>Scripting News</value>
  </param>
  <param>
  <value>http://www.scripting.com/</value&gt;
  </param>
  </params>
  </methodCall>

HTTP/1.1 200 OK
Connection: close
Content-Length: 333
Content-Type: text/xml
Date: Sun, 30 Sep 2001 20:02:30 GMT
Server: UserLand Frontier/7.0.1-WinNT

<?xml version=”1.0″?>
<methodResponse>

  <params>
  <param>
  <value>
  <struct>
  <member>
  <name>flerror</name>
  <value>
  <boolean>0</boolean>
  </value>
  </member>
  <member>
  <name>message</name>
  <value>Thanks for the ping.</value>
  </member>
  </struct>
  </value>
  </param>
  </params>
  </methodResponse>

Bueno y como se implementa un servidor XML-RPC en PHP? Me puese a buscar una librería escrita en php, para no tener que lidiar con un extensión para PHP que seria una solución mucho mas robusta, seria un poco más complicada de instalar en los servidores de hosting. Me tope con una implementacion del protocolo y en php: phpxmlrpc. Luego de una exporacion rápida, la libreria parecia muy completa y con unos 5 años de desarrollo… pero tambien bastante complicada para hacer algún servidor ping en un corto tiempo.

Para comprender mejor como se da esta comunicación en tiempo real, me di a la tarea de buscar en WordPress como se realiza esta función. Se que WordPress tiene la opcion de que cada vez que se realiza un nuevo post, este automáticamente envia el ping a las direcciones que se le han especificado. Despues de urgar mucho en el codigo y buscar en vano en codex.wordpress.com, encontre la función en functions.php:

function weblog_ping($server = '', $path = '') {
	global $wp_version;
	include_once (ABSPATH . WPINC . '/class-IXR.php');

// using a timeout of 3 seconds should be enough to cover slow servers
	$client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path));
	$client->timeout = 3;
	$client->useragent .= ' -- WordPress/'.$wp_version;

// when set to true, this outputs debug messages by itself
	$client->debug = false;
	$home = trailingslashit( get_option('home') );
	if ( !$client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping
		$client->query('weblogUpdates.ping', get_settings('blogname'), $home);
}

Ya viendo esta funcion vi que primero intenan llamando a una funcion extendida del ping que donde le especifican la URL del feed ademas del nombre y la url del blog. Si esta funcion no es posible ejecutarla, entonces se llama a la version normal de ping, que solo toma 2 parametros: el nombre del blog y la URL del mismo. Tambien descubrí que incluyen el archivo class-IXR.php, que para sorpresa mia es una libreria que implementa el protocolo XML-RPC pero lo interesante es que contiene 2 clases: una cliente y otra servidor, esta última es la que me interesa. La libreria se llama IXR – The Inutio XML-RPC Library y su sitio oficial es: http://scripts.incutio.com/xmlrpc/.

En un vistazo rápido a la pagina de la librería encontré lo que estaba buscando, con un pequeño ejemplo se puede ver todo:

<?php

include('IXR_Library.inc.php');

function sayHello($args) {
    return 'Hello!';
}
function addTwoNumbers($args) {
    $number1 = $args[0];
    $number2 = $args[1];
    return $number1 + $number2;
}
$server = new IXR_Server(array(
    'demo.sayHello' => 'sayHello',
    'demo.addTwoNumbers' => 'addTwoNumbers'
));

Super sencillo! Bueno este es solo un ejemplo que dan ellos no se si funciona pero tengo grandes esperanzas de que sea algo de copiar & pegar y ya tenga mi servidor de ping XML-RPC funcionando.

Si este último código funciona, en unos dias estare poniendo este servicio en blogschapines para que le den una probadita….