Blogと掲示板の連携

ん~、たいしたことをやっているわけではないけど、ちょっと試行錯誤もしたから、公開しておきますわ。

メインの用途は、こっちのサイトで掲示板の投稿状況をある程度動的に知らせたい、という要求から出たものです。

必要なもの:

  • Movable TypeなどのCMS
  • (SS)C-BOARD
    • RSS形式で投稿情報を出力できる掲示板スクリプトだったので。管理機能がWebインターフェースを持っているのも、ポイント高し。
    • バージョンは、3.5.4を利用中。
  • RNA
    • RSSベースのアンテナ
    • バージョンは、1.9.2。

とりあえず、(SS)C-BOARDとRNAのインストールとか使い方などは、省略。
で、


  • MovableTypeのテンプレートにRNAで指定されるJavaScriptを埋め込んで、RNAで取得したサイトの更新状況を表示できるようにする。
  • 自作スクリプトを定期的に実行。
    • http://www.example.com/cgi-bin/c-board.cgi?cmd=rssにアクセスして、掲示板の更新状況を、rdf形式ファイルに保存。
    • rdfファイルの文字コードをnkfで変換。
    • 日付のフォーマットを一部変更。
    • RNAにpingして、rdfファイルを取り込み。
  • Blogにアクセスすると、掲示板の更新状況がわかる。

という感じで、動かしています。
実際には余分なことやってる可能性はありますけどね。

自作スクリプトは、LWP:Simpleを使っているので、こんな感じ。実際に使うのであればURLとかディレクトリとかは、適宜読み替えてください。

#!/bin/sh
/usr/bin/perl -MLWP::Simple -e 'getprint "http://www.example.com/cgi-bin/BBS/c-board.cgi?cmd=rss";' > $WORK_DIR/index.rdf
/usr/bin/perl -pi.bak -e 's/Shift_JIS/UTF-8/g;s/\([A-Za-z]*\)\s/T/g' $WORK_DIR/index.rdf
/bin/rm $WORK_DIR/*.bak

あとは、このスクリプトと/usr/bin/perl -MLWP::Simple -e 'getprint "http://www.example.com/cgi-bin/rna/rna-ping.cgi";'てなコマンドをcronで定期実行させれば、OK。
RNAにpingを打つのは上のスクリプトの中に書いておいてもいいね。

あと、(SS)C-BOARDのcmd/rss.plをそのまま使うと、RNA側に正しくBBSへの投稿時間が引き渡されないので、手を入れてあります。

--- /home/soukaku/c-board354.orig/cmd/rss.pl    2003-06-17 12:00:00.000000000 +0900
+++ cmd/rss.pl  2004-10-20 16:47:57.000000000 +0900
@@ -40,16 +40,20 @@
                if ($CNF::view{'page'}{'rss'}{'mode'}) {
                        print <<"__XML__";
         <item>
-         <title>$MSG{'subject'} by $MSG{'name'} -$MSG{'date'}-</title>
+         <title>$MSG{'subject'}</title>
          <link>$CNF::place{'this'}{'url'}?cmd=one;no=$MSG{'no'};id=$::FORM{'id'}</link>
+         <dc:creator>$MSG{'name'}</dc:creator>
+         <dc:date>$MSG{'date'}+09:00</dc:date>
         </item>
 __XML__
                }
                else {
                        print <<"__XML__";
         <item>
-         <title>$MSG{'subject'} by $MSG{'name'} -$MSG{'date'}-</title>
+         <title>$MSG{'subject'}</title>
          <link>$CNF::place{'this'}{'url'}?cmd=ntr;tree=$MSG{'no'};id=$::FORM{'id'}</link>
+         <dc:creator>$MSG{'name'}</dc:creator>
+         <dc:date>$MSG{'date'}+09:00</dc:date>
         </item>
 __XML__
                }

cmb/rss.plも、もう少し手を入れる部分があると思うんだけど、cmd/psn.plに手を入れれば投稿と同時にrdfファイル生成→RNAにpingまで出来そうなのは判ってるんだけどね~。

トラックバック(0)

コメントする