PhantomJSでサムネイルの取得を自動化する

前に作ったウェブサイトギャラリーで使ってるサムネイル画像の取得を自動化した。
それまでは、URLを渡すとサムネイル画像を提供してくれる外部のAPIを使ってたけど、Node.jsでフォルダ内の全HTMLをキャプチャし画像化という記事を見て、おもしろそうだったのでやってみた。
実際にはこの記事のサンプルより少し複雑になってしまった。

PhantomJSコマンドラインから実行できるブラウザで、これを利用してサイトのスクリーンショットを取得した。
そのスクリーンショットを、EasyImageというモジュールを使って縮小してる。
最初からスクリーンショットのサイズを指定して生成することもできるけど、大きめの画面でスクリーンショットを撮影して縮小したほうがきれいに撮れる。

PhantomJSの操作を非同期で行ってるんだけど、並行タスクの数が増えてくるとかなりマシンの負荷が増えてくるので、とりあえずタスクを10ずつに分割して、その10のタスクが終了したら次の10のタスクを実行するようにした。
本当は並行タスクの数を10までに制限するというような形にするべきだけど、あんまりきれいな実装が思いつかなかったのでひとまずこれにした。
bluebirdにそんなAPIがあるらしいので後で調べる。

既存のものを使えばだいたいなんでもできるんだなあと少し感動した。