2013年8月9日金曜日

GASAPIドキュメント作成プロジェクト(?)

先日、GASのAPIを抽出できないかと思って、頑張ってみたのでBlogに残す。
githubとかには公開していませんが、そんなに行数も多くないのでいいでしょう。

今の所、これと同じようなことをしているサービスがあって
+keisuke oohashiさんが作成しているI hack meというサービスで
GASの更新検出が主な目的です。

私の場合は、出版した書籍「Google Apps Scriptクイックリファレンス」にAPIの説明を書き残したものの、公務員になってしまって、激務なので、なかなか執筆時間が取れず
(教員なので、兼業する事は、許可を貰えば可能です)
執筆作業は難しいので
書籍の賞味期限が切れる前に別途、どこかに残しておきたいなーと思っているわけです。
(Driveとか、FormAppとか書籍には載っていないので…)

ということで、今のところSpreadsheetにAPIを抽出して引数と説明と注意点を書き残せたら便利だろうということで、コツコツやっていこうかと思っています。

さて、プログラムですが、foreachでメンバを抽出してそのままシートに出力しているだけです。クラスごとにSheetを分けるほうがいいだろうと思ってクラスごとにSheetを作っています。

が、量が多いので、ScriptDbに出力する方向で考えようかと思っています。
その後、Google Siteに転記かなー。

乞うご期待(あまり期待せずに生暖かく見守って下さい)

var spreadsheet;

function myFunction() {
  spreadsheet = SpreadsheetApp.openById("YOUR_SHEET_ID");
  printObject(this, "top");
}

function printObject(obj, name) {
  var apis = [];
  var sheet = createsheet(spreadsheet, name); // var sheet = spreadsheet.getSheetByName("hoge");
  for(var i in obj) {
    var typ = typeof obj[i];
    
    // APIのリストを配列に追加
    apis.push([i]);
    Logger.log(i);
    
    if(typ == "object") {
      printObject(obj[i], i);
    }
  }
  // 一括でSpreadSheetに追加
  sheet.getRange(1, 1, apis.length).setValues(apis);
}

// Sheetを取得(無ければ、Sheet追加)
function createsheet(ss, name) {
  // ss = SpreadsheetApp.create("GASAPIドキュメント");
  var sheet = ss.getSheetByName(name);
  if(sheet == null) {
    sheet = ss.insertSheet(name);
  }
  
  return sheet;
}