
九保すこひです(フリーランスのITコンサルタント、エンジニア)
さてさて、「今週はブログ何書こっかな…」なんて考えてたら、あるニュースが飛び込んできました。
それが・・・・・・
Bluesky が招待なしでも登録できるようになった
というものです。
参考ページ: 「X対抗SNS」Bluesky(ブルースカイ)、招待制廃止で誰でも登録可能に Xとの違いとは
Bluesky
はまだ馴染みがないかもしれませんがX
(旧ツイッター)の代替になるんじゃないかとも言われるSNS
のことで、創業者のジャック・ドーシーが発案したものなんだそうです。(実際、見た目も何から何までツイッターとそっくりです)
そして、少し調べてみると、すでにAPI
まで用意されているとのことだったので、「じゃあ、せっかくだから」ということで「wordpress
に記事が投稿されたら、自動でBluesky
に投稿される」ようにしてみることにしました。
そこで
今回はBluesky
の(API
)の話題をお届けしたいと思います。
ぜひ何かの参考になりましたら嬉しいです。
「招待制のときからアカウントあったのに、
ひとつも投稿してなかった…
すっかり忘れてた」
開発環境: wordpress 6.4
必要になるもの
2024.2.8
現在Bluesky API
は特に登録せずに以下の情報があれば普通に使えるようです。
- ユーザー名(例:
sukohi.bsky.social
) - ログインパスワード
そのため、これらの情報を用意しておいてください。
※ 多分人気が出てきたらAPI
も登録制とかになるんじゃないでしょうか。あと、パスワードもAPI
キーとかに変わりそうな気がします
では、楽しんでやっていきましょう(今回はすぐできます
)
子テーマをつくる
wordpress
をカスタマイズする場合の定番ですが、「子テーマ」というものをつくって「すでにあるテーマの一部分だけを上書きできるように」します。
なお、子テーマの作り方は以下のページを参考にしてください。
参考ページ: 子テーマをつくる
ちなみに、今回作ったのは以下の「Twenty Twenty-Four for Bluesky」です。
wp-content/themes/twentytwentyfour-bluesky/style.css
/*
Theme Name: Twenty Twenty-Four for Bluesky
Theme URI: https://wordpress.org/themes/twentytwentyfour/
Description: Twenty Twenty-Four with Summary
Author: Sukohi Kuhoh
Author URI: http://example.com
Template: twentytwentyfour
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: one-column, custom-colors, custom-menu, custom-logo, editor-style, featured-images, full-site-editing, block-patterns, rtl-language-support, sticky-post, threaded-comments, translation-ready, wide-blocks, block-styles, style-variations, accessibility-ready, blog, portfolio, news
*/
Bluesky APIでへ投稿するようにする
では、今回のメインになるカスタマイズ部分です。
wp-content/themes/twentytwentyfour-bluesky/functions.php
<?php
// 定数
define('BLUESKY_LOGIN_USER_NAME', '(あなたのユーザー名)'); // Bluesky にログインするユーザー名
define('BLUESKY_LOGIN_PASSWORD', '(あなたのパスワード)'); // Bluesky にログインするパスワード
add_action('transition_post_status', function($new_status, $old_status, $post)
{
if($new_status === 'publish' &&
in_array($old_status, ['draft', 'future'], true) &&
$post->post_type === 'post') { // 初回投稿の時だけ
// ログインする
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://bsky.social/xrpc/com.atproto.server.createSession');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'identifier' => BLUESKY_LOGIN_USER_NAME,
'password' => BLUESKY_LOGIN_PASSWORD,
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
$login_response = json_decode($response, true);
curl_close($ch);
$has_error = isset($login_response['error']);
if (! $has_error) { // ログイン成功
// ポストする
$text = $post->post_title ."\nという記事を公開しました!\nぜひご覧ください。";
$postData = json_encode([
'repo' => $login_response['did'],
'collection' => 'app.bsky.feed.post',
'record' => [
'$type' => 'app.bsky.feed.post',
'createdAt' => date('c'),
'langs' => ['ja'],
'text' => $text,
'embed' => [
'$type' => 'app.bsky.embed.external',
'external' => [
'uri' => get_permalink($post->ID),
'title' => $post->post_title,
'description' => $post->post_excerpt,
]
]
]
]);
$jwt = $login_response['accessJwt'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://bsky.social/xrpc/com.atproto.repo.createRecord');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer '. $jwt,
]);
curl_exec($ch);
curl_close($ch);
}
}
}, 10, 3);
【追記:2024.2.18】予約投稿を使った場合、2回実行される可能性があるのでコードを修正しました。
この中にある最初の2行へあなたの「ユーザー名」と「パスワード」をセットしてください。
なんとこれで作業は終了です。
お疲れ様でした (今回ホントにすぐでした)
テストしてみる
では、実際にテストしてみましょう
wordpress
にログインして以下のような投稿をしてみます。
すると記事の保存ができるので、急いでBluesky
へ行ってみましょう
どうなるでしょうか・・・・・・
はい
うまく投稿できています。
成功です
企業様へのご提案
まだまだBluesky
が幅広くみんなに使われるかどうかは未知数ですが、Bluesky
もX
と同じく無料でも運用でき、さらにリポスト(いわゆるリツイート)も実装されているので、拡散性が高いといっていいでしょう。
もしBluesky
への自動配信などご希望でしたらお気軽にお問い合わせからご相談ください。
お待ちしております。m(_ _)m
おわりに
ということで、今回はホントにシンプルな記事になってしまいました。(たまにはこういう薄味な記事もいいかもですね。動画もショートが人気らしいですし)
なお、残念ながらBluesky
には「ハッシュタグ」が使えないようですね。
ただ、イーロン・マスクがハッシュタグを廃止するなんて話題もあったので、正直あんまりいらないという判断なんでしょうか
また、残念ながら(Bluesky
本体による)PHP
のパッケージは提供されていないので、curl
を使って実装しましたが、もしパッケージがあれば簡単にポストができるようになるかもしれませんね。(ただ、時流を考えるとPHP
では提供されなさそうな気がしています)
兎にも角にも、Bluesky
は招待無しで使えるようになっているので、ぜひ皆さんも登録してみてはいかがでしょうか。
ではでは〜
「そういえば、メタ社がつくった
Theads
ってどうなったんでしょうか
まだ登録してないけど…」