joppot

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

プログラミング

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

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

Pocket

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

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

関連記事

MAMPのSQLiteManagerを使用してsqlite3データベースの作成とデータベースファイルの設置

概要 みなさんこんにちはcandleです。今回はsqliteデータベースをMAMPを使用して作成しましょう。 PHP5.3からsqlite3のクラスが充実して、mysqlを使用しなくてもsqliteで …

MAMPのPHPからSQLite3データベースにアクセスして値を取得する

概要 みなさんこんにちはcandleです。MAMPのSQLiteデータベースとテーブルを作成して、レコードも挿入した事なので、値を取得してみましょう。

railsのgonで別ページでリロード後turbolinksで移動したら変数がundefindする場合の対処

概要 (追記 2016/05/18 この方法を行うと、turbolinksで問題が起きました。 turbolinksで移動した回数だけ、javascriptが実行されてしまいました。 例えば、 < % ...

ruby on railsに最強のwysiwygエディタ、Squireを導入する

概要 みなさんこんにちはcandleです。今回はruby on railsにsquire editorを導入したいと思います。 squireはオープンソースの便利なwysiwygエディタです。 カスタ …

wordpressのコメントフォームを編集し、名前とメールのデフォルト値を設定する

概要 みなさんこんにちはcandleです。今回はwordpressのコメントフォームをオーバーライドしてフォームの「名前」「メールアドレス」「url」のデフォルトバリューを設定したいと思います。 コメ …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ