CasperJSをパラメータ付きで実行しevaluteに引数を設定する、PHPから叩いてWebAPI化

2018-08-31

CasperJSの実践的な使い方として、「引数にURLを設定して起動することで、引数に合わせて様々なサイトをクロールする」だとか、「引数にIDとPASSを設定し、起動毎にログインするアカウントを変える」といった使い方があります。

WebAPI的な使い方をしたい場合などにおいて必須となる手法なので、共有しておきます。

また、ついでにPHPファイルから叩くことで、WebAPIを簡単に作る方法についても記載しておきます。
(ただし、PHPが本当にWebAPIに適しているのか?という点については、今回は特に触れません)

パラメータを付けてCasperJSを起動する

起動方法自体は想像付くかと思います。

簡単ですね、スペース空けてパラメータ入力するだけです。複数ある場合は、スペースを空けて複数設定すればOKです。

オプション付ける場合も変わりません。

パラメータの受け取り方は、以下になります。

casper.cli.argsでパラメータの配列が取得できます。

evaluteに引数を設定する

微妙にはまったのがこれ。「パラメータで設定した情報をinputに設定してpost」みたいなことをやろうとしたら、上手くevaluteに値が渡らないというケースに出くわしました。

ということで解決策。

おわかりいただけただろうか。

ちょっとわかりにくいですが、evaluteの第二引数に設定する。そして、evaluteのfunctionの引数に、evaluteの第二引数で設定した変数のキーを設定する。

これで、evalute内に変数の受け渡しが出来ます。

PHPからCasperJSを起動

execで叩くだけです。

大変シンプルですが、これで一応WebAPIによるスクレイピングや、自動ログインからの自動投稿などが実現出来ます。当たり前ですが、実運用を行う際には何らかの認証をかけます。

悪用も可能なアレなので、アレをアレする際は気を付けてください。