高木のブログ

HTBエナジーの「電気ご使用量のお知らせ」PDFファイルをRubyでパースする

2020/11/06

過去の電気料金のデータでゴニョゴニョしたかった。
どうやって取るか考えて、やったことのないPDFをパースして取得することにした。
PDFは毎月メールでPDFが送られてくる。

取りたい情報は赤丸で囲った部分。 電気ご使用量のお知らせ

yob/pdf-reader - GitHub

gem install pdf-reader
app.rb
require 'pdf-reader'

reader = PDF::Reader.new('filename.pdf')
page = reader.pages.first

result = page.text.delete('  ').split("\n").each_with_object({}) do |row, hash|
  case
  when row.include?('ご契約種別')
    hash['年月'] = row[/(\d+年\d+月分)/, 1]
  when row.include?('ご契約容量')
    hash['使用量'] = row[/(\d+)kWh/, 1].delete(',').to_i
  when row.include?('請求予定金額')
    hash['請求金額'] = row[/([\d,]+)円/, 1].delete(',').to_i
  when row.include?('基本料金')
    hash['基本料金'] = row[/([\d,.]+)/, 1].delete(',').to_f
  when row.include?('電力量1段料金')
    hash['電力量1段料金'] = row[/([\d,.]+)円/, 1].delete(',').to_f
  when row.include?('電力量2段料金')
    hash['電力量2段料金'] = row[/([\d,.]+)円/, 1].delete(',').to_f
  when row.include?('電力量3段料金')
    hash['電力量3段料金'] = row[/([\d,.]+)円/, 1].delete(',').to_f
  when row.include?('燃料費調整額')
    hash['燃料費調整額'] = row[/([\d,.-]+)円/, 1].delete(',').to_f
  when row.include?('再エネ発電促進賦課金')
    hash['再エネ発電促進賦課金'] = row[/([\d,.]+)円/, 1].delete(',').to_f
  end
end

puts result
$ ruby app.rb
{"年月"=>"2020年9月分", "使用量"=>310, "請求金額"=>7703, "基本料金"=>815.1, "電力量1段料金"=>2256.0, "電力量2段料金"=>4514.4, "電力量3段料金"=>289.6, "燃料費調整額"=>-1094.3, "再エネ発電促進賦課金"=>923.0}"}

とりあえず雑だけど、取りたい値は取れたので良き。
Gem使ったとしても綺麗に取れるわけじゃなかったので、もうPDFのパースはしたくない。

参考

RubyでPDFをCSVライクにパースする - Qiita


Pixela