joppot

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

プログラミング

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

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

Pocket

snappy_collect_image_top_thumb

概要

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

前提

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

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

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

SPONSORED LINK


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

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

関連記事

railsのscaffoldでremote formで送信後jsonを取得する

概要 みなさんこんにちはcandleです。 今回はrailsのformをremoteを使ってajaxした時に、 サーバに送った値をjavascript側で受け取る方法を紹介します。 ちなみに、私は下の …

gitpythonでfirst commitする

概要 みなさんこんにちはcandleです。今回はgitpythonで、初めてのコミットをする方法を紹介します。 gitpythonでコミットは難しくないのですが、初めてのコミットは要領が違ったので、ま …

macにmiddlemanの環境構築をする

概要 みなさんこんにちはcandleです。今回はmacにmiddlemanの環境構築をしてみたいと思います。 middlemanといえばwebサイト作成支援ツールみたいなものです。 githubやhe …

ruby on railsのckeditor gemをapacheのproductionの本番環境で動かす

概要 みなさんこんにちはcandleです。今回はckeditorを本番環境で動かしてみたいと思います。 とは言っても基本的な記述はdevelopment環境と同じなので、そこまでは前回の記事を参照お願 …

macでreact nativeの環境構築をして、iosアプリのhello worldをする

概要 みなさんこんにちはcandleです。 今回は、react nativeの環境構築をmac上で行い、iosアプリでhello worldをしてみたいと思います。 react nativeはreac …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ