5/21/2012

Google Doodles検出のスクリプト

Googleのトップページは、記念日や偉人の誕生日など特別の日にはGoogle Logoのデザインが変わる。

(2012/5/22 金環日食の例)


Googleでは"Google Doodles"と表現していて、過去に使われた画像をまとめて紹介している。日本では一般的には「ホリデーロゴ」と言われており人気が高い。「Googleのトップページ観察日記」の様な、ただひたすらにGoogleトップページを観察するブログも存在する。

かく言う私も出るたびにfacebookに画像をクリップして載せている。しかし必ず朝一、Google検索をするわけでもなく、見逃したこともあったので、ちょっとしたスクリプトを書いて、Doodleの検出をしてみることにした。(ブラウザはまず最初に起動するので、単にブラウザのホームをGoogleのページにすれば良いだけのことなんですがね w)

やり方はMacであれば、比較的簡単。用意するものは次の3つ。
  1. スクリプト 
  2. Growl, GrowlNotify
  3. launchd用のxml
1.スクリプト
下記のスクリプトを適当な名前で保存。
要は、Google Doodleが存在する時は、Googleトップページのhtmlの中に"oi=ddle"と言う文字が存在することに着目、curlでトップページのhtmlをダウンロードし、それをgrepして、存在すれば「今日はあるよ!」とGrowlNotifyで画面に知らせると言うもの。
(GrowlNotifyは"-s"オプションを入れておくことで直ぐに消えない)
#!/bin/sh
sleep 10
if curl https://www.google.co.jp/ | grep -c oi=ddle
then
    /usr/local/bin/growlnotify -m "本日(`date`)はDoodleが、あるよ!" -t "Google Doodles" -s
else
     /usr/local/bin/growlnotify -m "本日(`date`)は、ないよ" -t "Google  Doodles" -s
fi

2.Growl, GrowlNotify
OSX LionになってからGrowlは有料(¥170)になった。このスクリプトのためだけなら買わないが、色々と使い勝手の良いソフトなので購入している。最新バージョンは、Growl 1.3.3。購入はiTuneストアから。
GrowlNotifyは、Growlの公式サイトからダウンロード可能。最新バージョンは、GrowlNotify 1.3 (OSX 10.7+ Lion)。OSX 10.6 (Snow Leopard)以前であれば公式サイトから無料でGrowl 1.2.2がダウンロード可能。1.2.2用のGrowlNotifyはダウンロードしたGlowlに同梱されている。

いずれもGrowlの指示に従ってインストール。

3.launchd用のxml
以前はUNIXの流儀で、cloneを使ってシェルスクリプトのタイマーセットをしていたようだが、 OSXではlaunchdを使いタイマーセットを行うのが標準の様だ。その設定は、xmlで記述する必要がある。記述には、Xcodeに付属しているProperty List Editorを使うか、Lingonと言うツール(有償¥450)で作成することが出来る。

作ったxmlは次のとおり。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>xxx.xxx.googleDoodles</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>/Users/xxx/Desktop/googleDoodle.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>5</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>
上記を/Users/USER_NAME/Library/LaunchAgentの直下に保存。(xmlの中のLabelと名前が一緒であることが必要)
次にターミナルから設定ファイルを次のコマンドで起動する。
$ launchctl load ~/Library/LaunchAgents/xxx.xxx.googleDoodles.plist
これで毎朝5時にシェルが起動される。ACアダプタが接続されていれば、スリープ状態でも設定した時間にシェルは起動されるが、ACアダプタが外れていると設定時間が過ぎて最初のスリープが解除された時点で起動する。スリープ解除時点で、ネットワークの再接続等のジョブが走るので、その前にこのシェルが動くとエラーとなり「Doodelは無い」と言うことになるので、上記のシェルには10秒のウエイトを掛けている。