Goutteでクッキーをserializeによって保存する方法!
PHPのスクレイピングライブラリ「Goutte」で、Cookieを保存する方法を考えました。
現在の「Goutte」はまだ開発途上で、Cookieをファイルとしてセーブしたりロードしたりする機能がないみたいです・・。
Githubでは「FileCookieJar」というのを組み込んで、Cookie保存機能に対応している頑張り屋さんがいるようですが、私には難しくてちょっと何をしているか分かりませんでした・・。
↓
Add support for other types of CookieJar, eg. FileCookieJar and SessionCookieJar by hoducha · Pull Request #250 · FriendsOfPHP/Goutte · GitHub
私はちょっと乱暴ですが、PHPの「serialize」を使ってオブジェクトを丸ごとファイルに保存する方法を試してみました。
コードは以下のようなもの。
require_once './goutte/vendor/autoload.php'; use Goutte\Client; $client = new Client(); //cookie取り出し $cookie = unserialize(file_get_contents("./cookie/cookiefile")); if (!empty($cookie)){ $client->getCookieJar()->updateFromSetCookie($cookie); } //アクセス $crawler = $client->request('GET', 'http://hogege.com/'); //cookie保存 $cookie = $client->getCookieJar()->all(); file_put_contents("./cookie/cookiefile", serialize($cookie));
直下の「cookie」というディレクトリにクッキーを保存しています。
こんな方法で大丈夫なんでしょうかね・・一応手元ではちゃんと動いていますが・・。
今回作ってるのは自分で使う用のツールなので、まあこれでいいかなと思っています・・。