仕事でScheduleBoardを使っているのだがこれが社内からしか見れず不便。
手帳で管理していると「スケジュールボードに予定いれてくださいよ〜」と言われるしかといってScheduleBoardに入れると家から見れず
休みたい時に「もしかしたら明日大事な会議があったような・・」と気になっていたのもこれで解決!
予定が確認できれば気軽に休めるのでプライベートが満喫できます。
これで僕もリア充の仲間入り♪
やっていることはスケジュールボードからデータをCSV形式で抜き出して、
以前作ったGoogleCalenderUtilを使って更新する。
未来データの削除
一旦未来データを削除する。
期間を指定しなければならないので現在時刻から2099年までを指定して取得。
スケジュールボードからのデータの抜き出し
こんなコマンドを打ってあげると月単位でデータをCSVに出力してくれる。
なのでこれをJavaからキック。(今考えるとJavaからキックする必要性が全く感じられないな。。。)
Schedule.exe /export Penta200803.sch,penta.csv
そうするとこんなCSVが吐き出される
Gara,2008/3/29,9:00,17:30,おやすみだす,,UserID,ff00aa Gara,2008/3/30,9:00,17:30,おやすみだす,,UserID,ff00aa Penta,2008/3/1,9:00,20:00,おやすみなのです,,UserID,aa00ff Penta,2008/3/8,9:00,20:00,おやすみなのです,,UserID,aa00ff Penta,2008/3/9,9:00,20:00,おやすみなのです,,UserID,aa00ff Penta,2008/3/15,9:00,20:00,おやすみなのです,,UserID,aa00ff
といった感じでグループ単位でデータは吐き出されるので自分のデータだけを登録していく。
GoogleCalenderにデータ登録
自分のスケジュールを未来分のみ登録してゆく。
スケジュールボードは月単位に.schファイルが出来るのでこれを現在日時から3月分動かす。
タスクスケジューラーに登録して自動化
一度連携できるようになれば後はスケジュール化するだけ。
毎日12時と17時に仕込む。(お昼御飯と夕会の時間)ちなみに朝10時(朝会の時間)にはダーツライブのレート更新バッチが走る。
これで快適な生活が送れそうだ。
出来たソースはこんなかんじ
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Date; import java.util.List; import com.google.gdata.data.DateTime; import com.google.gdata.data.calendar.CalendarEventEntry; import com.google.gdata.util.AuthenticationException; import com.google.gdata.util.ServiceException; public class ScheduleBoard2GoogleCalender { public static void main(String[] args) throws Exception { // カレンダーID String calId = "XXXX"; String targetCsvFile = "C:\\PROGRA~1\\SCHEDU~1\\out.csv"; // スケジュールを抽出したいユーザー名 String targetUser = "Pnetasa"; GoogleCalenderUtil gCal = new GoogleCalenderUtil(); gCal.setCalId(calId); // スケジュールの抽出 Runtime.getRuntime().exec("cmd.exe /k start C:\\PROGRA~1\\SCHEDU~1\\makecsv.cmd\""); // ?今より先の予定を取得する。 List<CalendarEventEntry> feeds = gCal.selectCalendarEventEntry("", new Date()); for (CalendarEventEntry entry : feeds) { System.out.println(entry.getTitle().getPlainText() + "を削除します。"); // ?削除 gCal.deleteCalendarEventEntry(entry); } // ?データ投入 makeData(targetCsvFile, targetUser, gCal); } private static void makeData(String targetCsvFile, String targetUser, GoogleCalenderUtil gCal) throws Exception { BufferedReader br = null; try { br = new BufferedReader(new FileReader(new File(targetCsvFile))); String line = br.readLine(); while (line != null) { String[] wordArray = line.split(","); // ユーザーの判定 if (targetUser.equals(wordArray[0])) { String title = wordArray[4]; String startDate = wordArray[1] + " " + wordArray[2]; String endDate = wordArray[1] + " " + wordArray[3]; DateTime start = gCal.convDateTime(startDate); if (0 < start.compareTo(new Date())) { // 未来のみ登録する。過去分反映しない。 System.out.println("Title:[" + title + "] start [" + startDate + "] end [" + endDate + "]"); CalendarEventEntry event = gCal.makeCalendarEventEntry(title, startDate, endDate); gCal.insertCalenderEventEntry(event); } } line = br.readLine(); } } finally { if (br != null) { br.close(); } } } }