[limeChat]RSS情報を定期的に読み込んで新着情報のみをぶっこぬく

( javascript )

var targetChannel = "#project";
var fileName = "projectSvnRevision.txt";
//------------------------------------
// 実行時
//------------------------------------
var ret = 0;
function event::onLoad() {
    ret = setInterval(getRssForDev, 1000 * 60 * 10); // by 10 min
    //ret = setInterval(getRssForDev, 1000 * 6); // by 1 min( for test)
}

//------------------------------------
// 時刻チェック
//------------------------------------
function getRssForDev()
{
    var lines = load_textfile_array( fileName );
    var currentRevision = parseInt( lines[0] );
    var req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                var s = req.responseText;

                // 2回のタイトル削除
                s.match(/<title>(.*)<\/title>/);
                s = RegExp.rightContext;
                s.match(/<title>(.*)<\/title>/);
                s = RegExp.rightContext;
                
                for (var i=0; i<100; i++) {
                    if (!s.match(/<title>(.*)<\/title>/)) {
                        break;
                    }
                    s = RegExp.rightContext;
                    var title = RegExp.$1;
                    
                    var ret = title.match(/(\d+):/);
                    //var revision = ret[0];
                    var revision = RegExp.$1;
                    //var revision = "";

                    s.match(/<dc:creator>(.*)<\/dc:creator>/);
                    s = RegExp.rightContext;
                    var creator = RegExp.$1;
                    
                    s.match(/<link>(.*)<\/link>/);
                    s = RegExp.rightContext;
                    var link = RegExp.$1;
                    
                    s.match(/<pubDate>(.*)<\/pubDate>/);
                    s = RegExp.rightContext;
                    var pubDate = RegExp.$1;
                    
                    // RSSの最大値を保持しておく
                    if (i == 0) {
                        maxRevision = revision;
                    }
                    
                    if (currentRevision < revision) {
                        send(targetChannel, "====================");
                        send(targetChannel, "TITLE   : " + title);
                        send(targetChannel, "CREATER : " + creator);
                        send(targetChannel, "PUBDATE : " + pubDate);
                        send(targetChannel, "LINK    : " + link);
                     }
                    else {
                        break;
                    }
                    
                }
                
                write_file_string(fileName, maxRevision);
            }
        }
    }
    // ここに読み取りたいURIを記載
    var url = 'http://hogehoge.com/rss'; 

    req.open('get', url, true);
    req.send('');
}

//--------------------------------------------
// ファイル読み込み
//--------------------------------------------
function load_textfile_array( file_name  ){
  lines = new Array();
  d_file = openFile( file_name , true );
    while ( s = d_file.readLine() ) {
      lines[lines.length] = s;
    }
  d_file.close();
  return lines;
}

//--------------------------------------------
// ファイル書き込み
//--------------------------------------------
function write_file_string( file_name, string  ){
    file = openFile( file_name , false );
    file.write(string); 
    file.truncate();
    file.close();
}

これでイけると思うよ。