今日のページを開くGAS
リンクを踏むと、今日のページへのリンクボタンを生成するウェブアプリ
まだ今日のページが存在しない(ページに日付タグがない)なら作成し、存在するなら遷移する
https://gyazo.com/a85f7cb1f0932c551b891879c7e553ea
URLの末尾に?projectName=...としてプロジェクトを指定できる
一旦リンクを表示するページを経由している
/icons/クラッカー.iconyosider.icon
コード
code:main.gs(js)
function getDate(i) {
const d = new Date();
d.setDate(d.getDate() + i);
return [${d.getFullYear()}, ${d.getMonth() + 1}, ${d.getDate()}];
}
function getUrl(projectName) {
const today = getDate(0);
const prev = getDate(-1);
const next = getDate(1);
const title = encodeURIComponent(${today[0]}/${today[1]}/${today[2]});
let url = https://scrapbox.io/${projectName}/${title};
const endpoint = https://scrapbox.io/api/pages/${encodeURIComponent(projectName)}/${title};
const dateTag = [${prev[0]}/${prev[1]}/${prev[2]}] -> [${today[0]}/${today[1]}]/${today[2]} -> [${next[0]}/${next[1]}/${next[2]}];
const res = UrlFetchApp.fetch(endpoint, {"muteHttpExceptions": true});
const json = JSON.parse(res.getContentText());
if (!json.lines || json.lines.every(line => !line.text.includes(dateTag))) {
// 日付タグが存在しない
const body = encodeURIComponent(
'\n'.repeat(6) // 書く場所
+ dateTag // 日付タグ
+ '\n' // 末尾に改行
);
url += ?body=${body};
}
console.log(url);
return url;
}
function doGet(e) {
const url = getUrl(e.parameter.projectName);
console.log(e.parameter.projectName);
console.log(url);
const html = HtmlService.createTemplateFromFile('index');
html.btn =
`<div class='container'>
<a href='${url}' class='btn'>今日のページ</a>
</div>\n`;
const output = html.evaluate();
console.log(output.getContent());
return output;
}
cf.
code:index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<?!= HtmlService.createHtmlOutputFromFile('css').getContent(); ?>
</head>
<body>
<?!= btn ?>
</body>
</html>
code:css.html(css)
<style>
.container {
font-family: 'メイリオ', Meiryo, "Yu Gothic", YuGothic, Verdana, 'Hiragino Kaku Gothic ProN','Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', sans-serif;
text-align: center;
padding-top: 40px;
}
.btn {
display: inline-block;
max-width: 180px;
text-align: left;
font-size: 16px;
text-decoration: none;
font-weight: bold;
padding: 8px 16px 8px 32px;
border-radius: 4px;
position: relative;
}
.btn:before {
font-family: "FontAwesome";
content: "\f040";
position: absolute;
left: 16px;
top: 50%;
margin-top: -8px;
}
.btn:hover {
opacity: 0.8;
}
</style>
code:appsscript.json
{
"timeZone": "Asia/Tokyo",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"webapp": {
"executeAs": "USER_DEPLOYING",
"access": "ANYONE_ANONYMOUS"
}
}