blueskyとGASとスプレッドシートで定期自動投稿botを設定する方法
表題の通り、blueskyで定期自動投稿を設定する方法の紹介です。
スプレッドシートからランダムにセルを選び、その文字列を取得してblueskyに投稿するようにしています。
定期繰り返し設定はGASで行ってください。
以下がblueskyで定期自動投稿を設定する方法です。
(このサイトを参考にさせていただきました。)
function main() {
const session = createSession(); // セッションを作成して保存
if (session) {
const msg = getRandomValueFromSpreadsheet(); // スプレッドシートからランダムな値を取得
createRecord(msg, session); // ランダムな値を投稿する
} else {
console.error('Failed to create session');
}
}
function getRandomValueFromSpreadsheet() {
// ここにスプレッドシートからランダムに値を取得するコードを追加する
// 以下は例として A 列からランダムに値を取得するコード
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet01');
const lastRow = sheet.getLastRow();
const randomRowIndex = Math.floor(Math.random() * lastRow) + 1;
const randomValue = sheet.getRange("A" + randomRowIndex).getValue();
console.log(randomValue);
return randomValue;
}
// 以下は既存のコード
// https://www.docs.bsky.app/docs/api/com-atproto-server-create-session
function createSession() {
const url = 'https://bsky.social/xrpc/com.atproto.server.createSession'
const payload = {
identifier: 'ここにアカウントIDを記入',
password: 'ここにパスワードを記入',
}
const options = {
method: 'post',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
payload: JSON.stringify(payload),
muteHttpExceptions: true // HTTP エラーをミュート
}
try {
const response = UrlFetchApp.fetch(url, options);
return JSON.parse(response.getContentText());
} catch (error) {
console.error('Error creating session:', error);
return null;
}
}
// https://www.docs.bsky.app/docs/api/com-atproto-repo-create-record
function createRecord(msg, session) {
if (!session || !session.handle || !session.accessJwt) {
console.error('Invalid session');
return;
}
const url = 'https://bsky.social/xrpc/com.atproto.repo.createRecord'
const payload = {
repo: session.handle, // セッションからハンドルを取得
collection: 'app.bsky.feed.post',
record: {
text: msg,
createdAt: new Date().toISOString(),
},
}
const options = {
method: 'post',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + session.accessJwt, // セッションからアクセストークンを取得
},
payload: JSON.stringify(payload),
muteHttpExceptions: true // HTTP エラーをミュート
}
try {
const response = UrlFetchApp.fetch(url, options);
console.log('Record created:', response.getContentText());
} catch (error) {
console.error('Error creating record:', error.message); // エラーメッセージをログに出力
}
}
普段はXやblueskyで短歌を投稿しています。
ぜひ見てみてください。
この記事が気に入ったらサポートをしてみませんか?