joppot

コピペで絶対動く。説明を妥協しない

プログラミング

phpのsnappyで複数のwebサイトのサムネイルを保存する

投稿日:2016年1月19日 更新日:


snappy_collect_image_top_thumb

概要

前回、snappyの基本的な使い方を試しました。
今回はsnappyを使って、あらかじめ、定義してある複数のwebサイトのサムネイルを保存してみたいと思います。

前提

composerがインストールされている
wkhtmltopdfがインストールされている。
適当なphpプロジェクトがある。

セットアップは以下の記事を参照してください。

phpのsnappyライブラリをmacで使用して、webサイトのサムネイルを取得する


snappyのインストール

phpのプロジェクトでcomposer.jsonを作成し、
composer.jsonに以下を記述します。

touch composer.json
{
  "require": {
    "knplabs/knp-snappy" : "*"
  }
}
composer install

snappyがインストールされました。

サムネイルを保存するディレクトリを作成します。

mkdir images

今のところ、phpプロジェクトは以下のような構成になります。

wkimage_project

index.phpを作成します。

touch index.php

以下を記述します。

<?php
use Knp\Snappy\Image;
require __DIR__ . '/vendor/autoload.php';
$snappy = new Image('/usr/local/bin/wkhtmltoimage');

$snappy->setOption('width', '1024');
$snappy->setDefaultExtension('jpg');

$web_site = array(
  "google" => "https://www.google.co.jp",
  "wikipedia" => "https://ja.wikipedia.org/wiki/メインページ",
  "yahoo" => "http://www.yahoo.co.jp"
);

foreach ($web_site as $name => $url){
  file_put_contents("images/${name}.jpg",$snappy->getOutput($url));
}
?>

以下の項目はsnappyのimageライブラリを使用する事の宣言と、composerでインストールしたライブラリの読み込み、snappyインスタンスの作成です。「/usr/local/bin/wkhtmltoimage」のパスはもしかすると個人のパソコンで違うからもしれません。その場合は「which wkhtmltoimage」で調べてください。

use Knp\Snappy\Image;
require __DIR__ . ‘/vendor/autoload.php’;
$snappy = new Image(‘/usr/local/bin/wkhtmltoimage’);

setOptionで幅を1024にしてい、画像の種類をjpgにしました。

$snappy->setOption(‘width’, ‘1024’);
$snappy->setDefaultExtension(‘jpg’);

サービス名とサイトのurlの連想配列

$web_site = array(
“google” => “https://www.google.co.jp”,
“wikipedia” => “https://ja.wikipedia.org/wiki/メインページ”,
“yahoo” => “http://www.yahoo.co.jp”
);

連想配列をeachして取り出し、それぞれの画像をgetOutputで取得し、images/サービス名で保存しています。

foreach ($web_site as $name => $url){
file_put_contents(“images/${name}.jpg”,$snappy->getOutput($url));
}

で、これの実行なんですけど、当初はapacheでindex.phpを実行していたのですが、phpコマンドからできるので、以下のコマンドで実行します。

php index.php

imagesフォルダにgoogle.jpgやyohoo.jpgが保存されます。

site_images

ちなみに、現在のプログラムはウェブサイト全体の画像をとってきましたが、高さをある程度で切りたい場合は

$snappy->setOption('crop-h', '400');

を記述すれば、上から何ピクセルかでトリミングすることができます。

まとめ

webサイト全体の画像を撮りたい時って、webサービス作っているとよくあるのですが、いかんせん、ブラウザの拡張だと、GUI操作が大変ですが、これで一気に楽になりますね。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Mysqlテーブルの照合順序を変更する

概要 みなさんこんにちはcandleです。今回はテーブルの照合順序を変更する方法を行います。 この方法はやっても、mysqlクエリー1行ですみます。早速やりましょう。 テーブルの照合順序を変更する 次 …

gemspecのsummary項目とdescription項目の違いに付いて

概要 みなさんこんにちはcandleです。 gemを自作していたら、gemspecのところでsummaryとdescriptionの違いが分からなかったので、 調べたら、公式ページに書いてあったので、 …

React webでreact-simple-formatを使う

概要 みなさんこんにちはcandleです。今回はreactでsimple-formatを使ってみたいと思います。simple-formatは割とRuby on Railsでは有名で、よく使われます。R …

fabricでmysqlコマンドを実行する関数を自作する

概要 皆さんこんにちはcandleです。今回はfabricからリモート先のサーバのmysqlを実行するための環境変数と関数を作成したいと思います。 mysqlは一般にmysqlコマンドをログインしてか …

Mysqlで今日以降の最も近い日付を取得する

概要 みなさんこんにちはcandleです。今回はmysqlで今日以降の最も近い日にちを取得する方法を紹介します。 ライブや、イベントなどで、今日から見て、最も近い日のデータを取得したみたいなことってあ …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー