前回はクローラーを作成してハイライトを取得するところまでだった。 今回はサーバで起動してLINE通知するところまでを作る。

サーバで起動

前回はSeleniumを使ったが、サーバで実行する場合はGUIアプリケーションにはできないので、 POLTERGEISTを使う。

  def initialize
-   Capybara.current_driver = :selenium
+   Capybara.current_driver = :poltergeist
-   Capybara.javascript_driver = :selenium
+   Capybara.javascript_driver = :poltergeist
    Capybara.app_host = 'https://kindle.amazon.co.jp'
    Capybara.default_max_wait_time = 5
-   Capybara.register_driver :selenium do |app|
+   Capybara.register_driver :poltergeist do |app|
-     # 最新のSeleniumではFirefoxが動作しない問題があるのでchromeを使う
-     Capybara::Selenium::Driver.new(app, :browser => :chrome)
+     Capybara::Poltergeist::Driver.new(app, {:timeout => 120, js_errors: false})
    end
+   page.driver.headers = {'User-Agent' => 'Mac Safari'}
  end

Amazonのウェブサイト固有の問題で、ユーザーエージェントの変更が必要なので、Mac Safariとしている。

これでサーバ(今回はUbuntuを使った)で動作するようになった。

LINE通知

line-bot-apiを使った。だいたい以下のような感じ。Channel Secret, Channel Access Token, userIdはLINE developersから取得して入力すること。 push_highlightメソッドを使って、前回標準出力していた文字列をLINEに送れる。

  def initialize(driver)
    Capybara.current_driver = :poltergeist
    Capybara.javascript_driver = :poltergeist
    Capybara.app_host = 'https://kindle.amazon.co.jp'
    Capybara.default_max_wait_time = 5
    Capybara.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new(app, {:timeout => 120, js_errors: false})
    end
    page.driver.headers = {'User-Agent' => 'Mac Safari'} if driver == POLTERGEIST

+   @line = Line::Bot::Client.new do |config|
+     config.channel_secret = ''
+     config.channel_token  = ''
+   end

+   @user_id = ''
  end

+ def push_highlight(highlight)
+   message = {
+     type: 'text',
+     text: highlight
+   }

+   @line.push_message(@user_id, message)
+ end

続きはこちら