やったこと

webサービスを作るときに考えたことを垂れ流します

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」というディレクトリにクッキーを保存しています。
こんな方法で大丈夫なんでしょうかね・・一応手元ではちゃんと動いていますが・・。

今回作ってるのは自分で使う用のツールなので、まあこれでいいかなと思っています・・。