カテゴリ
リンク

当サイトは、玄箱PRO (KURO-BOX/Pro)を中心とした組み込み、Linuxと電子工作を扱っています。
会社案内

情報セキュリティおよび個人情報の取り扱いについて


コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。コメントはそれぞれ投稿した人のものです。

 Google Calendar を使われていますか? Googleの提供するスケジューラですが、PCやスマートフォンなど、どこからでも、スケジュールを確認できて便利です。そんな Google Calendarに書いたスケジュールで玄箱Proのコマンドを実行させてみます。


■gCalCron
  gCalCronはPatrick Spearさんが書いたPython(スクリプト言語の一種)のスクリプトです。Python のライブラリgdata-python-clientを使ってGoogle Calendarにアクセスし、現在の時刻と開始/終了時刻が一致するスケジュール(予定)があると、予定の「説明」に書いたコマンドを実行してくれます。

■gCalCronに必要なパッケージのインストール
  gCalCronにはPythonとgdata-python-client, http-clientライブラリが必要なので、apt-get でインストールしておきます。ルートで、
apt-get install python python-gdata python-httplib2
を実行します。

■Google Calendarに新しいカレンダーを作る
  Google CalendarにgCalCron専用に新しいカレンダーを作ります。作成したら、カレンダーの詳細設定を開きます。

gcal01.png
 「詳細設定」に「カレンダーのアドレス」という項目があり、カレンダーIDがあります。このカレンダーID( xxxxxx@groups.calendar.google.com, 実際にはxxxxxxの部分はもっと長い)をメモしておきます。このIDでスクリプトがカレンダーにアクセスします。

gcal02.png
■アカウントを確認する
  gcalcron-0.1p1.tar.gzをダウンロード(筆者が変更を加えています)します。READMEを読むとsetup.shでインストールするようにありますが、今回はsetup.shは使わないことにします。
 
 ダウンロードしたファイルを展開し、できたディレクトリへ移動します。
tar xzvf gcalcron-0.1p1.tar.gz
cd gcalcron-0.1
 Googleアカウントのユーザ名(以下ではtestuser@gmail.com)、パスワード(testpass)、カレンダーIDを用意して、以下のように実行します。
./gcalcron.py -u testuser -p testpass -c xxxxxx@groups.calendar.google.com

 実行すると以下のようになります
kurobox@kurobox:~/work/gcalcron/gcalcron-0.1$ ./gcalcron.py -u testuser@gmail.com -p testpass -c "xxxxxx@group.calendar.google.com"
['-u', 'testuser@gmail.com', '-p', 'testpass', '-c', 'xxxxxx@group.calendar.google.com']
 ユーザ名やパスワード、カレンダーIDが間違っているとエラーになるので確認します。

■gCalCronを試してみる
 カレンダーに少し先の時刻の予定を作ります。説明のところには、実行したことがわかるコマンド(例では echo "This is test")を書いておきます。

gcal03.png
 gcalcron.pyは現在の時刻と開始時刻か終了時刻が一致する予定があると、その予定の「説明」に書かれているコマンドを実行します。テスト用には-oオプションをつけると、オプションで渡した時刻を現在時刻とします。そこで -o オプションを使って、先ほどの開始時刻(例では17:00)をgcalcron.pyに渡します。
./gcalcron.py -u testuser -p testpass -c -o 17:00
 実行すると次のようになりました。
kurobox@kurobox:~/work/gcalcron/gcalcron-0.1$ ./gcalcron.py -u testuser@gmail.com -p testpass -c "xxxxxx@group.calendar.google.com" -o 17:00
['-u', 'testuser@gmail.com', '-p', 'testpass', '-c', 'xxxxxx@group.calendar.google.com', '-o', '17:00']
This is test
 「説明」のところに何もないとスクリプトがエラーになるので注意します。「説明」に二つ以上のコマンドを書くと順次実行されます。
echo "This is test1"
echo "This is test2"
---
echo "This is test3"
と書いておくと、
kurobox@kurobox:~/work/gcalcron/gcalcron-0.1$ ./gcalcron.py -u testuser@gmail.com -p testpass -c "xxxxxx@group.calendar.google.com" -o 17:00
['-u', 'testuser@gmail.com', '-p', 'testpass', '-c', 'xxxxxx@group.calendar.google.com', '-o', '17:00']
This is test1
This is test2
となりました。---以降のコマンドは終了時刻と現在時刻が一致すると実行します。-oで18:00を指定してみると、
kurobox@kurobox:~/work/gcalcron/gcalcron-0.1$ ./gcalcron.py -u testuser@gmail.com -p testpass -c "xxxxxx@group.calendar.google.com" -o 17:00
['-u', 'testuser@gmail.com', '-p', 'testpass', '-c', 'xxxxxx@group.calendar.google.com', '-o', '18:00']
This is test3
となりました。

■crontabへ登録する
  gcalcron.pyを適当なディレクトリ(たとえば、自分のホーム・ディレクトリのbinディレクトリ)にコピーします。実行権限がついていることを確認しておきます。crontab -e コマンドで、crontabにgcalcron.pyが実行されるように行を追加します。予定の開始と終了が毎時0分と30分のみなら、
0 * * * * $HOME/bin/gcalcron.py -u testuser@gmail.com -p testpass -c "xxxxxx@group.calendar.google.com" > /dev/null 2>&1
30 * * * * $HOME/bin/gcalcron.py -u testuser@gmail.com -p testpass -c "xxxxxx@group.calendar.google.com" > /dev/null 2>&1
の2行を追加します(10分きざみにするには、行を増やせばよい)。これで予定を実行する準備ができました。たとえば、予定の「説明」に、
/usr/local/bin/mpc play
---
/usr/local/bin/mpc stop
と書いておけばMusic Player Daemonが目覚まし時計になります(/usr/local/binにmpcがある場合)。普段使っているシェルとパスの設定が違うこともあるので、絶対パスのほうが無難です。

■終わりに
  gcalcron.pyスクリプトを見ると割と簡単にGoogle Calendarへのアクセスができることがわかり、いろいろな可能性がありそうです。

 なお、crontabへ平文で、Googleアカウントのパスワードを書くことになります。そのため、玄箱Proへ不正にアクセスされるとGoogleアカウントのパスワードが漏れる可能性があります。また、なんらかの方法でGoogle Calendarにアクセスされると、勝手に(gcalcron.pyを呼び出しているユーザの権限で)コマンドが実行されます。パスワードの管理には十分注意してください。
(光永 法明)

 カテゴリ 

 

トラックバック(0)

このブログ記事を参照しているブログ一覧: Google Calendarに書いたスケジュールで玄箱Proのコマンドを実行する

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/6241

コメントする

おすすめ書籍
Powered by
Movable Type 4.1
/*yahoo remove*/