何かの役に立つ#bluesky

2024.01.29

Logging

おはようございます、QiitaにblueSkyのプロフィールURLからRSSを抽出するコードを書きました。先日、blueSkyにRSS機能を追加したという記事を読んだので、その日のうちに対応した形になります。

特に難しいコードでもないので、コメントは一切書いていませんが、それなりに役に立つと信じてリリースしました、ソースの改修などを行って頂けて構いませんが出来ればQiitaもしくはこちらの記事にリンクを貼っていただけたら幸いです。

PHP環境は8.2になっていますが、PHP7系でも動くソースコードなので安心してご使用いただけるかと思います。使用にあたって最終行はコメントアウトを行ってください、url変数も自分にあったurlに変えていただければと思います。

<?php
class blueSkyRss{
    public $rss = null;
    /**
     * __construct
     * @param $url
     * @return void
     */
    public function __construct($url)
    {
        try {
            $html = file_get_contents($url);
            preg_match('/https:\/\/bsky\.app\/profile\/did.*\/rss/',$html,$matches);
            if($rssUrl = $matches[0]){
                $feed = simplexml_load_file($rssUrl);
                $this->rss = $feed;    
            }
        } catch (\Throwable $th) {
            //throw $th;
        }
    }
    /**
     * getRss
     * @return object
     */
    public function getRss():object
    {
        $response = [];
        if(isset($this->rss->channel)){
            $cnt = 0;
            foreach($this->rss->channel->item as $item){
                $response[$cnt]['link']    = $item->link;
                $response[$cnt]['comment']   = $item->description;
                $response[$cnt]['date'] = $item->pubDate;
                $cnt++;
            }
        }
        return (object)$response;
    }
}
$url = 'https://bsky.app/profile/xxxxxxx.bsky.social';
//var_dump((new blueSkyRss($url))->getRss());

明日へ続く。

タグ

bluesky, catch, cnt, construct, description, did, foreach, getRss, isset, lt, object, PARAM, preg_match, pubDate, qiita, return, RSS, throw, Throwable, try,

BlueSkyへ記事リンクをポストするワードプレスプラグインを作りました

2024.01.17

Logging

おはようございます、BlueSkyへ記事リンクをポストするワードプレスプラグインを作りました。詳しくはQiitaの記事を読んで頂いたらと思います。こちらでは技術的なことは記載しませんが、過去のブルースカイの投稿記事が役立つと思います。こちらもQiitaにも掲載しています。

作った経緯は、Twitterをイーロン・マスク氏が買収するまでは日本では匿名SNSの代表的なものと言えばTwitterだったと思いますが、買収騒動からユーザー動向を見ているとユーザーがいろいろなSNSサービスに移行していった感が強いです。分散化してしまったSNS。前のように一極集中には戻りそうにないので、APIがリリースされた順次、自動投稿をリリースしていこうと思ったのが経緯です。

いま、自動投稿で記事をUPしているのはX、マストドン、ブルースカイです。今年にはThreadsのAPIもリリースされるという噂があるのでリリースされれば作ります。

明日へ続く。

タグ

API, bluesky, qiita, SNS, threads, Twitter, X, イーロン・マスク氏, ブルースカイ, マストドン, ユーザー, ユーザー動向, ワードプレスプラグイン, 一極集中, 分散化, 匿名SNS, , 経緯, 買収騒動, 順次,

PHP言語でblueskyの自動投稿を作ってみた。

2024.01.12

Logging

おはようございます。blueskyの自動投稿を作ってみたくなり即興で作りました。因みにblueskyの開発ドキュメントに記載されていたライブラリを使用しています。トライしてみて案外簡単に作れたのでライブラリに感謝だと感じました🙇。なお、自分のブルースカイアカウントのpost/3khojypfnf62zとpost/3khok6quxgj23が自動投稿(コマンドラインからの投稿)になります。

動作環境・sakuraれんたるサーバー・PHP8.2

作成手順

①アプリのパスワードを作成
https://bsky.app/settings/app-passwords
potibm/phluesky(v0.3.0)をインストールする(composerのインストールはご自身で調べてください)

composer require potibm/phluesky:"0.3.0"

③php8.2.bluesky.phpと同じ階層にconfig.phpを作成しdefineを設定する。
画像はphp8.2.bluesky.phpと同じ階層に置いているものとします。
USER_NAMEはプロフィールページに記載されている@の後のあかうんと名.bsky.social、 APP_PASSWORDは①で作成したパスワードになります。

④コマンドラインより実行する。なお、vendorの配置などで参照先は変わります。

php php8.2.bluesky.php
<?php
require '../vendor/autoload.php';
require 'config.php';
use \potibm\Bluesky\BlueskyApi;
use \potibm\Bluesky\BlueskyPostService;
use \potibm\Bluesky\Feed\Post;

class bluesky
{
    private $api = null;
    private $postService = null;

    public function __construct()
    {
        $this->api = new BlueskyApi(USER_NAME, APP_PASSWORD);
        $this->postService = new BlueskyPostService($this->api);
    }

    /**
     * 簡単なテキスト投稿
     * @param $text
     * @return object
     */
    public function post($text)
    {
        $post = Post::create($text);
        $response = $this->api->createRecord($post);
        return $response;
    }

    /**
     * link付き投稿
     * @param $text
     * @param $url
     * @param $title
     * @param $description
     * @param $optionalimage|null
     * @return object
     */
    public function webPost($text,$url,$title,$description,$optionalimage=null)
    {
        $post = Post::create($text);
        $post = $this->postService->addWebsiteCard(
            $post, 
            $url, 
            $title, 
            $description,
            $optionalimage,
        );
        $response = $this->api->createRecord($post);
        return $response;
    }
    
    /**
     * 画像投稿
     * @param $text
     * @param $imgLink
     * @param $altText
     * @return object
     */
    public function imagePost($text, $imgLink, $altText)
    {
        $post = Post::create($text);
        $post = $this->postService->addImage(
            $post,
            $imgLink,
            $altText
        );
        $response = $this->api->createRecord($post);
        return $response;
    }
}
if($argv[0]){
    try {
        var_dump((new bluesky)->post('これはテスト投稿ですよ'));
        var_dump((new bluesky)->imagePost('これは画像テスト投稿ですよ','cron.png','クロン'));    
    } catch (\Throwable $th) {
        print $th->getMessage();
        //throw $th;
    }
}

最後に、cron設定などはご自身で調べてください。
ありがとうございました🙇。

こちらの記事はQiitaで記載されている自分の記事のコピーになります。
https://qiita.com/taoka-toshiaki/items/1508f4e79ea592565cef

明日へ続く。

タグ

addImage, addWebsiteCard, argv, bluesky, catch, Composer, construct, createRecord, define, getMessage, imagePost, PARAM, phluesky, postService, potibm, potibmBlueskyBlueskyApi, potibmBlueskyBlueskyPostService, print, Throwable, vendor,