#!/usr/bin/perl # # weblogUpdatesPing # version: 1.0 # date: 2001.11.12 # author: Hans Kellner # website: http://www.hanskellner.com/ # # # A Perl subroutine that pings the "rpc.pingomatic.com" server with a # specified weblog name and url. # # Copyright (C) 2001 Hans Kellner. # # Note: Be sure to set the weblog name and url variables below. # # Specification: "http://www.xmlrpc.com/weblogsCom". # Directory: "http://www.weblogs.com/" # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # use IO::Socket qw(:DEFAULT :crlf); # The name and url of your Weblog. # For example: # $weblog_name = "Go Mountain Biking!"; # $weblog_url = "http://www.gomtb.com/"; $weblog_name = ""; $weblog_url = ""; # # Pings the "rpc.weblogs.com" server with a Weblog name and url. # See the specification at "http://www.xmlrpc.com/weblogsCom". # # usage: weblogUpdatesPing( name, url ); # name A string containing a descriptive name of your weblog. # url An url to your weblog. # # returns: A string formatted "(retcode) : message". # retcode A return code; 0 if success, otherwise not 0. # message A string message describing success or failure. # sub weblogUpdatesPing($$) { my $name = shift; my $url = shift; if ( !$name || !$url ) { return "(-1) : Invalid weblog name or url. Please set both."; } my $ret = "(-1) : Unknown error."; # holds our return value # This is the xml-rpc request my $pingStr = "" . "" . " weblogUpdates.ping" . " " . " $name" . " $url" . " " . ""; # Connect to the weblogs server my $remote = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "rpc.pingomatic.com", PeerPort => "http(80)" ); if ( $remote ) { $remote->autoflush(1); # No buffering # Send the ping print $remote "POST /RPC2 HTTP/1.0$CRLF"; print $remote "User-Agent: Greymatter weblogUpdatesPing tool$CRLF"; print $remote "Host: rpc.pingomatic.com$CRLF"; print $remote "Content-Type: text/xml$CRLF"; print $remote "Content-length: " . length($pingStr) . "$CRLF$CRLF"; print $remote $pingStr; # Read the response $sockResp = ""; while ( <$remote> ) { $sockResp = $sockResp . $_; } close $remote; # Close the socket # The response is in XML. Retrieve the return code and message. $retCode = $sockResp; $retMsg = $sockResp; # Strip out the XML up to and after the flerror code. $retCode =~ s/.*//si; $retCode =~ s/<\/boolean>.*//si; # Strip out the XML up to and after the message. $retMsg =~ s/.*<\/boolean>//si; $retMsg =~ s/.*//si; $retMsg =~ s/<\/value>.*//si; $ret = "($retCode) : $retMsg"; } else { $ret = "(-1) : Cannot connect to http daemon on 'rpc.pingomatic.com'"; } return $ret; } print "Content-Type: text/html\n\n"; # Ping the server. print "\nPinging rpc.pingomatic.com for weblog \"$weblog_name\" at \"$weblog_url\"\n\n"; $response = weblogUpdatesPing( $weblog_name, $weblog_url ); print "$response\n\n";