PHP 初心者が WordPress の プラグイン 作成 ! part46 ( コードを整理 03 )
この記事では PHP 初心者 が WordPress プラグイン を 作成 します。 part46 では引き続き今までのコードを少し整理してみます。
前回はnamespaceを定義し、呼び出し側(index.php)にてインスタンス生成の実装を行いました。
PHP 初心者が WordPress の プラグイン 作成 ! part45 ( コードを整理 02 )
ヘルパーにココナラへのアクセス機能を実装する。
それではヘルパーにココナラへのアクセス機能を実装したいと思います。
最初に作成するのは「ココナラのサイトにアクセスできるか(到達確認)」です。
到達できないことにはその後の作業も進められません。
このメソッドを作成するにあたり、まずは単純に値を返さないメソッドを作ります。
PHPでも「値を返さない」という表現はできるようです。返り値に「void」を指定するとのこと。
厳密には「返り値に意味はない」を表しているようで、仮に戻り値を確認したとしてもそこには「NULL」が入っているそうです。
こういったところに厳格なJavaではコンパイルエラーですよね。
PHP7.0までは返り値に「void」を記載できなかった?
PHP7.1から進化し、返り値の型にvoidを指定できるようになったそうです。
さらに返り値の型にvoidを宣言している場合、メソッド内で「return」の実装を行うだけでエラーとして補足される安心設計になったようです。
ほんとだ!これは安心です😏
以下のように作成しました。
class.coconara-helper.php
// 到達確認
function reachable(): void
{
// 新しいタブを作成しサイトにアクセス
$page = $browser->createPage();
$page->navigate('https://coconala.com/')->waitForNavigation();
// ページタイトル取得
$pageTitle = $page->evaluate('document.title')->getReturnValue();
echo $pageTitle;
}
しかしこれでは本当に遷移できたのかわかりません。
なので以下の実装を修正し、遷移できたことを戻り値として返却します。
※そもそもメソッド名がreachableなのでなにかしら結果を返さないと変ですよね😐
// 到達確認
function reachable(): bool
{
// 新しいタブを作成しサイトにアクセス
$page = $browser->createPage();
$page->navigate('https://coconala.com/')->waitForNavigation();
// ページタイトル取得
$pageTitle = $page->evaluate('document.title')->getReturnValue();
//echo $pageTitle;
// ブラウザからページを破棄
$tmpPage.close();
// トップページのタイトル確認
return $pageTitle === 'ココナラ - みんなの得意を売り買い スキルマーケット';
}
これで遷移が成功したのか失敗したのかわかります。
ログインする
ログインする際も「到達確認」で使用した実装を一部(ページオブジェクト生成部分)使用します。
同じコードを2回記述するのはよくないですよね。
なのでreachableの実装を分割しました。
// 到達確認
function reachable(): bool
{
// トップページを取得する
$tmpPage = getFirstPage();
// ページタイトル取得
$pageTitle = $tmpPage->evaluate('document.title')->getReturnValue();
//echo $pageTitle;
// ブラウザからページを破棄
$tmpPage.close();
// トップページのタイトル確認
return $pageTitle === 'ココナラ - みんなの得意を売り買い スキルマーケット';
}
// トップページを取得
function getFirstPage(): Page
{
// 新しいタブを作成しサイトにアクセス
$page = $browser->createPage();
$page->navigate('https://coconala.com/')->waitForNavigation();
return $page;
}
これで使うことができるようになりました。
function login() : bool
{
// トップページを取得する
$page = getFirstPage();
// ココナラにログインする(30秒待つ)
$evaluation = $page->evaluate('document.querySelector("li.c-mainNavBeforeLogin_item-pc a:first-child").click()')->waitForPageReload(Page::LOAD, 30000);
// ページタイトル取得
$pageTitle = $tmpPage->evaluate('document.title')->getReturnValue();
// タイトル確認
return $pageTitle === 'ログイン | ココナラ';
}
このログインで使用した$page
はこの後の処理でも大活躍する変数です。
このままではメソッド終了とともに消滅してしまうのでフィールド(クラス変数)として使用するように修正します。
class Coconara_Helper {
// ヘッドレスブラウザ
private $browser;
private $page; // ★
・・・
function login() : bool
{
// トップページを取得する
$this->page = getFirstPage();
// ココナラにログインする(30秒待つ)
$this->page->evaluate('document.querySelector("li.c-mainNavBeforeLogin_item-pc a:first-child").click()')->waitForPageReload(Page::LOAD, 30000);
// ページタイトル取得
$pageTitle = $this->page->evaluate('document.title')->getReturnValue();
// タイトル確認
return $pageTitle === 'ログイン | ココナラ';
}
ここでミスに気付く
フィールド変数にアクセスする場合は$this->xxxx
を使用することを失念していた箇所がありました。
該当するのは$browser
です。早速修正をしておきます。
$browser =.... // ×
$this->browswer =.... // 〇
まとめ
ココナラヘルパーにココナラへのアクセスおよびログイン機能を実装しました。
考えながら実装すると時間があっという間に過ぎますね。
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません