Blueskyで何かやりたくなったので、PRTimesのプレスリリースを自動投稿するbotを作ってみました。
Google Apps Scriptを使うと、無料でbotが作れるので便利です。
せっかくなので作り方などをまとめておきます。といっても読んだブログの紹介ぐらいですが。
Google Apps Scriptからポストを投稿する
Bluesky API と Google Apps Script (GAS) でポストを投稿・取得・削除する
↑この記事そのまんま書けばそれで動きます。
定期実行する
Google Apps Scriptに備わっているトリガー機能を使います。
Google Apps Scriptのトリガーについて
↑この記事に載っている「時間主導型」のトリガーを使ってください。
他のマシン・サーバーから情報を送る
Google Apps ScriptにWeb APIを建てる機能があるので、それでWeb APIを建てましょう。
POSTで情報を投げられます。詳しくは↓の記事を参照。
Google Apps Script(GAS)で自宅サーバーの死活監視をする
(Web APIを叩ける環境があるなら、直接BlueskyのAPIを叩けばいいのでは、という話もありますが…)
URLにリンクを張る
これが地味に大変です。
単にテキストで書いてもURLにリンクが張られません。
ファセット(facets)というのを定義する必要があります。
詳しくはBlueskyの公式ドキュメントに説明がありますが、テキストのどこからどこまでリンクを張るかをバイト単位で指定します。
で、「バイト単位」というのが地味に面倒で、GASの標準機能では文字列から文字列長を得ることはできてもバイト長を得られません。
こういう関数を定義してバイト長を計算すると良い、とGemini(GoogleのAI)が言ってました。
function getByteLength(str) {
// 文字列をBlobに変換
var blob = Utilities.newBlob(str);
// Blobのバイト配列を取得
var bytes = blob.getBytes();
// バイト配列の長さを返す
return bytes.length;
}
どこかのサイトをWebスクレイピングする
GASはWebスクレイピングも標準機能にはないので、ライブラリを使います。
Cheerioというライブラリ(をGASに移植したもの)がおすすめです。
jQueryと互換性のある書き方でスクレイピングできるので扱いやすいです。
【GAS】Cheerioライブラリを使ってWebスクレイピング
↑この記事に色々載っています。
おわり
大体これぐらいあれば、好きにbotが作れると思います。