スクレイピングあるある

f:id:whitech0c0late:20180407012745p:plain

もんだい

↑のようなDOMから、開始時間, 終了時間を抜き出すとします。

しかしながら、ちゃんと対応していないと1つの行だけ失敗してしまうようなことが稀に よくあります。なにかわかりますか??(ぱっと見てわかったらあなたは超上級スクレイパーです。)

こたえ

10:00〜10:30 テレビ東京系「特捜警察ジャンポリス生駒里奈

かいせつ

想定していたやつ

2.5.1 (main)> "18:55~21:54".split('')
=> ["18:55", "21:54"]

想定してなかったやつ

2.5.1 (main)> "10:00〜10:30".split('')
=> ["10:00〜10:30"]
2.5.1 (main)> '' == ''
=> false

2.5.1 (main)> ''.encode(Encoding::Shift_JIS)
Encoding::UndefinedConversionError: U+FF5E from UTF-8 to Shift_JIS

2.5.1 (main)> ''.encode(Encoding::Shift_JIS)
=> "\x{8160}"

かいけつ例

2.5.1 (main)> "10:00〜10:30".tr('', '').split('')
=> ["10:00", "10:30"]

gsub より tr のが速いっぽい

ちなみに

CSV でいろいろ対応とかするときも、絶対ハマるから encoding して へんなやつは replace するとかするとよいよね〜って話...でしたッ!

坂道発信中っていうLINE Bot つくってる

できること

いまのところできることはこれだけ

  • 毎朝、乃木坂の出演情報(tv, radio, magazine, release) が通知される
  • リマインダーを登録できる (tv, radio)
  • 雑誌 (magazine, release) はAmazonのリンクへ遷移できる

流れはこんな感じ

f:id:whitech0c0late:20180320185133p:plainf:id:whitech0c0late:20180320185119p:plainf:id:whitech0c0late:20180320185636j:plain
  1. 情報くる
  2. リマインダーセットする
  3. リマインダーを受け取る

今後

  • 欅坂とか他の坂道グループの情報に対応する
  • 雑誌とかのメディアにも対応する (対応済み)
  • Web版を作って、プッシュ通知をカスタマイズできるようにする
    • 推しメン登録とかする
  • インタラクティブにもっといろいろできるようにする
  • LINE Pay とかも気軽につかえるのかな

開発版だけど (50人限定っぽい)

バグあると思われますがが。 使ってみてのなにかあれば幸いです。

https://qr-official.line.me/M/pHJDflsjJ2.png

友だち追加

追記 (2018/03/30)

追記

worker とめて(インタラクティブな動きとタイマー)、配信も Amazon の雑誌だけを対象にした。

ActiveRecord で更新した diff 知りたいとき

user レコードの uid, name をアップデートした diff

(id, created_at, updated_at の diff は抜いた)

(main)> user = User.find 1
(main)> old_user = user.dup
(main)> user.update(uid: 'fugafuga', name: 'ふが')
(main)> diff = (user.attributes.to_a - old_user.attributes.to_a).map(&:first) - %w(id created_at updated_at)
(main)> p diff.map{|column| "#{column} : #{old_user[column]} => #{user[column]}"}
=> ["uid : hogehoge => fugafuga", "name : ほげ => ふが"]

changed とか使うともっとヨサソウ

qiita.com

同じような gem もあった

古いかな

github.com

常に履歴を残したい場合は、こっちの gem がヨサソウ

Qiita の投稿の履歴管理にも使われてるっぽい

github.com