PHP 初心者が WordPress の プラグイン 作成 ! part49 ( コードを整理 05 )

この記事では PHP 初心者 が WordPress プラグイン を 作成 します。 part49 では引き続き今までのコードを少し整理してみます。

前回はコード整理を一区切りし、動作の確認を行いました。
言語への理解不足と単純ミスが相まってなかなか動作しませんでしたがなんとかコードの一部をヘルパークラスに移動できました。

PHP 初心者が WordPress の プラグイン 作成 ! part48 ( コードを整理 動きの確認 )

デバッグの切り替えをインスタンスレベルで行う

postメソッドの引数に登場した$debugのようにほかの機能にも仕込もうと思います。
・・・毎回引数で受け取るのも大変なのでフィールド変数(インスタンス変数)にしてしまおうと思います。

インスタンス生成時にデバッグモードのオンオフを決めるようにします。

以下のように修正しました。

class.coconara-helper.php

class Coconara_Helper {
    ・・・
    // デバッグモード
    private $debug;
    
    /**
     * コンストラクタ
     */
    function __construct(bool $debug = false) {
        // デバッグモードをセット
        $this->debug = $debug;
   ・・・
   
    /**
     * 投稿する
     * @param string $title タイトル
     * @param string $contents コンテンツ
     * @return bool 投稿成功・失敗
     */
    public function post(string $title, string $contents) : bool {
        $result = false;

        if($this->login()) {
            $result = true;
        } else {
            $result = false;
        }

        if($this->debug) {
            // screenshot(10秒待機)
            $this->page->screenshot()->saveToFile('/var/www/html/post.png', 10000);
        }
        return $result;
    }
    ・・・
}

ついでにpostの処理も改良を加えました。

呼び出し側はデバッグを行いたい場合、以下のよう実装します。
index.php

$coconara = new Coconara_Helper(true);

画面遷移処理

ココナラでは画面遷移しているように見えて実は遷移していないという場面があるように思います。
そういった場面のひっくるめて私は「遷移」と呼んでいます。

まずはココナラヘルパーに画面遷移の機能を追加します。
遷移先(というかクエリ)と待ち時間、それにエラー時の返却値を受け取ります。
受け取ったクエリを実行して待ちます。

    /**
     * 画面遷移をする
     * エラーを無視しない場合、Exceptionが発生した場合は失敗となる。
     * @param string $query セレクタ
     * @param int $waitTime 待ち時間
     * @param ignoreError エラーを無視する
     * @return true 成功, false 失敗
     */
    private function moveAndWait(string $query, int $waitTime = 30000, bool $ignoreError = true) : bool {
        $result = false;

        // 遷移
        try{
            $this->page->evaluate($query)->waitForPageReload(Page::LOAD, $waitTime);
            $result = true;
        } catch(Exception  $e) {
            if($ignoreError) {
                $result = true;
            } else {
                //echo $ex->getMessage();
                $result = false;
            }
        } 
        if($this->debug) {
            // 年月日_時分秒(YYYYMMDD_hhmmss)
            $t = date('Ymd_His');
            // screenshot(10秒待機)
            $this->page->screenshot()->saveToFile("/var/www/html/moveAndWait_{$t}.png", 10000);
        }

        return $result;
    }

遷移の実装

試しにpostメソッドを使用してブログ画面に遷移してみましょう。

    /**
     * 投稿する
     * @param string $title タイトル
     * @param string $contents コンテンツ
     * @return bool 投稿成功・失敗
     */
    public function post(string $title, string $contents) : bool {
        $result = false;

        // ログイン
        if($this->login()) {
            // ★ブログ画面に遷移
            if($this->moveAndWait('document.querySelector("a.c-subLink_item-blog").click()')) {
                $result = true;
            } else {
                $result = false;
            }
        } else {
            $result = false;
        }

        if($this->debug) {
            // screenshot(10秒待機)
            $this->page->screenshot()->saveToFile('/var/www/html/post.png', 10000);
        }
        return $result;
    }

確認

アクセスして確認してみましょう。

http://localhost:8099/index.php

ちゃんとブログ画面に遷移してますね!

この画面遷移機能をほかの遷移でも流用すれば効率的に実装が進めそうですね😆

まとめ

ココナラヘルパーの画面遷移機能を実装しました。
順調に進められていますね。このまま順調にいってほしいなぁ(笑

今日はここまで!