Landscape トップページ | < 前の日 2004-02-14 2004-02-15 次の日 2004-02-16 >

Landscape - エンジニアのメモ 2004-02-15

weblogUpdates.ping で更新を通知するRubyスクリプト


* weblogUpdates.ping で更新を通知するRubyスクリプト

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Ruby]

RSS やサイトの更新を通知する、weblogUpdates.ping を送ってみることにする。
でも、送り方がわからない。MovableType などであれば簡単に送れるらしいが、使ってない場合はどうしたら良いんだろう? そもそも、どこに ping したら良いかもわからない。そのうえ、この記事を書いてる今現在、何で weblogUpdates.ping を送りたくなったかも忘れてしまった。送りたいと思ったのが今朝。遊びに行って、帰ってきてさあやるぞと取りかかった夜頃にはすべて忘れてしまっている。なんかやる気のない日曜の夜。

まずは Google で weblogUpdates.ping を検索。全体のヒット数は少なめだが、名の売れたサイトがいくつかヒットした。

- どこに weblogUpdates.ping を送るか

hail2u.net - Weblog - weblogUpdates pingを受け付けているサーバー
http://hail2u.net/blog/blog/weblogupdates_ping_servers.html

とりあえず紹介されてた全部のサイトに送ってみることにする。あ、Bullkfeeds は 2003-12-23 に書いた HTTP GET で更新を通知する方法を運用済みなので今回は除外。Myblog japan もユーザ登録が大変そうなので除外。今回送るのは以下の7つ。

Weblogs.Com http://rpc.weblogs.com/RPC2
blo.gs http://ping.blo.gs/
BlogRolling http://rpc.blogrolling.com/pinger/
Technorati http://rpc.technorati.com/rpc/ping
ping.bloggers.jp http://ping.bloggers.jp/rpc/
ココログ http://ping.cocolog-nifty.com/xmlrpc
BlogPeople http://www.blogpeople.net/servlet/weblogUpdates

どこに送るかはこれで決まった。あとは、どうやって送るかだ。

- どうやって送るか

先ほどの Google で weblogUpdates.ping を検索した結果を眺めていると、Perl で ping を送るクライアントの実装例があった。

Weblogs.Com Ping の Perl による実装
http://naoya.dyndns.org/~naoya/mt/archives/000423.html

やったー、コードを書く手間が省けたーと喜んだのもつかの間。module インストール時に以下のエラーが出てうまくいかない。長いけどエラーメッセージなので書いておこう。
  CPAN.pm: Going to build M/MS/MSERGEANT/XML-Parser-2.34.tar.gz

Note (probably harmless): No library found for -lexpat

Expat must be installed prior to building XML::Parser and I can't find
it in the standard library directories. You can download expat from:

http://sourceforge.net/projects/expat/

If expat is installed, but in a non-standard directory, then use the
following options to Makefile.PL:

    EXPATLIBPATH=...  To set the directory in which to find libexpat

    EXPATINCPATH=...  To set the directory in which to find expat.h

For example:

    perl Makefile.PL EXPATLIBPATH=/home/me/lib EXPATINCPATH=/home/me/include

Note that if you build against a shareable library in a non-standard location
you may (on some platforms) also have to set your LD_LIBRARY_PATH environment
variable at run time for perl to find the library.

Running make test
  Make had some problems, maybe interrupted? Won't test
Running make install
  Make had some problems, maybe interrupted? Won't install
Running make for K/KM/KMACLEOD/Frontier-RPC-0.06.tar.gz
  Is already unwrapped into directory /home/aqua/.cpan/build/Frontier-RPC-0.06

  CPAN.pm: Going to build K/KM/KMACLEOD/Frontier-RPC-0.06.tar.gz

cp lib/Frontier/Daemon.pm blib/lib/Frontier/Daemon.pm
cp lib/Frontier/Client.pm blib/lib/Frontier/Client.pm
cp lib/Frontier/RPC2.pm blib/lib/Frontier/RPC2.pm
  /usr/bin/make  -- OK
Running make test
/usr/bin/perl.exe "-Iblib/lib" "-Iblib/arch" test.pl
1..1
Can't locate XML/Parser.pm in @INC (@INC contains: blib/lib blib/arch /usr/lib/perl5/5.8.2/cygwin-thread-multi-64int /usr/lib/perl5/5.8.2 /usr/lib/perl5/site_perl/5.8.2/cygwin-thread-multi-64int /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl .) at blib/lib/Frontier/RPC2.pm line 14.
BEGIN failed--compilation aborted at blib/lib/Frontier/RPC2.pm line 14.
Compilation failed in require at blib/lib/Frontier/Client.pm line 14.
BEGIN failed--compilation aborted at blib/lib/Frontier/Client.pm line 14.
Compilation failed in require at test.pl line 19.
BEGIN failed--compilation aborted at test.pl line 19.
not ok 1
make: *** [test_dynamic] Error 2
  /usr/bin/make test -- NOT OK
Running make install
  make test had returned bad status, won't install without force

Frontier::Client をインストールしようとしたら XML-Parser に依存していたのでまずは XML-Parser をインストールしようとしたら lexpat というライブラリが無くてビルドができないとのこと。lexpat は SourceForge からダウンロードしてインストールしなければならないらしい。あーもう大変だなあ。perl 以外の方法はないかなあと再び Google で weblogUpdates.ping を検索した結果を見ると、Ruby での実装例があった。やったー。

weblogUpdate の Ruby 実装 : スタンドアローンサーバ版
http://dontstopmusic.no-ip.org/diary/20030911.html#p04

Ruby なら 1.8.1 をインストール済みだし、たいていのライブラリが標準でインストールされるので手間が省けるはず。サンプルを動かしたら問題なく動作したので、ちょっと修正して以下のようにした。もらってきたコードほとんどそのままだけど。

- weblogUpdates.ping を送る Ruby スクリプト

Ruby 1.8.1 + cygwin で動作を確認。

#!/usr/bin/env ruby
require 'xmlrpc/client'
require 'uri'

name = "Landscape - エンジニアのメモ"
url  = "http://sonic64.com/"

ping_uri = ARGV.shift
uri = URI.parse(ping_uri)
connection = XMLRPC::Client.new(uri.host, uri.path, uri.port)
result =  connection.call("weblogUpdates.ping", name, url)
puts "message: " + uri.host + ": " + result["message"]

ping 送信先だけは引数で指定できるようにした。本当はウェブサイト名や url も引数で指定できるようにしようと思ったのだが、cygwin のシェルから2バイト文字列を送るとトラブルの元になりそうだったのでハードコーディングしてしまった。また、ruby スクリプト自体も念のため UTF-8 改行コード LF で保存した。UTF-8 はもしかしたら逆にトラブルの元になるかもしれないが、動かしたら問題なかったのでそのまま使うことにした。

あとはこれを
$ ~/script/update_ping.rb http://rpc.weblogs.com/RPC2
などとして ping するだけだ。

追記。
2004-02-21 に「api.my.yahoo.com に weblogUpdates.ping すると Wrong content-type エラー」という記事を書いた。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。