前回の続きです。
今回は画像付きのポストをしてみます。
アクセストークンは取得済みとします。
まずは、画像のアップロードから行ってみます。
// 画像データは事前にアップロードされているものとします
$image = file_get_contents('./sample.png');
// MIMEタイプは画像にあったものを指定
$headers = [
'Content-Type: image/png',
'Authorization: Bearer ' . $accessJwt,
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://bsky.social/xrpc/com.atproto.repo.uploadBlob',
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $image, // 今回は画像データをPOSTします
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
]);
$response = curl_exec($ch);
curl_close($ch);
エラーがなければこれで画像のアップロードが成功しています。
取得したレスポンスをもとに、投稿をポストしましょう。
$response = json_decode($response, false);
$image = $response->blob;
$args = [
"repo" => $did,
"collection" => "app.bsky.feed.post",
"record" => [
'$type' => "app.bsky.feed.post",
"text" => "画像添付のテストだよ",
"createdAt" => (new \DateTime())->format("c"),
"langs" => ["ja"],
// ここからが画像の埋め込みデータ
"embed" => [
'$type' => 'app.bsky.embed.images',
'images' => [ // 最大4枚まで指定が可能
[
'alt' => 'alt text',
'image' => $image,
]
]
]
],
];
$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 => false,
]);
$response = curl_exec($ch);
curl_close($ch);
embedのパラメータが増える以外は、通常のポストと特に変化ありません。
成功した場合はタイムラインに表示されています。
画像の投稿も簡単にできました!やったね!!
Comments
コメントはありません。