色々スクレイピングしてGoogleスプレッドシートにぶっこむ

色々スクレイピングしてGoogleスプレッドシートにぶっこむ

弐ノ弐ハッピーアワー行ってきました。
どうも、山下です。
知ってますか?弐ノ弐のハッピーアワー。
毎日17時〜18時半まで生ビールと焼き餃子が半額なんです。
暴飲暴食な僕と宮路くんでいっても二人で4800円ですよ!!!
福岡の皆さん是非弐ノ弐ハッピーアワーお勧めです。
(普通に美味しいです)

さて、今日は昼間ちょっと時間があったので、rubyでスクリプト書いてました。

解決したいこと

今ぼくはGMOペパボという会社でWEBエンジニアとして働いていて、コードは全てGitHubで管理されています。
僕達が書いたコードの本番リリースは決済システムでリリース決済が下りた後、デプロイツールで数クリックで本番にデプロイされる状況にあります。

ただ最近ちょっと悩みなのが、バグが原因でシステム停止などが起こった場合に、その時の温度感だけで

「最近不具合多くね?停止時間長くね?あいつ不具合多くね?」

なんて話になりがちであったりします。

しかし、デプロイツール非常に便利なのですが、不具合があった時にリリース回数、システム停止時間、影響顧客数などの統計を取ろうと思った時になかなか難しかったりして、数字での管理が難しい状況に有ります。
最初に考えたのはRedmineあたりで連携させてうまいことやれないかな、、、なんて検討してみたのだけど、ちょっと都合よさげなプラグインは見つけきれませんでした。

こうなると自前でAPI叩いてDBにデータぶっこんで、上モノをRailsあたりで書こうかなんて話になりがちですが、ちょっとした数字を管理したいのに稼働かけまくるのもイマイチなので、データの出力先としてGoogleスプレッドシートいんじゃね??なんて思ったわけです。

こちらGoogleからAPIも提供されていて、WEB上のスプレッドシートのセルにデータを書き込むなんてこともAPIで出来ますし、各言語のラッパーライブラリもあって結構簡単に使える感じでした。
なにより普通にExcelと機能変わらないので数字こねくり回すの非常に便利なんですね。
僕、Excelマイスターですし

書いてみた

実際仕事で使うかどうかは別にして、ペパボだとリリースは社内システムの決済が下りた後でないと実行できない運用ルールがあるので、その決済システムからデータを抜くイメージでスクレイピングスクリプトを書いてみました。
今日は社内にアクセスする環境がなかったので便宜上Amazonにログインして購入履歴をスプレッドシートに吐いてみたのです。
コードはGitHubにございます。

スクレイピングの方はシステムに合わせて書く必要がありますが、Googleスプレッドシートはこんな感じですね。

        # ログイン
        def login(id=nil,password=nil)
            id ||= @@id
            password ||= @@password
            sid ||= @@sid
            @g = GoogleDrive.login(id, password)
            @s  = @g.spreadsheet_by_key(sid).worksheets[0]
        end

        # データ追加
        def addData(lst)
            rn = 1
            cn = 1
            lst.each{|row|
              row.each{|col|
                @s[rn,cn] = col.to_s
                cn += 1
              }
              cn = 1
              rn += 1
            }
            @s.save
        end

ログインして、addDataに多次元配列渡してあげると行1列1から順に書き出してくれる感じです。
ただし一個だけ注意事項。

~/dev_mechanize (master) % ruby client.rb
WARNING: GoogleDrive.login is deprecated and will be removed in the next version. Use GoogleDrive.login_with_oauth instead.

Google Driveの認証方式が現状はGoogleアカウントID、パスワードで通りますが、次のバージョンからはトークンを利用したoauthじゃないと通らなそうなので、そこは対応が必要です。

出力されたイメージはこんな感じですね。
\"スクリーンショット
TENGAとか買ってなくてよかった
どこの会社も業務系のシステムからデータ抜きたいけどAPIとかねえしな・・・なんていう話はよくあると思うので、活用して見てはどうでしょうか。。
それでは!

コメントは受け付けていません。