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; } }
コメント