ここでは、オリジナルに実装しない(※)機能への改造方法をご紹介します。
(※)今後実装するかどうかは、その時々の環境を考慮して柔軟に対応します。
当サイトでは、一般のレンタルサーバの利用者が設置するCGIプログラムを目指していますので、
プロバイダやサーバ管理者にモジュールのインストール等の依頼が必要なものについては、
個別の問題と考え、改造方法を別途ご紹介するにとどめておきたいと思います。
■Googleを活用してブログ内検索
ブログのCGIのアドレスが http://www.rescue.ne.jp/cgi/blog/sample/blog.cgi だとした場合、
たとえば次のように base.cgi (テンプレートファイル) の任意の場所に書いておくと、
特別な検索システムを導入しなくても簡単にブログ内検索が出来るようになります。
(サンプルに施工済み)
<!-- SiteSearch Google -->
<form method="get" action="http://www.google.co.jp/custom" target="_top">
<small><font color=#ffffff>Powered by </font><a href="http://www.google.com/" class=left>Google</a></small><br>
<input type="hidden" name="hq" value="inurl:www.rescue.ne.jp/cgi/blog/sample"> ( http:// は省くことに注意)
<input type="hidden" name="ANDOR" value="and">
<input type="text" name="q" size="6"> (入力域)
<input type="submit" name="sa" value="ブログ内検索"> (ボタン)
</form>
<!-- SiteSearch Google -->
(参考文献)
http://www.google.co.jp/intl/ja/searchcode.html
http://www.hyuki.com/netserv/google.html
■更新ping機能
▽アレンジャー:フジキチ
▽必要なモジュール:XMLRPC::Lite(SOAP-Lite)
ダウンロード先 → CPAN - XMLRPC/Lite.pm
▽ベース:bloq v2.21
下記行番号はこれを対象にしているので、これより高いバージョンでは位置が異なっている場合がありますのでご注意ください。
なお、これよりも前のバージョンは解説の対象にしません。
- Jcodeモジュールチェックルーチンの後(34行)に挿入
eval 'use Jcode;';
if ($@) { &error("エラー","Jcodeモジュールが見つかりません.",・・・(略)
else {
$test = 'あいうおえ';
Jcode::convert( \$test, 'utf8' );
@result = getcode( \$test );
if ($result[0] ne 'utf8') { &error("エラー","JcodeモジュールはUTF-8エンコードに・・・(略)
}
#更新pingモジュールチェック (by Fujiyoshi)
$no_updateping = 0;
eval 'use XMLRPC::Lite;'; if ($@) { $no_updateping = 1; }
|
[解説]
XMLRPC::Lite モジュールは、XML-RPCプロトコルを実装するモジュールです。(トラックバックモジュールと似たような仲間です)
こちらのモジュールは、自由にモジュールを組み込めるサーバをお持ちの方でないとインストールは難しいと思います。
また、それなりのスキルをお持ちの方がチャレンジすることを推奨します。
XMLRPC::Liteモジュールの呼び出しは、
-> proxy('URL')
※更新を通知するURLを設定する
-> call('※1',※2,※3)
※1 送信するXMLの形式
※2 更新されたブログの名前(UTF8形式)
※3 更新されたURL(自分のブログURL)
-> result
結果が帰ってきますが、このサブルーチンでは無視しています(失敗しても教えてくれません)。
※注 説明はかなり割愛しています。もっと深く知りたい方は、XMLRPC::Lite等で検索してみてください。
- Write()サブルーチン内の最後(1434行と1435行の間)と外に挿入
sub Write {
(略)
if ($blogFileName =~ /^(\d\d\d\d\d\d)(\d+)/) { $view_blog_month = $1; }
if ( !$no_updateping ) { &update_ping; } # 更新ping送信 (by fujiyoshi)
}
sub update_ping { # 更新ping送信部 (by Fujiyoshi)
Jcode::convert( \$blog_title, 'utf8' );
foreach (@updateping_servers) {
my $result = eval {
XMLRPC::Lite
->proxy($_)
->call('weblogUpdates.ping',$blog_title,$updateping_url)
->result;
}
}
}
|
- 設定ファイル "setup.cgi" 中に
# 更新pingサーバ群 (By Fujiyoshi)
@updateping_servers = ('http://ping.bloggers.jp/rpc/','http://blog.goo.ne.jp/XMLRPC','http://ping.myblog.jp/');
# pingサーバへ送るこちらのアドレス (http://xxx.xxx.xxx/xxx/ で終わるらしい?)
$updateping_url = 'http://ブログのアドレス/';
|
[更新pingサーバを探す方法]
google等の検索エンジンで、「更新pingサーバ」で検索すると、色々なホームページで紹介されているサーバ名が出てきます。
色々なサーバがありますので、いくつかを選んで @updateping_servers に設定します。
(あまりたくさんの更新pingサーバへ送ると、ブロキューを設置しているサーバの負荷となる場合がありますので、ほどほどが良いと思います。)
- テンプレートHTML "base.cgi" の </TITLE> 後に挿入
(更新pingサーバが更新された部分を取得するための、RSSの位置を指定)
</TITLE>
<LINK href="http://ブログのアドレス/index.rdf" rel="alternate" type="application/rss+xml" title="RSS">
|
動作試験の方法
実装後、ブロキューにアクセスしてみてエラーが出ないことを確認してください。
テストの方法は、実際に記事を投稿してみるという、本番がテストとなります。
ここでは、更新pingサーバをhttp://ping.bloggers.jp/rpc/と設定したとして流れを追ってみます。
http://ping.bloggers.jp/rpc/は、更新pingを受け付けると受け付けた順にhttp://ping.bloggers.jp/でリスト表示をしています。
なので、自分が投稿してから、このリストに自分のブログが掲載されれば更新pingは成功しているという事になります。
ただ、更新pingサーバによってはリスト化されるまで多少の時間がかかったり、
混雑している場合などは更新ping自体がタイムアウトなどで受け付けられていない時もあるかもしれません
(私の示した改造ヒントでは、更新pingが成功したか失敗したかを全く考慮しておりません)。
また、base.cgiへの追加を忘れていると、せっかく更新pingを送信しても、RSSが取得できないので更新と見なしてくれない場合もあります。
簡単な流れ
- ブロキュー(改造版)が更新pingサーバへ更新pingを打つ
- 更新pingを受けた、更新pingサーバが、送信元($updateping_urlで設定)にアクセスして、RSSを取り出そうとします。
そのとき、RSSのファイル名や位置を取らせるのが、base.cgi中のLINKタグとなります。
- 更新pingサーバは、LINKタグに示されたRSSファイルを読み込みます。
- 更新pingサーバが、更新したことを確認し、リストに載せたり各種の処理(リストにしたり、検索対象にしたりと様々)を行います。
最後に
この改造についての質問などは、申し訳ありませんが受けられません。
動かなくっても、自力でなんとかできる方のみ、参考にしてみてください。(フジキチ)
■ImageMagickを利用したサムネイル機能
▽アレンジャー:ブログ庵へ
■外国からのスパムトラックバック対策
▽アレンジャー:ブログ庵へ
■画像を乱さずに表示する
▽アレンジャー:ブログ庵へ
|