BlueskyでBotを作成するための手順を説明します
コマンドプロンプトとPythonを使って作ります。
1. 環境のセットアップ
フォルダとファイルを作成します。仮にフォルダをbot ファイルはBlueskybot.pyとします。
コマンドプロンプトでbotフォルダに移動します。
Pythonを使ってBluesky APIと連携します。まず、必要なSDKをインストールします。以下のコマンドを実行してください:
コマンドプロンプトにコピペしてエンターキーを押す。
pip install atproto
2. Botの認証
APIを使用する前に、Blueskyアカウントでログインしてセッションを作成します。これにより、アクセストークンを取得できます。次のようにログインします:
Blueskybot.pyに以下をコピペしてください。
from atproto import Client
client = Client()
client.login('your-handle.bsky.social', 'your-password')
ログイン後、accessJwt
(短期間有効なアクセストークン)とrefreshJwt
(長期間有効なリフレッシュトークン)が得られます。
'your-handle.bsky.social', 'your-password'にアカウントのIDとパスワードを入力しましょう
- 'your-handle.bsky.social',→アカウントのID
- 'your-password'→アカウントのパスワード
client.login('your-handle.bsky.social', 'your-password')→client.login('otamesi471.bsky.social', 'awreikhaubb33')
このように自分が普段ログインしているアカウントのIDとパスワードを入力しましょう。
3. APIを使って投稿を作成
認証後、APIを使って投稿ができます。以下は、「Hello World」というメッセージを投稿する例です:
このコードにより、Blueskyのフィードに投稿が行われます。
F:\bot>python Blueskybot.py
Fなのは筆者がFのHDDに設定したからでCドライブでもDドライブでもOK
4. Bot投稿のスケジューリング
Botに定期的な投稿をさせたい場合は、Pythonのschedule
ライブラリなどを使って自動化できます。以下は、毎時自動で投稿を行う例です:
import schedule
import time
def post_message():
client.send_post('Automated bot post.')
schedule.every().hour.do(post_message)
while True:
schedule.run_pending()
time.sleep(1)
5. その他のAPI機能を利用
Botの機能を拡張するために、Bluesky APIの他のエンドポイントも活用できます。たとえば:
- 特定のキーワードやハッシュタグを含む投稿を検索する
- 投稿に返信する、引用する
- ユーザーをフォロー、アンフォローする
例として、特定の投稿を引用したり、返信することができます。
6. 認証トークンの管理
認証トークンは定期的に更新する必要があります。accessJwt
は短期間で期限が切れるため、refreshJwt
を使用して新しいトークンを取得してください。
以上の手順で、Pythonを使ってBluesky上で基本的なBotを構築できます。詳細な情報やテンプレートはBlueskyの公式ドキュメントに記載されています。
一時間毎に登録した文章を投稿するbot
投稿した文章を定期的に投稿するプログラムです。
登録した文章を投稿し終わったら最初の文章を投稿する仕組みになっています。
import re
import schedule
import time
from atproto import Client
# Bluesky APIへの接続
client = Client()
client.login('your-handle.bsky.social', 'your-password')
# 投稿内容のリスト(リンクを含む)
posts = [
"こんにちは ",
"ブログの記事 https://eikuksokuosu/",
# 他の投稿もリストに追加
]
# インデックスを管理
index = 0
# リンクを含む投稿を処理する関数
def post_message():
global index
post = posts[index]
# URLを検出する正規表現
urls = re.findall(r'(https?://[^\s]+)', post)
# 投稿のテキストとリンクを分離して設定
facets = []
for url in urls:
start = post.find(url)
end = start + len(url)
facets.append({
"index": {"byteStart": start, "byteEnd": end},
"features": [{"$type": "app.bsky.richtext.facet#link", "uri": url}]
})
# 投稿を送信
client.send_post(post, facets=facets)
print(f"投稿しました: {post}")
# インデックスを更新し、最後に到達したら最初に戻る
index = (index + 1) % len(posts)
# 最初の投稿をすぐに行う
post_message()
# 1時間ごとに投稿をスケジュール
schedule.every(1).hour.do(post_message)
# スケジュールを実行し続ける
while True:
schedule.run_pending()
time.sleep(1)
posts = [
"こんにちは ",
"ブログの記事 https://eikuksokuosu/",
# 他の投稿もリストに追加
]
このように打ち込みます
一つの投稿は【" ",】の間に書き込みます。
posts = [
]
というプログラミングの間にドンドン文章を登録していきましょう。
更に複雑なbotは有料にしようと思います。