Skip to content

Instantly share code, notes, and snippets.

@hidao80
Last active April 14, 2021 23:18
Show Gist options
  • Save hidao80/3b1f01f023a3fe7560d3933d36548be5 to your computer and use it in GitHub Desktop.
Save hidao80/3b1f01f023a3fe7560d3933d36548be5 to your computer and use it in GitHub Desktop.
時分指定Tootスクリプト(Google Spreadsheet Script使用)
/**
* 時分指定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();
}
}
@hidao80
Copy link
Author

hidao80 commented Feb 6, 2019

postUpdateToots(message,visibility,qiitadon_token,qiitadon_url);

となっておりtootされない不具合を以下のように修正しました。

postUpdateToots(message,visibility,mastodon_token,mastodon_url);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment