【PHP】Bluesky に Post する (with Link Card)

Bluesky で正確には API ではなく、AT Protocol を使用して PHP から投稿するというネタです。使用する言語によっては既に AT Protocol 向けのライブラリー類が作成されているようですが、当記事ではライブラリー類は一切無しの手打ちスクリプトで Post してしまおうとの趣旨です。

動作に必要な環境

・PHP → ver 7.x
・openSSL
・cURL

たぶん PHP 7.x や 8.x が動作している環境なら SSL も cURL も
PHP のモジュールとして問題なく入っていると思います。
一部だけ PHP 7.x 以上向けの書き方をしているので修正すれば PHP 5.3 でも動くと思う。

Bluesky 側の準備

Bluesky にログイン可能なアカウントだけあれば OK です。
(別途に申請したりとか特別な操作は不要です)


PHP 側の準備

外部のライブラリー類などを一切使わずに素の PHP のみで実装するので特に何も用意しなくて OK です。

しかしながら cURL 発行時に趣味でローカルの Cookie を使う指定にしているので APP の PHP と同じ位置に cookie_bsky.txt という名前の空のファイルを事前に用意してください。


APP 本体

そのまま1行データを Post するだけではツマラナイので、RSS などから収集したデータから、投稿本文+LINK先URL+添付する画像のURLを一纏めにしたテキストファイルを読み込んで、Link Card 形式で (埋め込み型のカードデータ) 複数回 Post するという例にしてみます。

(ファイルが複数になってしまうのでテキストファイルの読み込み部分は、読み込んだという前提で固定の配列で記述します)



解説は要るのかな・・・

そのままで動作するので、まずはアカウントIDの部分とパスワードの部分を書き換えて実行してみてください。

入力データがJSON配列じゃないのかい🤣🤣🤣 というのは、これまた趣味で1行で1つのデータの纏まりで目視で分かりやすいから、こういうCSV的なテキストデータが好みです🤣

こんな感じで Link Card 付きの投稿がされます。
Link Card 部分のタイトル部は省略不可のようで省略すると LINK URLが設定されてしまいます。
description 部分は省略できました。

趣味の部分

各 Function 毎の cURL 部分で
左図の赤枠の部分は削除してしまっても問題ないです。

CURLOPT_FOLLOWLOCATION だけは、残しておいても良いかも。

Bluesky で気になるところ

良いところ

・無料でも極端な使用回数の制限が無いので何度も投稿できる
・反応は遅いけれど投稿失敗となりにくい気がする

良くないところ

・投稿内容にハッシュタグ文字列があっても自動でハッシュタグとして識別とリンク付けされない
・投稿内容に http:// などの URL と思われる文字列があっても自動でリンク付けされない
・投稿内容に http:// などの URL と思われる文字列でリンク先に OGP 出力があっても自動で埋め込み作成してくれない
・ハッシュタグ文字列の設定は送信側で行うので表示されているタグとリンク先が異なるタグを容易に作成できてしまう
・リンクURLの設定は送信側で行うので表示されている文字列とリンク先が異なるURLを容易に作成できてしまう
 → この見えている文字とリンク先が異なるというのは結構危険なのではないかと・・・

2025/06/13

Posted by まゆみ.H
X B f B! P L

Search (in blogs)

Featured

今も続くアバターの身長問題。身長=158cmは子供ですか、そーですか。

もともとリアルサイズなアバター故にアジア圏以外が主催のSIMなどでは低身長として扱われることも少なくなかったのですが、さほど気にせず自分の好みの見た目として楽しんでいました。ところが、先日、とあるSIMを訪問した時に「身長が5フィート以下だから子供は帰りなさい」というメッ...

クリエイティブ・コモンズ・ライセンス

template by QooQ