前回はLINEのBOTにメッセージを送ることで、 ハイライトを取得して返信してくれるようにした。 現状では、設定したページ数だけスクレイピングして、全てのハイライトを返信することになっているので、 何度も同じハイライトが送られてきてしまう。 今回は最新のハイライトだけを返信するようにする。

今回でこのシリーズは最後。

方針

今まで取得したハイライトを記録しておいて、 差分だけを返信するという単純な仕様にした。

記録する方法は、これまた単純に外部ファイルに保存するだけ。 容量が増えてきたら、ソートしておく、データベースに記録する、などの工夫が必要になるかもしれないが、 とりあえず問題になるまでは単純な実装にする。

JSON形式で保存

以下のメソッドで@highlightsという配列をJSON形式にして保存する。 'json'を忘れずにrequireすること。

  # ハイライトをJSON形式にして外部ファイルに保存する
  def store_highlights
    File.open(JSON_FILE_NAME, 'w') do |file|
      JSON.dump(@highlights, file)
    end
  end

JSON形式のファイルを読み出し

以下のメソッドでJSON_FILE_NAMEというJSON形式ファイルから@highlights配列にデータを読み出す。

  # 外部ファイルから既に取得しているハイライトを読み出す
  def restore_highlights
    return unless File.exist?(JSON_FILE_NAME)
    File.open(JSON_FILE_NAME, 'r') do |file|
      @highlights = JSON.load(file)
    end
  end

あとは、@highlightsに存在しないハイライトだけをLINEで送信し、外部ファイルに保存すればよい。

全ソース

githubに全ソースをあげた。 https://github.com/shidetake/line_kindle_highlights