今回は分散型SNS「Bluesky」のSandboxのPDSでのAPIの実行方法について書いていきたいと思います。
なお、僕はAPIについては最近触ったばかりの初心者なので、間違っていることがあるかもしれません。その場合はコメントにてご指摘して下さると幸いです。
APIの実行方法
Visual Studio Codeに拡張機能「REST Client」をインストールします。
インストールが終わったらVisual Studio Code上で拡張子.http
のファイルを新規作成します。
そしてそこにAPIを打っていきます。
Visual Studio Codeで手軽にAPIを試せる REST Client 拡張の紹介
https://zenn.dev/protoout/articles/26-vscode-rest-client
xsky.world
のところは自分のPDSのドメインに変更して下さい。
identifier
はBlueskyで作成したアカウントのユーザーID、password
はパスワードを入力して下さい。
POST https://xsky.world/xrpc/com.atproto.server.createSession HTTP/1.1
content-type: application/json
{
"identifier": "louis.xsky.world",
"password": "パスワード"
}
入力したら保存して、上部にあるSend Requestをクリックします。
HTTP API (XRPC) | ATプロトコル
https://atproto.com/specs/xrpc
最初のログインでは、com.atproto.server.createSessionパスワードとアカウント識別子 (ハンドルまたは登録済みの電子メール アドレスなど) を含むエンドポイントが使用されます。これはrefreshJwt(および初期のaccessJwt) を返します。
accessJwtをメモしておきます。
※以下のdidやaccessJwtはあくまでも例です。
{
"did": "did:plc:even7dqs7gnydunotsj4hiiz",
"handle": "louis.xsky.world",
"email": "bskymainmail@gmail.com",
"accessJwt": "mZedSZmE4yLAVZUy2IIwta8YwlyZGInuDDAFiksn5NDIMdLDUWuTVW3R24vLFmBztdN82rGp70VrOwtProeijBjlFEig3qIYIzAOavb7ul0XZcY9FmzJNXQ6Y7s8O6Gud2aet21po9rS2HRYwoamxh3HObnzaO3wo2TBrQeIp45GWbimQvq5W8Dpdj66CyMMeuTl8Kusl1BtHmp8iLEldgxeltC8p",
"refreshJwt": "FkOiBajfII9UQewZhCT5FVGpGwcIoZ50pPi91wqdUpwJBQGd16DqNA2c9mHts9BZnE9b47yG2O7m8G6r8kJYXI4j6rPl0NbgRwGqosLsRgefi6mUDzs5uWVZwar4mWgZgiY5Q3oIYBjgM9x5jhIoF9HYwb4zn9DtokTYHO7jP8rUAbMD39iR8kAwbdzx9gvlYiY9xGjdougp1ALsyeFJGuphVzeec2BcDyzynDpLmk4NmgY4Gw4Mlk8BjVgKH0s2GVNi3uzZyjfHGcFFU2WZSzovDzMw2Qh4o5tM"
}
プロフィールを取得
プロフィールを取得します。
Bearerの後は先程メモしたaccessJwtを入力します。
GET https://xsky.world/xrpc/app.bsky.actor.getProfile?actor=louis.xsky.world HTTP/1.1
Authorization: Bearer mZedSZmE4yLAVZUy2IIwta8YwlyZGInuDDAFiksn5NDIMdLDUWuTVW3R24vLFmBztdN82rGp70VrOwtProeijBjlFEig3qIYIzAOavb7ul0XZcY9FmzJNXQ6Y7s8O6Gud2aet21po9rS2HRYwoamxh3HObnzaO3wo2TBrQeIp45GWbimQvq5W8Dpdj66CyMMeuTl8Kusl1BtHmp8iLEldgxeltC8p
するとプロフィールが取得出来ます。
{
"did": "did:plc:even7dqs7gnydunotsj4hiiz",
"handle": "louis.xsky.world",
"displayName": "Louis",
"description": "ソニーやガジェット、分散型SNSが好き。HTML・CSSやLinuxサーバーに興味がある。2024年01月14日からBlueskyのSandboxのPDS、運営中。",
"avatar": "https://example.com/comavatar@jpeg",
"banner": "https://example.com/testbanner@jpeg",
"followsCount": 3,
"followersCount": 3,
"postsCount": 22,
"indexedAt": "2099-02-29T03:22:45.326Z",
"viewer": {
"muted": false,
"blockedBy": false
},
"labels": []
}
adminで発行したinvite codeを見るには
Visual Studio Code上で別の拡張子.http
のファイルを新規作成します。
自分のサーバーにログインし、pds.env
のPDS_ADMIN_PASSWORD
をコピーします。
僕の環境の場合はSSHをインストール済みなのでメインPCでSSHでログインします。
ssh louis@192.168.3.16
PDS_ADMIN_PASSWORD
を表示します。
source /pds/pds.env
echo $PDS_ADMIN_PASSWORD
a7b5970b6a5077bb41fc68a26d30adda
まだBlueskyのPDSで招待コードを発行していない人は、発行しておきます。
※PDS_HOSTNAME
は自分のPDSのドメイン、PDS_ADMIN_PASSWORD
は先程確認したパスワードを入力します。
PDS_HOSTNAME="xsky.world"
PDS_ADMIN_PASSWORD="a7b5970b6a5077bb41fc68a26d30adda"
curl --silent \
--show-error \
--request POST \
--user "admin:${PDS_ADMIN_PASSWORD}" \
--header "Content-Type: application/json" \
--data '{"useCount": 1}' \
https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode
admin:(PDS_ADMIN_PASSWORD)
というようにadmin:ごとBase64エンコード変換します。
Base64 エンコード・デコード:画像などのデータをBase64文字列に変換、逆変換 | ラッコツールズ🔧
https://rakko.tools/tools/24/
サイトからコピーしてVisual Studio Codeで以下のようにBasicの右に貼り付けます。
GET https://xsky.world/xrpc/com.atproto.admin.getInviteCodes HTTP/1.1
Authorization: Basic YWRtaW46YTdiNTk3MGI2YTUwNzdiYjQxZmM2OGEyNmQzMGFkZGE=
Send Requestします。
{
"cursor": "0429736408783::xsky-world-fjlka-lsiwjz",
"codes": [
{
"code": "xsky-world-fjlka-lsiwjz",
"available": 1,
"disabled": false,
"forAccount": "admin",
"createdBy": "admin",
"createdAt": "2099-02-29T01:12:30.914Z",
"uses": []
}
]
}
ちゃんと表示されていることを確認します。
API一覧
com.atproto | AT Protocol
https://atproto.com/lexicons/com-atproto
API一覧はこれです。
com.atproto.admin
管理者(admin)の行動に関する定義。
com.atproto.admin.defs
com.atproto.admin.disableAccountInvites
com.atproto.admin.disableInviteCodes
com.atproto.admin.enableAccountInvites
com.atproto.admin.getInviteCodes
com.atproto.admin.getModerationAction
com.atproto.admin.getModerationActions
com.atproto.admin.getModerationReport
com.atproto.admin.getModerationReports
com.atproto.admin.getRecord
com.atproto.admin.getRepo
com.atproto.admin.resolveModerationReports
com.atproto.admin.reverseModerationAction
com.atproto.admin.searchRepos
com.atproto.admin.sendEmail
com.atproto.admin.takeModerationAction
com.atproto.admin.updateAccountEmail
com.atproto.admin.updateAccountHandle
com.atproto.identity
アカウントIDに関する定義。
com.atproto.identity.resolveHandle
com.atproto.identity.updateHandle
com.atproto.label
ラベルに関する定義。
com.atproto.label.defs
com.atproto.label.queryLabels
com.atproto.label.subscribeLabels
com.atproto.moderation
モデレーションに関する定義。
com.atproto.moderation.createReport
com.atproto.moderation.defs
com.atproto.repo
atprotoリポジトリに関する定義。
com.atproto.repo.applyWrites
com.atproto.repo.createRecord
com.atproto.repo.deleteRecord
com.atproto.repo.describeRepo
com.atproto.repo.getRecord
com.atproto.repo.listRecords
com.atproto.repo.putRecord
com.atproto.repo.strongRef
com.atproto.repo.uploadBlob
com.atproto.server
サーバーの動作に関する定義。
com.atproto.server.createAccount
com.atproto.server.createAppPassword
com.atproto.server.createInviteCode
com.atproto.server.createInviteCodes
com.atproto.server.createSession
com.atproto.server.defs
com.atproto.server.deleteAccount
com.atproto.server.deleteSession
com.atproto.server.describeServer
com.atproto.server.getAccountInviteCodes
com.atproto.server.getSession
com.atproto.server.listAppPasswords
com.atproto.server.refreshSession
com.atproto.server.requestAccountDelete
com.atproto.server.requestPasswordReset
com.atproto.server.resetPassword
com.atproto.server.revokeAppPassword
com.atproto.sync
サーバー間同期に関する定義。
com.atproto.sync.getBlob
com.atproto.sync.getBlocks
com.atproto.sync.getLatestCommit
com.atproto.sync.getRecord
com.atproto.sync.getRepo
com.atproto.sync.listBlobs
com.atproto.sync.listRepos
com.atproto.sync.notifyOfUpdate
com.atproto.sync.requestCrawl
com.atproto.sync.subscribeRepos
■参照サイト
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~ #SNS - Qiita
https://qiita.com/gpsnmeajp/items/eb665d639f088b85454e
REST API での HTTP 基本認証の使用 - IBM Documentation
https://www.ibm.com/docs/ja/ibm-mq/9.1?topic=security-using-http-basic-authentication-rest-api