10月27日に行われた、第28回北海道開発オフに参加しました。
今回は13人が参加。インフィニットループさんの会議室をお借りしました。ありがとうございます!
電源やネットワークが完備されており、大変過ごしやすい会場でした。
(無料でお借りできる上に、うまい棒がついてくる!)
北海道IT勉強会カレンダーの更新を自動化したい
私の今回のテーマはこれ。
北海道IT勉強会カレンダーについて
IT勉強会カレンダーから「北海道」に関連するキーワードを抜き出した「北海道IT勉強会カレンダー」を管理しています。
北海道IT勉強会カレンダー http://bit.ly/doItCal
これは、2010年末に作り始め、2011年4月に公開しました。
今できていること
北海道IT勉強会カレンダーを更新するための情報を取得するスクリプトを作り、それを使ったGoogleカレンダーを公開しています。
最初はただのrubyスクリプトだったのですが、
その後、@niku_nameさんのおかげでrubyのgemとして動く形になり、現在に至ります。
https://github.com/irasally/doItCal
このプログラムが自動でやってくれることは
<前回取得してから追加されたイベントを差分ファイルとしてical形式で取得する>
ことです。
やりたいこと
今は、gemのコマンドを実行して、その結果作成されたicalファイルを自分でカレンダーに追加インポートしているのです。
gemコマンドなのでファイル取得はcron設定することで自動化できるのですが、その後のインポートが手動のため、今は毎回気が向いた時にコマンドを叩く、という運用になっています。
ここを、自動化したい…と思って気がつけば2年近くたってしまっていたので、開発オフでやりたいな。と。
個人的にちょっとRubyに慣れ親しんできたのもあり、いろんなgemを使いこなせるんじゃないかなあ、使ってみたいなあと思うようになってきたのもやろうと思った理由です。
開発オフでやったこと
最初に環境を整えた
Macに入っているXCodeが古い…..ついでに homebrewの挙動もおかしい….
朝のテンションが高めだったのでしょう、思い切ってhomebrewを入れなおすことから開始しました。
(こういうことは開発オフの前に家でやっておくべき。)
気持ち良い開発環境が整い、大変満足です。
(これにより、札幌RubyKaigi2012で動かなくて泣いたRabbitが自分のマシンで動くようになりました!)
今回実現したいことのためには、「nokogiri」を使えばいいらしい、という情報をなんとなく得ていたので、環境が整った後、nokogiriをinstall。
nokogiriじゃ足りなかった
nokogiriは「htmlをパース・解析する」ためのライブラリでした。
私がやりたいのは「html上の操作を自動化する」こと。
これには「mechanize」を使えば良いと教えてもらい、
早速インストール。
使い方はExampleも豊富で得にハマることもなく、Googleカレンダーにログインするところまではできました。
その後、カレンダーの設定ページまで遷移するのが下のソースコードです。
exec.rb
# -*- coding: utf-8 -*- require 'mechanize' a = Mechanize.new a.get('https://www.google.com/calendar/') do |login_page| cal_page = login_page.form_with(:id => 'gaia_loginform'){ |f| f['Email'] = 'ないしょ' f['Passwd'] = 'ないしょ' }.submit a.get('https://www.google.com/calendar/render') do |setting_page| # setting_page.link_with(:text => 'カレンダーをインポート') end end
mechanizeでもだめだった
設定ページから「カレンダーをインポート」リンクを押し、ファイルを添付・アップロードする処理は、Ajaxによる処理でした。
うまく値が取れないなあと思っていたら、mechanizeではAjax処理を検知することはできない。
http://stackoverflow.com/questions/3852678/can-mechanize-read-ajax-ruby
mechanize自体にJavaScript engineが搭載されているわけではないから、Ajax処理を検知できない。
Ajaxによって表現される部分を自動化するにはWatirとかSeleniumとかそういうのを使わないといけないみたいだ。
うーん、どういう方針にしていこうか・・・・・
ここで詰まったところまでが今回の開発オフの成果です。
(プログラムをもう少し書き進めてからブログ公開しようと思っていたら先に手詰まりになった形)
icalファイルのアップロードという形ではなく、Google Calendar APIを使用して、スケジュールを1件1件追加していくのが良いのかなあ。
icalファイルを自分でサーバー管理するのはコストがかかるのでやりたくないなあ。
次回開発オフまでに方針を整えておきたいところです。
美味しい写真
お昼ごはんはラーメンだったー
参加者が10人超えると、みんなで一緒に昼ご飯を食べるお店がなかなか見つからないですね。(´・ω・`)
そして、今回はたこ焼きの差し入れをいただきました!ありがとうございますー!
年内にもう1回開催できたらいいな、と思っています。(そうすれば年始が30回記念に!!)