Hola, en estos días estuve preparando el sistema para que mi blogmap enviara pings a los distintos directorios como weblogs.com, bitacoras.com, technoray, blogalaxia.com, etc, etc.
Estos pings le avisan al directorio en cuestión que mi feed.xml se ha actualizado y que pueden pasar a recoger informacion sobre los nuevos post, entre ellos tambien es el blogsearch de Google, en pocos minutos nuestros post pueden aparecer en Google!!
Mi blogmap no es ni wordpress, ni blogger, movable type, es mío.
Solo que utilizo una plantilla de WP por que me ha quedado linda, aclaración: no es este blog!
Bueno estaba tratando de hacer eso y no encontraba la forma, no la encontraba por que de ingles no se tanto y cuando se trata de comentarios de código el translate de google hace desastres, entonces se me ocurrió agarrar el código de la funcion weblog_ping() de WP para modificarla un poco y hacer mis propios envíos sin depender de ningún otro servicio.
Qué descubri? que prácticamente no hay ninguna documentación en castellano sobre los pings, hay miles de post que hablan de la diferencia entre pings y trackbacks(pero para eso basta con wikipedia).
La pagina mas interesante que encontré intentaba hacer lo mismo que yo y entre varios bloggers aparentemente no habían llegado a ninguna conclusión, les paso la dirección del post para que saquen sus conclusiones Ping vía XML-RPC - Javier Aroche. Sin embargo allí nació mi primera idea de modificar la funcion weblog_ping() y mas o menos alguna noción mas técnica de cual era el objetivo de todo esto.
Entonces empecé a navegar por el código de wordpress hasta que di con esta funcion ubicada en el archivo:
/wp-includes/comment.php -> line 1508
<?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_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping
$client->query('weblogUpdates.ping', get_option('blogname'), $home);
}
?>
Esta funcion de WP es la encargada de enviar los pings cada vez que nosotros posteamos, WP envía pings a las direcciones que estén cargadas en la lista de Tablero>Opciones>Escritura y después se van abajo de todo:![]()
Mas abajo en este mismo post les pasare la lista de urls para hacer ping, ya que si están leyendo esto pero tienen WP tambien les puede servir.
Bueno de allí en mas empecé a editar la funcion como mejor me pareció.
Las variables a cambiar son las que corresponden a la versión de Wordpress, las que corresponden a los datos del blog, y la url para hacer ping debe venir de otro lugar.
El resultado de esta modificación fue el siguiente:
<?php
function weblog_ping($server = '', $path = '')
{
include_once ('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 .= ' -- Blogturismo The Blogmap';
// when set to true, this outputs debug messages by itself
$client->debug = false;
$home = 'http://blogturismo.com.ar/';
if ( !$client->query('weblogUpdates.extendedPing', 'Blogturismo Argentina Mapa de Turismo', $home, 'http://blogturismo.com.ar/feed.xml' ) )
$client->query('weblogUpdates.ping', 'Blogturismo Argentina Mapa de Turismo', 'http://blogturismo.com.ar/');
else
echo "Error: ".$server."
";
}
weblog_ping('http://rpc.technorati.com/rpc/ping');
?>
Esta funcion modificada de WP envía pings de manera correcta, por ahora envía un ping, he ingresado las variables como constantes literales adentro de la funcion, lo hago así por que mi idea no es hacer un servicio como el de http://pingomatic.com/ para que cualquiera lo use, si no que este código lo voy a ingresar en el archivo php que realice cambios en el sitemap. O quizás se pueda implementar simplemente como un archivo único llamado ping.php, cada vez que lo ejecutemos en el navegador avisara a todos los servicios que tengamos cargados que hay algo nuevo.
Finalmente este es el código copy/paste para que tengan su propio sistema de notificación:
<?php
function weblog_ping($server = '', $path = '')
{
include_once ('class-IXR.php');
$client = new IXR_Client($server, ((!strlen(trim($path)) ('/' == $path)) ? false : $path));
$client->timeout = 3;
$client->useragent .= 'Blogturismo The Blogmap';
$client->debug = false;
if ( !$client->query('weblogUpdates.extendedPing', 'Titulo Blog', 'http://miblog.com/', 'http://miblog.com/feed.xml' ) )
{
$client->query('weblogUpdates.ping', Titulo Blog', 'http://miblog.com');
echo $server."----------------------OK<br>";
}
else
{
echo $server."----------------------NOT<br>";
}
}
weblog_ping('http://xml-rpc.meaviso.com/ping.php');
weblog_ping('http://rpc.pingomatic.com/');
weblog_ping('http://rpc.technorati.com/rpc/ping');
weblog_ping('http://ping.blogalaxia.com');
weblog_ping('http://blogsearch.google.com/ping/RPC2');
weblog_ping('http://1470.net/api/ping');
weblog_ping('http://api.feedster.com/ping');
weblog_ping('http://api.feedster.com/ping.php');
weblog_ping('http://api.moreover.com/ping');
weblog_ping('http://api.moreover.com/RPC2');
weblog_ping('http://api.my.yahoo.com/RPC2');
weblog_ping('http://api.my.yahoo.com/rss/ping');
weblog_ping('http://bblog.com/ping.php');
weblog_ping('http://bitacoras.net/ping');
weblog_ping('http://blogdb.jp/xmlrpc');
weblog_ping('http://blog.goo.ne.jp/XMLRPC');
weblog_ping('http://blogsearch.google.com/ping/RPC2');
weblog_ping('http://blogmatcher.com/u.php');
weblog_ping('http://bulkfeeds.net/rpc');
weblog_ping('http://coreblog.org/ping/');
weblog_ping('http://mod-pubsub.org/kn_apps/blogchatt');
weblog_ping('https://phobos.apple.com/WebObjects/MZFinance.woa/wa/pingPodcast');
weblog_ping('http://ping.amagle.com/');
weblog_ping('http://ping.bitacoras.com');
weblog_ping('http://ping.bloggers.jp/rpc/');
weblog_ping('http://ping.blogmura.jp/rpc/');
weblog_ping('http://ping.blo.gs/');
weblog_ping('http://ping.cocolog-nifty.com/xmlrpc');
weblog_ping('http://pinger.blogflux.com/rpc/');
weblog_ping('http://ping.exblog.jp/xmlrpc');
weblog_ping('http://ping.feedburner.com');
weblog_ping('http://ping.myblog.jp');
weblog_ping('http://pingqueue.com/rpc/');
weblog_ping('http://ping.blogg.de/');
weblog_ping('http://ping.rootblog.com/rpc.php');
weblog_ping('http://ping.syndic8.com/xmlrpc.php');
weblog_ping('http://ping.weblogalot.com/rpc.php');
weblog_ping('http://ping.weblogs.se/');
weblog_ping('http://rcs.datashed.net/RPC2/');
weblog_ping('http://rpc.blogbuzzmachine.com/RPC2');
weblog_ping('http://rpc.blogrolling.com/pinger/');
weblog_ping('http://rpc.britblog.com/');
weblog_ping('http://rpc.icerocket.com:10080/');
weblog_ping('http://rpc.newsgator.com/');
weblog_ping('http://rpc.pingomatic.com/');
weblog_ping('http://rpc.tailrank.com/feedburner/RPC2');
weblog_ping('http://rpc.technorati.com/rpc/ping');
weblog_ping('http://rpc.weblogs.com/RPC2');
weblog_ping('http://rpc.wpkeys.com/');
weblog_ping('http://services.newsgator.com/ngws/xmlrpcping.aspx');
weblog_ping('http://signup.alerts.msn.com/alerts-PREP/submitPingExtended.doz');
weblog_ping('http://topicexchange.com/RPC2');
weblog_ping('http://trackback.bakeinu.jp/bakeping.php');
weblog_ping('http://www.a2b.cc/setloc/bp.a2b');
weblog_ping('http://www.bitacoles.net/ping.php');
weblog_ping('http://www.blogdigger.com/RPC2');
weblog_ping('http://www.blogoole.com/ping/');
weblog_ping('http://www.blogoon.net/ping/');
weblog_ping('http://www.blogpeople.net/servlet/weblogUpdates');
weblog_ping('http://www.blogroots.com/tb_populi.blog?id=1');
weblog_ping('http://www.blogshares.com/rpc.php');
weblog_ping('http://www.blogsnow.com/ping');
weblog_ping('http://www.blogstreet.com/xrbin/xmlrpc.cgi');
weblog_ping('http://www.holycowdude.com/rpc/ping/');
weblog_ping('http://www.lasermemory.com/lsrpc/');
weblog_ping('http://www.imblogs.net/ping/');
weblog_ping('http://www.mod-pubsub.org/kn_apps/blogchatter/ping.php');
weblog_ping('http://www.newsisfree.com/RPCCloud');
weblog_ping('http://www.newsisfree.com/xmlrpctest.php');
weblog_ping('http://www.popdex.com/addsite.php');
weblog_ping('http://www.snipsnap.org/RPC2');
weblog_ping('http://www.weblogues.com');
weblog_ping('http://xmlrpc.blogg.de');
?>
Las variables que deben cambiar son: $client->useragent pónganle el nombre que mas les guste, y en $client->query deben poner en este orden el nombre del blog, la dirección del home y la dirección del feed. Claro hay que tener un feed validado!! Ojo son dos líneas donde hay que modificar el query.
Me perdonaran la brutalidad de no incluir las llamadas a weblog_ping en un bucle, pero en el momento me pareció mas rápido agarrar la lista de urls y hacer un replace text con el bloc de notas. Ustedes podrían guardar las urls en una tabla de MySQL para que quede mas lindo.
La lista de url pings se puede agrandar o achicar según sepan que hay un servidor nuevo o deseen quitarse de alguno.
Por ultimo les digo que esta web tarda bastante en cargarse así que no se preocupen si no responde por un minuto o dos, mientras indique que aun se esta cargando esta todo perfecto, les mostrara los resultados al final, se puede jugar con la variable $client->timeout para darle mas tiempo a los servidores para que respondan o para acortar el tiempo de espera de la pagina ping.php.
Este script sirve para cualquier blog que tenga feed, no solo un WP, tambien un blogger(blogspot) o cualquiera, incluso para otros conceptos de webs 2.0, tal es el caso de la mía que no es exactamente un blog Blogturismo Argentina.
Me olvidaba el archivo 'class-IXR.php' esta en la misma carpeta que el archivo comment.php, si tienen alguna versión de WP lo sacan de allí si no lo pueden copiar de aquí: http://lab.yukei.net/wp-code/
Lo prometido, esta lista de urls para hacer ping esta en muchos lugares de la blogosfera y se agregan al panel en donde les explique mas arriba, ver imagen donde esta pingomatic.com. No se si será mas efectiva que utilizar solo pingomatic, si van a la web verán que tienen una interesante lista de servicios y que debe estar bien actualizada.
http://1470.net/api/ping
http://api.feedster.com/ping
http://api.moreover.com/ping
http://api.moreover.com/RPC2
http://api.my.yahoo.com/RPC2
http://api.my.yahoo.com/rss/ping
http://bblog.com/ping.php
http://bitacoras.net/ping
http://blog.goo.ne.jp/XMLRPC
http://blogdb.jp/xmlrpc
http://blogmatcher.com/u.php
http://blogsearch.google.com/ping/RPC2
http://bulkfeeds.net/rpc
http://coreblog.org/ping/
http://mod-pubsub.org/kn_apps/blogchatt
http://ping.amagle.com/
http://ping.bitacoras.com
http://ping.blo.gs/
http://ping.blogalaxia.com
http://ping.bloggers.jp/rpc/
http://ping.blogmura.jp/rpc/
http://ping.cocolog-nifty.com/xmlrpc
http://ping.exblog.jp/xmlrpc
http://ping.fakapster.com/rpc
http://ping.feedburner.com
http://ping.myblog.jp
http://ping.rootblog.com/rpc.php
http://ping.syndic8.com/xmlrpc.php
http://ping.weblogalot.com/rpc.php
http://ping.weblogs.se/
http://ping.wordblog.de/
http://pinger.blogflux.com/rpc
http://pingoat.com/goat/RPC2
http://rcs.datashed.net/RPC2/
http://rpc.blogbuzzmachine.com/RPC2
http://rpc.blogrolling.com/pinger/
http://rpc.britblog.com
http://rpc.icerocket.com:10080/
http://rpc.newsgator.com/
http://rpc.pingomatic.com
http://rpc.tailrank.com/feedburner/RPC2
http://rpc.technorati.com/rpc/ping
http://rpc.weblogs.com/RPC2
http://rpc.wpkeys.com
http://services.newsgator.com/ngws/xmlrpcping.aspx
http://topicexchange.com/RPC2
http://trackback.bakeinu.jp/bakeping.php
http://www.a2b.cc/setloc/bp.a2b
http://www.bitacoles.net/ping.php
http://www.bitadir.com/ping.php
http://www.blogdigger.com/RPC2
http://www.blogoole.com/ping/
http://www.blogoon.net/ping/
http://www.blogpeople.net/servlet/weblogUpdates
http://www.blogroots.com/tb_populi.blog?id=1
http://www.blogshares.com/rpc.php
http://www.blogsnow.com/ping
http://www.blogstreet.com/xrbin/xmlrpc.cgi
http://www.lasermemory.com/lsrpc/
http://www.mod-pubsub.org/kn_apps/blogchatter/ping.php
http://www.newsisfree.com/RPCCloud
http://www.newsisfree.com/xmlrpctest.php
http://www.popdex.com/addsite.php
http://www.snipsnap.org/RPC2
http://www.weblogues.com/RPC/
http://xmlrpc.blogg.de
http://xping.pubsub.com/ping/
Bueno espero que les encante el post y le encuentren utilidad, acepto trackbacks en esta entrada, aunque o todavía no recuerdo la url, creo que aparecerá por allí mas abajo.
No sabes lo que es un trackback? en la próxima les explico y hacemos nuestro propio sistema para enviarlos sin tener WP.
Saludos, blogterrier.
Post?Post
He implementado la funcion para avisar de este post, tarde solo 3 minutos en estar en Google!!
Pueden votar este post en Bitacoras.com, que tambien fue notificado por la funcion en php en: http://bitacoras.com/votar/anotacion/blogterrier.blogspot.com/2009/02/pings-xml-rpc-con-php-y-en-castellano.html