BlueSkyのAPIを使って遊んでみたい!
公式で推してくるのはこちらのAtprotoですが、ローカル環境ならともかく安価なレンタルサーバーでは使えないことも多いです。
そんなわけで、比較的どこでも使えるはずのPHPでやってみます。
まずはAPIの利用に必要なアクセストークンを取得します。
$args = [
"identifier" => "bluesky handle", // ハンドル名
"password" => "app password", // パスワード
];
$headers = [
"Content-Type: application/json",
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://bsky.social/xrpc/com.atproto.server.createSession",
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($args),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => true, // 必要に応じて false に指定
]);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response, false);
var_dump($response);
ハンドル名はBlueSkyの「@ほにゃらら」の部分です。自分のアカウントの場合だと「cross-clover.info」になります。(@は不要)パスワードはBlueSkyの設定画面から発行してください。問題がなければこれでAPIの利用に必要なアクセストークンが取得できます。
// アカウント固有の識別子
$did = $response->did;
// アクセストークン
$accessJwt = $response->accessJwt;
// リフレッシュトークン
$refreshJwt = $response->refreshJwt;
didはハンドルでも代用可能ですが、ハンドルを変更してもdidは変わらないようなので、こちらを利用する方がベターです。アクセストークンは意外と使用期限が短いので注意が必要です。(遊んでたらすぐに期限切れになります)
必要な情報は取得できたので、ポストしてみます。
$args = [
"repo" => $did,
"collection" => "app.bsky.feed.post",
"record" => [
'$type' => "app.bsky.feed.post",
"text" => "APIからのテスト投稿\n意外と簡単に使えます",
"createdAt" => (new \DateTime())->format("c"),
"langs" => ["ja"]
],
];
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . $accessJwt,
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://bsky.social/xrpc/com.atproto.repo.createRecord',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($args),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
Headerの内容にトークンが追加されたことと、送信するパラメータが違うくらいですね。あとは大体似たような感じ。
送信した結果はこんな感じ。
トークンの取得ができればcURLで十分に活用できそうです。
……と思っていたんですが、画像の埋め込みで少し躓いています。こちらはまた改めて検証してみるつもりです。エラーは出ていないんだけどなぁ。
Comments
コメントはありません。