PHPというか curl を実行するだけ。公式ドキュメントの この辺 をみて実装。
<?php
function getJWT($handle, $password)
{
$ch = curl_init("https://bsky.social/xrpc/com.atproto.server.createSession");
curl_setopt_array($ch, [
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_SSL_VERIFYPEER => false, // 手元の環境だとこれがないと接続できなかった
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"identifier" => $handle,
"password" => $password,
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$responseJson = json_decode($response, true);
return $responseJson["accessJwt"];
}
function post($handle, $jwt, $text)
{
$ch = curl_init("https://bsky.social/xrpc/com.atproto.repo.createRecord");
curl_setopt_array($ch, [
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_SSL_VERIFYPEER => false, // 手元の環境だとこれがないと接続できなかった
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Authorization: Bearer {$jwt}",
],
CURLOPT_POSTFIELDS => json_encode([
"repo" => $handle,
"collection" => "app.bsky.feed.post",
"record" => [
"text" => $text,
"createdAt" => (new DateTime())->format("c"),
],
]),
]);
$response = curl_exec($ch);
curl_close($ch);
$responseJson = json_decode($response, true);
return $responseJson;
}
// ----------------
$handle = "あなたのハンドル";
$password = "ログイン時のパスワード";
// JWT取得
$jwt = getJWT($handle, $password);
// POST
$response = post($handle, $jwt, "bsky API POSTテスト\n改行もある");
print_r($response);
$handle は blueskyのハンドル。自分の場合は mgng.mugbum.info
になる。
以下、実行結果。コンソールには以下のような表示がされ、
Array
(
[uri] => at://did:plc:6mg3az35umpyc....
[cid] => bafyreibcmciqub7bu3y....
)
ちゃんと投稿された。
https://bsky.app/profile/mgng.mugbum.info/post/3klbvr7bhno2x