blueSky画像複数投稿API。

2024.02.04

Logging

おはようございます、QiitaにblueSky画像複数投稿を行うにはどうしたら良いですか😌と質問が来たので速攻で回答しました。わからないことは聞くしかないよね。大体の人は答えてくれないけど自分はヒントを与えてそれでもわからない場合は答えを渡す。これは昔、自分はその方が良いじゃないかって思っていたけども・・・・どうなんですかねぇ🤔。あまりその人の力にはならないかも。

やはり考える力が必要になる職業なんで、やっぱ闇雲に質問して答えを知っても力にならないじゃないかって思います。悪いことではないけれど技術を手に入れたければ、自分でライブラリのソースコードを読んで頑張らないと駄目なんだろうと思っています。

そうするしか、今も昔も技術力付かないし新人はいろいろな人が書いたソースコードを読むべしだとも思っています、コードを書くよりも読む方が大変です。それ乗り越えないとこの職業は難しい教えてもらうでは身につかないだよなぁ~。

一応、質問の回答のソースコードをこちらでも掲載しておきます。

<?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 $ImgLinkAndAltText
     * @return object
     */
    public function imagePost($text, $ImgLinkAndAltText=[])
    {
        $post = Post::create($text);
        $response = null;
        foreach($ImgLinkAndAltText as $val){
            $post = $this->postService->addImage(
                $post,
                $val['img'],
                $val['alt']
            );
        }
        $response = $this->api->createRecord($post);
        return $response;
    }
}
if($argv[0]){
    try {
        var_dump((new bluesky)->post('これはテスト投稿ですよ'));
        //var_dump((new bluesky)->imagePost('これは画像テスト投稿ですよ',[['img'=>'cron.png','alt'=>'クロン'],['img'=>'Gotcha.png','alt'=>'ガチャ']]));
        } catch (\Throwable $th) {
        print $th->getMessage();
        //throw $th;
    }
}

明日へ続く。

タグ

addImage, addWebsiteCard, argv, catch, construct, createRecord, foreach, getMessage, imagePost, PARAM, postService, potibmBlueskyBlueskyApi, potibmBlueskyBlueskyPostService, print, qiita, require, throw, Throwable, use, vendor,

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,