Last active
April 14, 2021 23:18
-
-
Save hidao80/3b1f01f023a3fe7560d3933d36548be5 to your computer and use it in GitHub Desktop.
時分指定Tootスクリプト(Google Spreadsheet Script使用)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 時分指定tootスクリプト | |
* | |
* Google Spreadsheetのスクリプトとして設置する、時分指定でtootするためのスクリプト。 | |
* このスクリプトのsetTrigger関数を日ごとに起動するトリガーに指定して利用する。 | |
* | |
* Spreadsheetの2行目2列目からn行目までに空行を含まずtootしたいメッセージを入力しておくと、 | |
* 上から順にtootし、一番下のメッセージまでTootしたら、一番上のメッセージに戻って | |
* tootを続ける。 | |
* | |
* アクセストークンとインスタンスのAPI URLはプロジェクトのプロパティに設定しておく。 | |
* ソースコードとトークンおよびインスタンスを切り離すことにより、スクリプトの再利用性が高まった。 | |
* | |
* 時分指定tootスクリプト © 森下 航丞(@hidao80)クリエイティブ・コモンズ・ライセンス(表示4.0 国際)https://creativecommons.org/licenses/by/4.0/ | |
*/ | |
/** | |
* mastodonに投稿する | |
* | |
* @param string message 投稿内容 | |
* @param string visibility 投稿スコープ | |
* @param string token Mastodon API トークン | |
* @param string url Mastodon RESTful API URL(statuses) | |
*/ | |
function postUpdateToots(message,visibility,token,url){ | |
var options = | |
{ | |
"method" : "post", | |
"payload" : "status=" + message + "&visibility=" + visibility, | |
"headers" : {"Authorization" : "Bearer "+ token} | |
}; | |
UrlFetchApp.fetch(url,options); | |
} | |
/** | |
* Mastodonのアカウントにメッセージを投稿する | |
* | |
* @param string message 投稿内容 | |
*/ | |
function sendMessage(message){ | |
// プロジェクトのプロパティからbotの固有値を取得 | |
var mastodon_token = PropertiesService.getScriptProperties().getProperty("mastodon_token"); | |
var mastodon_url = PropertiesService.getScriptProperties().getProperty("mastodon_url"); | |
// visibility Either "direct", "private", "unlisted" or "public" | |
var visibility = "public"; | |
postUpdateToots(message,visibility,mastodon_token,mastodon_url); | |
} | |
/** | |
* トリガーの動的作成 | |
*/ | |
function setTrigger(){ | |
var setTime = new Date(); | |
// 当日の 3:09 に時刻合わせ | |
setTime.setHours(3); | |
setTime.setMinutes(9); | |
// 上記時刻に main 関数を実行するトリガーを作成する | |
ScriptApp.newTrigger('main').timeBased().at(setTime).create(); | |
} | |
/** | |
* トリガーの動的削除 | |
*/ | |
function delTrigger() { | |
// このプロジェクトに紐づくすべてのトリガーを取得する | |
var triggers = ScriptApp.getProjectTriggers(); | |
// main 関数を呼び出すトリガーをすべて削除する | |
for(var i=0; i < triggers.length; i++) { | |
if (triggers[i].getHandlerFunction() == "main") { | |
ScriptApp.deleteTrigger(triggers[i]); | |
} | |
} | |
} | |
/** | |
* スプレッドシートから投稿内容を取得し、投稿関数を呼び出す | |
* setTrigger関数から呼び出されるようにしておくこと | |
*/ | |
function main() { | |
var sheet = SpreadsheetApp.getActiveSheet(); | |
var lastRow = sheet.getLastRow(); | |
const SEND_FLG = 1; // スプレッドシート1列目に送信済みフラグをセットする | |
const SEND_MSG = 2; // スプレッドシート2列目から投稿内容を取得する | |
const LEAD = 2; // スプレッドシート2行目から送信済みフラグと送信メッセージを保持する | |
// トリガーの動的削除 | |
delTrigger(); | |
// 送信済みフラグの付いてない一番下のメッセージを投稿してループを抜ける | |
for(var row = LEAD; row <= lastRow; row++) { | |
if(!sheet.getRange(row, SEND_FLG).getValue()){ | |
var msg = sheet.getRange(row, SEND_MSG).getValue(); | |
sendMessage(msg); | |
sheet.getRange(row, SEND_FLG).setValue(true); | |
break; | |
} | |
} | |
// 全て投稿済みフラグが立っていたら、投稿済みフラグを全てクリアする | |
if(row >= lastRow) { | |
sheet.getRange(LEAD, SEND_FLG, lastRow - 1).clearContent(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
となっておりtootされない不具合を以下のように修正しました。