Posted at

ドシロウトがマストドンボット作ってみた

More than 1 year has passed since last update.


0.初めに

私はエンジニアではないただのドシロウトです。

マストドンを利用しており、自動で通知できるボットみたいものを動かしてみたくなりました。

そこで私が一番使いやすいGoogle Apps Scriptでボットを作れないか試してみました。

なお、マストドンにアクセスするにはトークンが必要となりますが、以下のWEBサービスを利用して取得しています。


Access Token Generator for Mastodon API

https://takahashim.github.io/mastodon-access-token/



1.作ったもの

用意したのはGoogleスプレッドシートとGASのスクリプトだけです。


2.Googleスプレッドシート

分かりづらいかもしれませんが下表のように作成しました(カッコ内は列番号)

行番号
曜日(0)
投稿する文面の内容(1)

1
日曜日
投稿文面

2
月曜日
投稿文面

3
火曜日
投稿文面

4
水曜日
投稿文面

5
木曜日
投稿文面

6
金曜日
投稿文面

7
土曜日
投稿文面

曜日別に投稿文面が設定できるようにしてあります。


3.GASのスクリプト

GASのコードは以下となります。


msttou.gs

function msttou() {

// アクセストークンをスクリプトプロパティから取得
var valuex = PropertiesService.getScriptProperties().getProperty('token01');

// 投稿内容取得
var toukoux= touget();
if (toukoux == 'none') {
console.log('本日投稿なし');
return false;
};
// post用URL生成
var posturl = 'https://(マストドンのURL)/api/v1/statuses';

// POSTで送る(JSON形式)
var data = {
'access_token': valuex,
'status': toukoux
};

var options = {
'method' : 'post',
'contentType': 'application/json',
// Convert the JavaScript object to a JSON string.
'payload' : JSON.stringify(data)
};

UrlFetchApp.fetch(posturl, options);

}

function touget() {

var date = new Date();
var youbiidx = date.getDay(); /* 曜日の取得 0は日曜 */
var rtntou = 'none';
// スプレッドシート名:mstdntou の取得
var files = DriveApp.getFilesByName('mstdntou');

if (files.hasNext()) {

var spreadsheet = SpreadsheetApp.open(files.next());
// シート番号0を取得
var sheet = spreadsheet.getSheets()[0];
var var1=sheet.getDataRange().getValues();
for (var rowidx in var1) {
if (rowidx == youbiidx) {
if (var1[rowidx][1] == '通知なし') {
} else {
var rtntou = var1[rowidx][1];
};
};

};

};
return rtntou;

}



  • 関数msttouをトリガーで1日1回実行するように設定しています。


  • 一応、トークンを隠すためにスクリプトプロパティを使っています。



Class PropertiesService

https://developers.google.com/apps-script/reference/properties/properties-service



4.まとめ

マストドンでボットを使いたい人には簡単でいいと思います。

やっぱりGAS便利ですね。

以 上