Upgrade to Pro — share decks privately, control downloads, hide ads and more …

蔵書管理アプリを作っています

 蔵書管理アプリを作っています

Hamamatsu.js 2019/3/22
Mobile Act Nagoya 2019/4/12

Tiny Mouse

March 22, 2019
Tweet

More Decks by Tiny Mouse

Other Decks in Technology

Transcript

  1. n @tinymouse_jp n SI 企業の SE n 日曜プログラマ n 二児の父

    n 静岡県浜松市出身 n 東京都品川区在住。名古屋市在住。 n Windows 愛用。iPhone Android スマホ n Android の会浜松支部、よちよち Android の会、 Hamamatsu.js Tiny Mouse 自己紹介
  2. Google Apps Script n Google が提供 n JavaScript ベースのスクリプト言語 n

    クラウド環境で開発し実行できる n Google Spreadsheet などを操作するオブジェクトが用 意されている n Google ドキュメントの変更などのイベント、予め指定さ れたスケジュール、外部からの指示などで実行できる
  3. スプレッドシートにデータを追加する var header = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('header'); var columns = header.getValues()[0]; var

    sheet = header.getSheet(); var index = cell.getRow() - header.getRow(); if (!info.uuid) { info.uuid = Utilities.getUuid(); } for (prop in info) { if (columns.indexOf(prop) < 0) continue; header.getCell(1, 1).offset(index, columns.indexOf(prop)).setValue(info[prop]); }
  4. ISBN から書籍情報を取得する var url = 'http://iss.ndl.go.jp/api/opensearch?isbn=' + isbn; var info

    = {}; try { var response = UrlFetchApp.fetch(url); if (!response) { return null; } var xml = XmlService.parse(response.getContentText()); if (!xml) { return null; } var items = xml.getRootElement().getChildren("channel")[0].getChildren("item"); info.jan = isbn; if (items.length == 0) { return null; } items.forEach(function(item){ var title = item.getChildText("title", namespaceDc); var creators = item.getChildren("creator", namespaceDc);
  5. ISBN から書籍情報を取得する l 国立国会図書館のデータベースサービス →CD や DVD の情報が登録されていない l 楽天ブックスのデータベースサービス

    →登録して API キーを貰う必要あり l Amazon の検索ページ →スクレイピングする。やりすぎるとブロックされる
  6. POST メソッドを受けてデータ処理する function doPost(e) { // 指定されたJANコードを取得 var jan =

    e.parameters.jan[0]; // 入力されたJANコードから情報を取得 var info = getInfo(jan); // 指定された「置場」をセット info.location = e.parameters.location[0]; // 取得した情報をシートの最終行にセット addInfo(info); // 取得した情報をJSONデータで返信 return ContentService.createTextOutput(JSON.stringify({ result: "info added", jan: jan, info: info })).setMimeType(ContentService.MimeType.JSON);
  7. スプレッドシートからデータを取得する var header = SpreadsheetApp.getActiveSpreadsheet().getRangeByName("header"); var columns = header.getValues()[0]; var

    sheet = header.getSheet(); var range = sheet.getRange(header.getRow() + 1, header.getColumn(), sheet.getLastRow() - header.getRow(), header.getLastColumn() - header.getColumn() + 1); var values = range.getValues(); var found = values.filter(function(element, index, array) { return element.some(function(element, index, array) { return (element.toString().toLowerCase().indexOf(keyword.toLowerCase()) > -1); }); }); var result = []; found.forEach(function(item){ var buf = {}; for (var n = 0; n < columns.length && n < item.length; n++) { buf[columns[n]] = item[n]; } result.push(buf); });
  8. GET メソッドを受けて値を返す function doGet(e) { // 指定されたキーワードを取得 var keyword =

    e.parameters.keyword[0]; // 指定したキーワードでシートから情報を検索 var infos = findInfos(keyword); if (!infos) { return ContentService.createTextOutput(JSON.stringify({ result:"no info", keyword:keyword })).setMimeType(ContentService.MimeType.JSON); } // 取得した情報をJSONデータで返信 return ContentService.createTextOutput(JSON.stringify({ result:"info found", keyword:keyword, infos:infos })).setMimeType(ContentService.MimeType.JSON); }