犬ターネット

blueskyにPHPからPOSTする

2024-02-13 bluesky php

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

bluesky


Firefox で marquee タグが動かなくなっている

さいたまマラソン