2009-03-01
ACBC - カスタマイズ性の向上 その2
Amazon Cross Book Checkのアップデート内容に関するメモの続きです。昨日の記事ではSITEINFOの拡張に関する話でしたが、今日はAfter actionという機能について書きます。
概要
After actionは、ACBCで得られたデータを再利用する拡張機能を書きやすくするための仕組みです。After actionに定義した処理は、その名の通り、ACBCの本来の機能である外部サイトのチェックが終了したあとに実行されます。
デフォルトでは、ACBCで調べた情報をまとめてCSV形式で出力するAfter actionが登録してあり、チェックが終了するとユーザスクリプトコマンドに「ACBC - csv」というコマンドが追加されます。
After actionは、ソース的にはスタイルシートの下あたりに定義してあります。
var AFTER_ACTION = [ function(acbc){ GM_registerMenuCommand("ACBC - csv", function(){ var data = []; var header = [""]; SITEINFO.forEach(function(info){ header.push(info.label); }); data.push(header); acbc.items.forEach(function(item){ var row = [item.title]; item.checkers.forEach(function(checker){ row.push(checker.content.replace(",", "")); }); data.push(row); }); openCSV(convArray2CSV(data)); }) }, ]
書き方
After actionは配列になっているので、好きなだけ関数を追加することができます。取れる引数はひとつで、ACBCというオブジェクトです。ACBCはスクリプト全体のハンドリングを行っているオブジェクトで、すべてのItemオブジェクトへの参照を配列として保持しています。Itemオブジェクトや、その子であるCheckerオブジェクトについての詳細は、昨日載せたイメージ図も参照してください。
また、After actionの実行タイミングは「すべてのアイテムのチェックが開始された時点」であり、「すべての情報のロードが完了した時点」ではないという点に注意して下さい。このへんは、今のところかなりいい加減に書いています。
サンプル
サンプルとして、昨日SITEINFOを書いた名古屋大学中央図書館のための、特別なCSVを出力するAfter actionを定義してみます。
function(acbc){
// 省略
},
function(acbc){
GM_registerMenuCommand("ACBC - CSV4NU", function(){
var data = [];
var header = ["タイトル", "所蔵場所", "請求記号"];
data.push(header);
acbc.items.forEach(function(item){
var checker = item.checkers[0];
if (!checker.status) return;
var c = checker.content.split(" ");
var id = c.pop();
var row = [item.title, c.join(" "), id];
data.push(row);
});
openCSV(convArray2CSV(data));
})
},
]
これで、チェック終了後に「ACBC - CSV4NU」というコマンドが追加されます。ほしい物リストを開いてコマンドを実行後、表示されたテキストを適当なエディタにコピペして、シフトJISで保存して、エクセルで開くとこんな感じです。
やった!あとはこれを印刷して図書館に持って行くだけです。AutoPagerizeと併用すると更にいい感じになります。
enjoy! ←いってみたかった

