PHPだと、Javascript使ったサイトの情報とかとってこれない(?)ので
Phantomjsとか使うとかなりおもしろいのだ
・PHP Phantomjsのインストール
composer.jsonファイルを下記の内容で作成
// composer.json
{
"config": {
"bin-dir": "bin"
},
"scripts": {
"post-install-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"
],
"post-update-cmd": [
"PhantomInstaller\\Installer::installPhantomJS"
]
}
}
bin-dirの中にphantomjsファイルが作成されるよ!
用意したらこちらのコマンドで実行
$ composer require "jonnyw/php-phantomjs:4.*"
■ PHP PhantomJSを使ってみる!
まずはめっちゃ基本
クラスがないよ~みたいに怒られたら
require APP . 'vendor/autoload.php';
こんな感じにautoload.phpを呼んでみよ~
<?php use JonnyW\PhantomJs\Client; $client = Client::getInstance(); $request = $client->getMessageFactory()->createRequest(); $response = $client->getMessageFactory()->createResponse(); $url = 'file:///path/to/hello_phantomjs.html'; $request->setUrl($url); $client->send($request, $response); echo $response->getContent();
次は、いろいろカスタマイズ
<?php
require APP . 'vendor/autoload.php';
use JonnyW\PhantomJs\Client;
use JonnyW\PhantomJs\DependencyInjection\ServiceContainer;
use JonnyW\PhantomJs\Http\CustomRequest;
// php-phantomjsを使う(カスタムJSスクリプトを使用)
$location = APP.'vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Resources/procedures';
$serviceContainer = ServiceContainer::getInstance();
$procedureLoader = $serviceContainer->get('procedure_loader_factory')->createProcedureLoader($location);
$client = Client::getInstance();
$client->getEngine()->setPath(APP.'bin/phantomjs'); // phantomjsの場所
$client->getEngine()->addOption('--config=/path/to/config.json');
// カスタムJSスクリプトファイルを使用
$client->setProcedure('get_page_property'); // 自分で作ったファイルを指定
$client->getProcedureLoader()->addLoader($procedureLoader);
$response = $client->getMessageFactory()->createResponse();
$request = new CustomRequest(); // 独自パラメータ(setUserAgentなど)を使用するのでCustomRequestを使用
if ($pcsp == '0') {
// PC
$request->setUserAgent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36');
$viewportWidth = 1280;
$viewportHeight = 1024;
} else {
// SP
$request->setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/18.1.132077863 Mobile/13G36 Safari/600.1.4');
$viewportWidth = 375;
$viewportHeight = 667;
}
$request->setViewportSize($viewportWidth, $viewportHeight);
$request->setUrl($url); // URL
$request->setOutputFile($captureFile); // キャプチャファイル
// phantomjs実行
$client->send($request, $response);
echo $response->getContent();
実際にphantomjs用のファイルを作成してるところはこちら
jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Resources/procedures
http_default.proc
今回、こちらをコピーしてオリジナルのprocファイルを同じとこに作成してみた
get_page_property.proc
procファイルに独自の変数を渡したいときとかは、こんな感じのファイルを作成して読んであげる
app/vendor/jonnyw/php-phantomjs/src/JonnyW/PhantomJs/Http
CustomRequest.php
<?php
namespace JonnyW\PhantomJs\Http;
class CustomRequest extends Request
{
protected $userAgent;
public function setUserAgent($userAgent)
{
$this->userAgent = $userAgent;
return $this;
}
public function getUserAgent()
{
return $this->userAgent;
}
}

コメント