Google Spreadsheetでランダムに出力するオミクジ的なサイトを作る(1)
では、Google AppScriptのHtmlService.createHtmlOutput()
を試したが、HTMLをハードコーディングするのも気持ち悪いので、HtmlService.createTemplateFromFile()
を使ってみる。
まず、テンプレを作る。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<? var data = getData(); ?>
<h1><a href="<?= data[0] ?>" target="_top"><?= data[1] ?></a></h1>
</body>
</html>
そして、今までdoGet()の中に詰め込んでたものを分割して、doGet()はcreateTemplateFromFileだけにして、データ生成はgetDataの中で行う。
function doGet() {
return HtmlService
.createTemplateFromFile('index')
.evaluate();
}
function getData(){
var spreadsheet = SpreadsheetApp.openById('シートID');
var sheet = spreadsheet.getSheetByName('list');
var lastRow = sheet.getLastRow();
var rand = Math.floor( Math.random() * lastRow ) + 1;
var url = sheet.getRange(rand,1).getValue();
var title = URLtoTitle(url);
return [url,title];
}
function URLtoTitle(url) {
var response = UrlFetchApp.fetch(url);
var myRegexp = /<title>([\s\S]*?)<\/title>/i;
var match = myRegexp.exec(response.getContentText());
var title = match[1];
title = title.replace(/(^\s+)|(\s+$)/g, "");
return(title);
}
一瞬、「このアプリケーションは、Google ではなく、別のユーザーによって作成されたものです。」という表示を消せるかな?と期待したが、結局、iframe構造は変わらないのでタイトルを設定しても反映できないがJavaScriptぐらいは使えるようになった。