新年早々に更新したので、そろそろ公開しておこうと思います。
2年前ほどからお世話になっている、地元にある整形外科の診察予定カレンダーをGoogleカレンダーにしてみました。
使い方は至って簡単で、Googleカレンダーで公開しているのでお使いのGoogleアカウントのカレンダーに追加するだけです。
リンクより追加できます。ical版もあります。
簡単な説明をすると、整形外科の院長先生が公開しているブログ「三日市NEWS」に公開されている診療情報を元に更新しています。
定期的な予定や、ブログとは相違のある予定が有りましたら手動で変更しています。
自動処理にはまだ不備や不具合があり、病院発表のカレンダーとは若干相違が有る場合がありますので、参考程度でお願いします。
ご注意
- このカレンダーは独自に作成した非公式のものです。このカレンダーの作成、運用について三日市整形外科の関係者様には何ら関係ありません。
- このカレンダーについてのお問い合わせは病院に直接問い合わせるのでなく、\<hrs.sano_at_gmail.com>(atは@), twitter:@hrs_sano645にご連絡ください。
作成者もお世話になっている病院のため、チェックは行なっていますが間違いがあるかもしれませんのであくまで参考程度でご利用ください。
間違い等ありましたら、上記メールアドレスよりご連絡ください。
カレンダーの見方
病院で公開(入り口などに貼られている)カレンダーとほぼ同じ情報が入っています。
カレンダーの各予定にある「説明」に記載されている内容は以下の意味となります。
定期的な予定を登録したものです。(例えば月曜日や木曜日の17時まで、というものはこちらを利用しています)
作成者が登録した予定です。自動で登録されていない予定を入れるときに使ってます。
[三日市NEWS](http://www.tunerg.com/mikkaichi/)から予定情報を取得して掲載したものです。
各種予定は「終日」で設定しています。
既知の問題点(2013/01/12)
- 休日の対応をしていません
- 病院では祝日はほぼ休みになるため、Googleカレンダーの日本の祝日と一緒にお使いください。
- 改善予定
- 三日市NEWSから一部変換していない予定があります。(例えば新年の休み期間などの、範囲を示している部分)
- 改善予定
- 最終週の土曜日の予定が複数存在する。
- 改善予定
続きより制作に至った話など。
ことの始まり
日頃からリハビリに通っている整形外科病院では、診療予定が書かれているカレンダーがあります。定例のお休み以外にも院長先生の都合で受付終了の時間が違ったりするため日頃からチェックする必要があるものでして、カレンダーを写真で撮影したり、カレンダーにメモったりしていました。し忘れると、ふらっとリハビリ行って開いていないとかザラにあります(自分が色々抜けてるんでしょうが・・・)
とある日に、その病院の院長先生がブログをやっているような物を見つけました。
サッカー話や医療関係の話がメインの内容で(この先生は清水エスパルスのスポーツドクターもなされているそうで)面白いなあと見ていると、診療情報としてカレンダーの予定をそのまま文字情報で乗っていることを知りまして。
先生のブログに予定が公開されているのは至って普通な話なのですが、ちょうどそのころは文字列の処理ばかりやっていたのもあって、これを元にGoogleカレンダーに自動追加して楽々見れるといいなあと思ったのが始まりです。
制作レシピ
制作はpythonを利用してスクリプトを書きました。cronで週一で動作するとブログの診療情報をパースして自動的にカレンダーに予定が登録される仕組みです。
使ったツール
- python
- google calendar api v3
- 定期可動用のLinuxサーバー
仕組み
ブログ上にある、特定の日付情報をカレンダーにしています。
例えば
1月17日(木)12時まで
というものを、正規表現でそれぞれ「日付情報」(ここで言うと「1月17日(木)」の部分), 「タイトル」(ここでいう「12時まで」の部分)として取り出し、GoogleカレンダーのAPIを使って登録しています。
一応、細かい処理も入れています。例えば12月頃に来年の予定が入るので、ブログエントリーの作成日を見て適切な年で登録できるようにしています。
また、スクリプトの動作間隔は1週間に一度行うため、処理にパースした予定が入ってしまうのを防ぐ(重複登録をしないようにする)、処理した予定が手動登録した定期予定(リカーシブイベント)とかぶった時に処理した側を優先する。といったものを入れています。
コードについて
実際にコード見て下さいと言いたかったのですが、今のところ特に公開するつもりなどありません。
APIの認証情報などの公開してまずいものと切り離しができていないので、出来る時が来たら晒したいと思います。
作った時に参考にしたサイト
- Google Calendar API - Google Apps Platform — Google Developers
- 言わずと知れた、カレンダーAPIの開発者向けサイト
- cron - Python: how to set virtualenv for a crontab? - Stack Overflow
- サーバー上でvirtualenvの環境を使ってスクリプトをcronさせるときに参考にしました。
- python - Google calendar V3 and Command line applications - Stack Overflow
- サーバーのCUI上でgoogle apiの認証(OAuth2)が出来なかった時の対処法。適当なGUIブラウザが使える環境で認証トークンを保存したファイルを作って、サーバーから参照させるで対処