LimechatでRSSを取得し新しいエントリーのみを書き込むスクリプト

 Limechat2には、最近新しくスクリプト機能としてjavascriptが扱えるようになりました。そこで、RSSが取得できるんじゃないかと思い、Microsoft.XMLDOMを使用してRSSを読み込み、新しい記事のみを抽出しチャンネルに自動で書き込むスクリプトを書いてみました。

 既に他の誰かが同じようなスクリプトを作っているとはおもいますが、ぐぐってもでなかったので書いてみたってのが本音ですが、他力本願ですねw

 ちなみに、UTF-8で保存しないといけないようです。

//////////////////////////////////////////////////////////////var url=""; //RSSのURLvar channel=""; //RSSエントリーを書き込むチャンネルvar inttime=1800000; //RSSをチェックする間隔(1800000:30分)//////////////////////////////////////////////////////////////var elm_en_old;var max_old;function rssload(flag){var req = new ActiveXObject("Microsoft.XMLDOM");
req.async=false;do{req.load(url);}while(req.innerHTML == "")var root = req.documentElement;var elm_en = req.getElementsByTagName("title");var elm_link = req.getElementsByTagName("link");var hit;var max = elm_en.length;if (flag != 1) {for (var i=0; i<max; i++) {hit=0;for (var ii=0; ii<max_old; ii++) {if (elm_en.item(i).firstChild.nodeValue == elm_en_old.item(ii).firstChild.nodeValue) {hit=1;}}//全てのエントリーに当てはまらなければ(hit==0)、新しいエントリーとし、書き込むif (hit == 0) {send(channel, "" + elm_en.item(i).firstChild.nodeValue + " " + elm_link.item(i).firstChild.nodeValue);}}}max_old = max;
elm_en_old = elm_en;}var tid;function event::onConnect(){rssload(1);
tid=setInterval(rssload,inttime);}function event::onLoad(){rssload(1);
tid=setInterval(rssload,inttime);}function event::onUnload(){clearInterval(tid);}function event::onDisconnect(){clearInterval(tid);}

#追記(2009.2.15)

 スリープモード、休止モードを使用したり、サーバーの接続を切断した場合に再接続するときに比較用のフィードが保持されている変数を初期化するように修正。

#追記(2009.3.11)

 正常に取得できなかった場合処理を繰り返すように修正

 ページが更新しているかどうかを調べるためのコードを入れていないので、間隔を置いて受信することをお勧めします。

タグ limechat2 RSS スクリプト フィード Microsoft.XMLDOM

カテゴリー: IRC

コミュニティとしてのIRC

 インターネットもCGIを利用したサービスからajax技術やネットワークプロトコルの革新などによりコミュニティとしてのインターネットも大きく変わってきた。

 最近では、WindoowsMessenger、YahooMessengerやSkypeなどのIMソフトウェアによるチャットや会話が普及し、ウェブ上でも、mixiをはじめとするSNSも、IMと同様コミュニティとしての場がつくられるようになっていった。

 以前、CGIによるチャットや掲示板が普及していたころに、Web2.0の時代が来るのではないかといわれていたが、今思えば、いつのまにかweb2.0の時代が訪れていたのかもしれない。

 しかし、IMやSNSなど、コミュニティとしては大きく発展してきているようにも思えるが、私にはコミュニティとしてのインターネットのあり方にまだまだ欠点が大きく残っているのではないか思う。

 SNSは、不特定多数の人に対して意見を交換できるという利点があるが、リアルタイム性には欠けている。“意見を交換”はできるは、その量は実際の、流れのある会話と比べると明らかに薄いものになってしまう。

 逆に、IMでは特定の人に対して意見をリアルタイムに交換できるという利点がある。だが、これでは、幅広い不特定の人に対してたくさんの情報を交換することが出来ない。

 このように、利用するサービスによって人との付き合い方や、情報の交換の仕方が大きく変わってくる。それぞれがWeb2.0の新しいコミュニティの形とも思えるが、互いに欠点がある。これらの欠点を埋めるとしたら、どんなものがあるのか、私には、それこそIRCというプロトコルなのではないかとおもう。

 IRCは、チャンネルという部屋に不特定多数の人に対してチャットでリアルタイムに意見を交換することが可能である。

 チャンネルは誰でも自由に作成する事ができるので、ひとつサーバーさえあれば、自分の目的のチャンネルを作れば、そのチャンネルのトピックに合わせ、会話を展開することが可能になる。

 IRCは、インターネットが普及する以前から存在するプロトコルで、IRCなんて古いなんていろいろといわれているが、今最も使えるインターネットサービスなのではないだろうか。

 IMで、ローカルで忙しいのに呼びだたされるのか、SNSでの書き込みに対し、新しい返事が返ってくるまで一日待つのか、IRCで、大量に表示されている過去ログを読み、リアルタイムに進行されている会話に参加するのか、どれが一番情報量が多く、濃いのかということは、一目瞭然。

もっとIRCは評価されるべき。

カテゴリー: IRC

IRCD-HybridをWindowsでリンクさせるにはinet_atonをまずなんとかしないといけない

なんだかこんなことが前にもあったようなきがするんですが、デジャヴ?

デジャヴを感じると、なんだか、もしかしたらこの時間がまた再び繰り返されてループしているんじゃないかと感じたり感じなかったり。

そんなことはどうでもいいですが、IRCD-Hybridでは、Windowsではうまく動作しないinet_atonを結構多用しているようです。このせいで、ホスト名(aaa.yy.jpなど)を指定すると、値がNullになってしまったようなのです。

inet_atonが使われている箇所をinet_addrを使うことで解決できそうなのですが、ここでいったん作業を凍結しようかとおもう。

ほんとに時間を無駄にしたというか、なんというか、、、そこまでやるならUNIX環境でやれって話ですな。

カテゴリー: IRC

IRCD-HyBrid win32 コンパイルエラー

f:id:As_hsp:20090126194143g:image

配布されてある、IRCD-Hybridのソース。マルチプラットフォーム対応で、環境に合わせて自動的にコンパイルできるが、途中でエラーが発生する。

どうやら、LINUXのヘッダファイルが使用されているようで、それがwin版でも使用されていて正常にパッチできなくなっているようです。

解決するにはcygwinに同様のヘッダファイルが含まれているので、cygwinをインストールして、usrフォルダに含まれているヘッダファイルを利用します。

.\fileio.c(47) : error C2065: ‘O_CREAT’ : 定義されていない識別子です。

.\fileio.c(47) : error C2065: ‘O_TRUNC’ : 定義されていない識別子です。

.\fileio.c(47) : error C2065: ‘O_APPEND’ : 定義されていない識別子です。

.\fileio.c(49) : error C2065: ‘O_RDONLY’ : 定義されていない識別子です。

#追記

無料で公開されているBCC5.5を使えば、へんなエラーも出ることなくすんなりコンパイルできるようです。

これぞ骨折り損の草臥れもうけですね。。。

カテゴリー: IRC

IRCD-Hybrid サーバー間のリンクでDNSを使うと文字化けが起きる

 IRCサーバーソフトウェア、IRCD-Hybridには、Windowsでも動作するようにコンパイル済みバイナリファイルの状態で提供されています。

 そのIRCDでは、サーバー間のリンク(connectブロック)を行う場合に、DNSを介したアドレス(xxx.yyy.zz.jpなど)をホスト名に割り当てると、動作時にDNSから渡されたIPが文字化けするようです。

 Linux用のサーバーではこの文字化けが発生していません。Win32版はソースも公開されているので(ライセンスはGPL)自分でバグを修正し(ソース版は問題ないかも?)コンパイルする必要がありそうです。

 また、サーバー間でリンクを行う場合serverinfoブロックのsidのパラメータはそれぞれ異なる3つのキャラクターコードにする必要があります。