見出し画像

GASを使ってblueskyで投稿をする方法

表題の通り、GASを使ってblueskyで投稿をする方法の紹介です。
本当はスプレッドシートからランダムに文字列を取得し、それをblueskyにと投稿するようにしたかったのですが、まだ実装できていません。ご存知の方は教えていただけると幸いです。

以下がGASを使ってblueskyで投稿をする方法です。
(このサイトを参考にさせていただきました。)
https://xenexe.info/cf36032c-9c1a-4d17-a85a-83bfa381cb65/


function main() {
  const session = createSession(); // セッションを作成して保存
  if (session) {
    createRecord('テスト', session);
  } else {
    console.error('Failed to create session');
  }
}

// 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),
  }

  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),
  }

  try {
    UrlFetchApp.fetch(url, options);
  } catch (error) {
    console.error('Error creating record:', error.message); // エラーメッセージをログに出力
  }
}


この記事が気に入ったらサポートをしてみませんか?