joppot

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

プログラミング

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

投稿日:


snappy_top_thumb

概要

みなさんこんにちはcandleです。今回はsnappyを使用して、ウェブサイトのサムネイルを自動的に取得したいとおもいます。

snappyはそれ自体がhtmlを画像にするスクリプトではなく、wkhtmltoimageというlinuxやmac、windowsでうごくCUIソフトを使っています。ゆえに、このライブラリを使うには、別にwkhtmltoimageをインストールする必要があります。

前提

composerがインストールされている。
snappyのインストールはcomposerを使用します。

apacheやmampなどphpが動く環境が整っている。

brewがインストールされている。
brew caskがインストールされている。


wkhtmltoimageをインストールする

wkhtmltoimageはwkhtmltopdfというソフトの付属で付いてくるので、それをインストールします。

brew cask install wkhtmltopdf

brew_cask_install_wk

これで準備は完了です。

phpのプロジェクトを作成する

apacheのdocument rootかmampのhtdocsとかに移動します。
私はホームディレクトリのapacheフォルダがapacheのドキュメントルートになっているのでそこで、作業をします。

フォルダを作ります。

cd apache
mkdir wkimage
cd wkimage

create_wkimage_prj

composer.jsonファイルを作成します。

touch composer.json

以下を記述します。

{
  "require": {
    "knplabs/knp-snappy" : "*"
  }
}

composer_knp_snappy

ファイルを保存して、以下のコマンドからsnappyをインストールします。

composer install

composer_install_knp_snappy

snappy 以外にも必要なライブラリがインストールされています。

snappyのプログラムを書く

index.phpを作成します。

touch index.php

以下を記述します。

<?php
use Knp\Snappy\Image;
require __DIR__ . '/vendor/autoload.php';

$url="https://www.google.co.jp";

$snappy = new Image('/usr/local/bin/wkhtmltoimage');

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

header('Content-Type: image/jpeg');
echo $snappy->getOutput($url);

?>

最初の行はknpのimageライブラリを使用することの宣言
2行目はcomposerでインストールしたライブラリの呼び出し

$snappy = new Image(‘/usr/local/bin/wkhtmltoimage’);

この部分はwkhtmltoimageのコマンドのパスを入れます。brewで入れた場合はここですが、他の方法で入れば場合はパスが異なる可能性があります。「which wkhtmltoimage」で調べて適宜変更してください。

setOptionはwkhtmltoimageのオプションを指定できます。

headerで、画像でファイルでああることを宣言し、echo $snappy->getOutput($url);で画像を出力します。

サーバを起動して、ページにアクセスすると、$url=”https://www.google.co.jp”;で指定したgoogleの画像が表示されます。

google_image_top_page

まとめ

これをうまく使えば、webサイトの画像の取得が簡単になりますね。もちろん、著作権的なところは気をつけて下さい。

スポンサードリンク

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

-プログラミング
-

執筆者:


comment

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

関連記事

gitpythonでfirst commitする

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

railsのfluent-logger gemを使ってユーザーのアクセスをfluentdサーバに収集する

概要 みなさんこんにちはcandleです。前回からfluentd関連の記事を続けていますが、今回辺りから実用的な使い方を書いていきたいと思います。 fluentdと言えば、ビックデータで扱うようなデー …

Rails pluginを使ったgemの作り方[2](rails組み込み編)

概要 みなさんこんにちはcandleです。前回に引き続き、gemの作成をやっていきましょう。 今回はgemを作成したら、それをrailsプロジェクト上で読み込み、動作テストをするところをやります。 前 …

railsの多対多リレーションでcounter culture を使用する

概要 みなさんこんにちはcandleです。 今回は多対多のリレーションが貼られているrailsアプリケーションで、counter cultureを使ってレコード数を数えてみたいと思います。 以下のよう …

入門ReactでGSAPアニメーションの使い方

概要 みなさんこんにちはcandleです。今回はReactでGSAPを使ってみたいと思います。 簡単にアニメーションが使えるjsライブラリはjQueryが有名です。ただ、jQueryとReactは相性 …

  • English
  • 日本語

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