memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Googleカレンダーの過去の予定を一気に削除する簡易スクリプト

仕事が一段落したので、部屋やPCなどの整理をしていました。GmailGoogle Calendarもいらないものは削除。と思いきや、Google Calendarは予定を全部削除することはできても一部(例えば1年前より過去の予定とか)をまとめて削除する機能がありません。なぜでしょうね。。。?そんなにサーバーに個人情報を残しておきたいのでしょうか?それとも誤って消してしまうユーザが多いからでしょうか?


とりあえず作ってみました。ただRubyを実行できる環境がない人は面倒でしょうね?Webサービス化してもいいですが。。。サーバーがひ弱なのと面倒なのでこのまま公開します。使いたい人がもしいれば使ってみてください。ただ。。。私のicsファイルは変換できたのですが皆さんの予定が全てこれで賄えるかはわかりません。中途半端でごめんなさいねー。

require 'time'

d1 = Time.parse(ARGV[1].slice(0..7))

status = :TOP
out = ''
outflag = false

open(ARGV[0]) do |file|
  while line = file.gets
    k = line.split(':')

    case status
    when :TOP
      if k[0] == 'BEGIN' and k[1].chop == 'VEVENT'
        status = :BEGIN
        out = line
      else
        print line
      end
    when :BEGIN
      out += line
      if k[0] == 'END' and k[1].chop == 'VEVENT'
        status = :END
      else
      	if k[0] == 'DTSTART' or k[0].split(';')[0] == 'DTSTART'
	  outflag = (Time.parse(k[1].slice(0..7)) >= d1) 
	end
      end
    when :END
      print out if outflag == true
      if k[0] == 'BEGIN' and k[1].chop == 'VEVENT'
        status = :BEGIN
        out = line
        outflag = false
      end
    end
  end
end

print 'END:VCALENDAR'


■使い方

  • Googleカレンダーを開き、カレンダーのエクスポートを選択します。(この辺の操作はいろいろな方がいたるところで書いています)
  • エクスポートしたファイルはzipファイルなので展開すると○○○○.icsというファイルになるはずです。
  • あとは以下のように実行するだけです。以下の例は2009年1月1日以降の予定は残し、それ以前は削除します。最終的には(以下の例では)rrr.icsというファイルが新しいカレンダーファイルになります。異常処理などは全くしていないので、できれば変換後のicsファイルを自分で確認していただければと思います。

ruby r.rb ○○○○.ics 20090101 > rrr.ics

  • 最後に、Googleカレンダーを開き、一旦、全ての予定を削除します。この方法もネットにたくさん書かれています。親切にもyoutubeに動画を公開してくれている人までいます。そちらを参考にしてください。削除したあと、変換後のカレンダーファイル(上記の例ではrrr.ics)をインポートすればオーケーです。ちなみにインポートは少し時間がかかります。処理終了まで気長に待ってみてください。


でわでわ!