9703


Railsを使ってニュースサイトやブログ記事などのフィードを集めるサイトを作っています。そこでURLだけでなく、サムネイル画像も一緒に表示させたいのですが、どのような方法で取得するのがいいのでしょうか？

よろしくお願いします。


CC BY-SA 3.0
2015-04-30T03:21:52.260
9679
2015-04-30T14:14:51.367
9546
question
ruby-on-rails ruby
Rubyでサムネイル画像の取得方法


Rubyの組み込み関数であるsystem を使うのはどうでしょうか  
まずURLを文字列処理で取得し,system関数からUnix シェルのwgetを使い画像を取得するというのはどうでしょうか


CC BY-SA 3.0
2015-04-30T03:32:58.733
9680
2015-04-30T04:42:10.047
2015-04-30T04:42:10.047
7978
7978
9679
answer


`paperclip`というgemがおすすめです。  
<https://github.com/thoughtbot/paperclip>


CC BY-SA 3.0
2015-04-30T04:00:10.923
9682
2015-04-30T04:00:10.923
8558
9679
answer


もし質問主さんの聞きたいことが、RSSフィードを集めてきてそこから参照できる各ウェブページの中から画像を抽出し、フィードの内容と一緒にサムネイル表示させたい、ということであれば、画像の取り込み方法などはすでに回答された方がおっしゃってるようにpaperclipやその他のgemが使えると思いますが、ページ内のどのコンテンツから画像を取ってくるのか、そのアルゴリズムを決めたいということであれば、タグの構造やmicroformat,
wai-aria等の情報を解析して試行錯誤するしかないようにも思います。  
もしかしたらその辺をうまく探してくれるツールがあるのかもしれませんが。。。


CC BY-SA 3.0
2015-04-30T13:47:49.980
9703
2015-04-30T13:47:49.980
9403
9679
answer


ウェブサイトのスクリーンショットを、サムネイル画像として保存したいということでしょうか？

ウェブサイトのスクリーンショットを取るためには、Ruby からウェブブラウザを起動して、その表示をキャプチャーする必要があります。WebKit
を使う方法など色々ありますが、Selenium を使うサンプルを載せておきます。firefox を事前にインストールしておいてください。

取得したスクリーンショットは、ImageMagick や PaperClip を使えば、サムネイル画像の大きさにリサイズできます。

Gemfileに以下を追加。

[code]

    gem 'headless'
    gem 'selenium-webdriver'
    
[/code]

app/models/capture.rb

[code]

    require 'headless'
    require 'selenium-webdriver'
    
    class Capture
      def self.run
        Headless.ly do
          driver = Selenium::WebDriver.for :firefox
          driver.navigate.to 'http://stackoverflow.com/'
          driver.save_screenshot 'screenshot.png'
          driver.quit
        end
      end
    end
    
[/code]

スクリーンショットを取得(Rails.root にscreenshot.png が保存される)

[code]

    pry(main)> Capture.run
    => nil
    
[/code]


CC BY-SA 3.0
2015-04-30T14:14:51.367
9705
2015-04-30T14:14:51.367
9508
9679
answer