weblogUpdates.ping - 通称「update ping」とか「更新通知PING」とか「更新ping」とか呼ばれてるっぽい。

blog 以外のページを通知して良いんだろうか? 「RSSを配信していないページはお断り」ってことは無いよね、たぶん。更新PINGソフトウェア「ぶろっぐぴんぴん」というツールもあることだし。っていうか、このツールと同じ機能を Perl でわざわざ実装しようという話だったり。

標準仕様は Weblogs.Com XML-RPC interface らしい。

Weblogs.Com Ping の Perl による実装 : NDO::Weblog を参考にして (というかほとんどそのままパクリで) 作ってみた。

アクセス先URLは、hail2u.net - Weblog - weblogUpdates pingを受け付けているサーバー を参考にする。

blogpings.pl


#!/usr/bin/perl
 
use strict;
use warnings;
use Frontier::Client;
 
my $name = 'zurazure2';
my $url  = 'http://www.nilab.info/zurazure2/';
 
my @pingserver = (
  'http://rpc.weblogs.com/RPC2',
  'http://ping.blo.gs/',
  'http://rpc.blogrolling.com/pinger/',
  'http://rpc.technorati.com/rpc/ping',
  'http://api.my.yahoo.com/RPC2',
  'http://ping.bloggers.jp/rpc/',
  'http://ping.cocolog-nifty.com/xmlrpc',
  'http://blog.goo.ne.jp/XMLRPC',
  'http://ping.myblog.jp/',
  'http://www.blogpeople.net/servlet/weblogUpdates',
  'http://bulkfeeds.net/rpc',
  'http://ping.blogmura.jp/rpc/',
  #'http://ping.rootblog.com/rpc.php',
  #'http://ping.exblog.jp/xmlrpc',
);
 
foreach (@pingserver) {
 
  print "Pingging to $_ ...\n";
 
  my $server =
    Frontier::Client->new(
      url => $_,
      debug => 1);
 
  my $result = $server->call('weblogUpdates.ping', $name, $url);
 
  for my $key (keys %$result) {
      print $key, ": ", $result->{$key}, "\n"; 
  }
 
  print "Finished pingging to $_ ...\n";
}

Ken MacLeod / Frontier-RPC-0.07b4 をダウンロードして lib 以下のディレクトリにある Apache と Frontier を blogpings.pl 以下に設置。で、perl ./blogpings.pl な感じで実行。(perl -v: This is perl, v5.6.0 built for i586-linux)


Pingging to http://rpc.weblogs.com/RPC2 ...
---- request ----
<?xml version="1.0"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param><value><string>zurazure2</string></value></param>
<param><value><string>http://www.nilab.info/zurazure2/</string></value></param>
</params>
</methodCall>
---- response ----
<?xml version="1.0"?>
<methodResponse>
        <params>
                <param>
                </struct></value>anks for the ping.</value>
                        </param>
                </params>
        </methodResponse>
flerror: Frontier::RPC2::Boolean=SCALAR(0x81892fc)
message: Thanks for the ping.
Finished pingging to http://rpc.weblogs.com/RPC2 ...

なんだか、ちょっと情報が抜けている気がしないでもないけど…… flerror が 0 になっているとか、Thanks for the ping とか表示されればOK.

日本語を送るときはどうすればいいのかわからないので、パス。実体参照とか……

BBSの更新時にpingを送ってみるとか……更新頻度が高いとマズいから、1日1回ぐらいチェックして更新されてたらpingするとか……それより、BBSのRSS配信のほうが先か。

[参考]
Weblogs.Com changes.xml を Perl で料理する一例 : NDO::Weblog
weblogUpdate の Ruby 実装 : スタンドアローンサーバ版
weblogUpdate の Ruby 実装 : CGI 版
Don'tStopMusic(2003-09-11) - Weblogs.Com changes.xml を Ruby で料理する一例
Landscape - エンジニアのメモ - weblogUpdates.ping で更新を通知するRubyスクリプト
Bulkfeeds: Home - RSS Directory & Search

追記: 2005-05-14
CPAN を探したら WebService-weblogUpdates というモジュールを発見。モロそのままな名前(^_^;
これを使えばいいじゃん、てな話。まぁ、内部では Frontier-RPC を使っているようなので、同じか。

追記: 2005-06-11
いろいろメモ。

  • Ping送信先一覧 - 無料ブログ(Blog)用 とか参考になる。こんなにたくさん送る必要があるかどうかは疑問だけど。
  • FeedBurner を利用して RSS を生成している場合は http://ping.feedburner.com にも 更新PINGを飛ばしたほうが、RSSの更新が早くなるから良い。
  • はてなRSS に RSSフィードを登録されている可能性を考慮して http://r.hatena.ne.jp/rpc にも 更新PINGを飛ばしたほうが、RSSの更新が早くなるから良い。

tags: zlashdot Weblog Perl Weblog

Posted by NI-Lab. (@nilab)