不格好エンジニア (引っ越しました)

wordpress.comから引っ越しました。

【脱初心者】URLからWebサイトのサムネイルを生成して、Railsで配信する【ニュースアプリを作りたい人】

はじめに

ニュースアプリやリーダーアプリなどでは、記事のサムネイルを多用しています。今回は、記事のサムネイルを、記事のURLから自動生成する手法について調べてみます。実際には、URLから元記事のサムネイル画像を生成するようなAPIもいくつか提供されています。

しかし、やはりアプリの中で使うにはパフォーマンスに問題があったり、コストがかかる為、今回はこの機能を自作してみようと思います(といってもコア部分はライブラリを使う訳で、多分そんなに難しくなさそう)。

基本方針

Wkhtmltoimageを使用すれば、簡単に実現できそうです。WkhtmltoimageはリモートURLからサムネイルを生成するものです。内部的にはWebKitのレンダラーを用いているようです。
これを使ってURLからサムネイル画像を作成し、そのパスを下記の通りModelのプロパティに保持させる事ができれば、成功です。

Class Article
  def generate_thumbnail_from_url
    # do something ...    
    self.image_url = File.new(tempfile)
  end
end

インストール

Macであれば、対象のページに行って、対象のファイルをダウンロードしてきてポチポチするだけです。
CentOS6の場合は、こんな感じでインストールできました(下記の例ではAnsibleを用いてインストールしています)。

- name: check wkhtmltoimage is installed
  shell: wkhtmltoimage --version
  register: installed_version
  ignore_errors: True

- name: get rpm
  get_url: url=http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-centos6-amd64.rpm dest={{src_dir}}
  when: installed_version|failed

- name: install using rpm
  yum: name={{src_dir}}/wkhtmltox-0.12.1_linux-centos6-amd64.rpm state=present
  when: installed_version|failed

CentOSに手動でインストールする場合は、https://code.google.com/p/openesignforms/wiki/wkhtmltopdfをご確認ください。

実装

そのものズバリの記事があったので、こちらをご参照ください。Railsのモデルを用いたサンプルコードが記載されています。
Generating Website Thumbnails in Rails 4 using Dragonfly and wkhtmltoimage

実際には主要部分の抜粋なので、これだけでは動作しません。
一度、最後まで実装できれば、テストコードも含めて、この場で公開しようと思います。