2

プロジェクトにカレンダー(icsファイル)をインポートする機能を追加しました。コードは次のようなものです。

  events = ICS::Event.file(File.open(ics_temp_file))
  events.each do |event|
    if event.summary and event.started_on and event.description
      Event.create(:description => event.description == '\n' ? nil : event.description,
                   :organization_id => @organization.id,
                   :user_id => current_user.id,
                   :event_type => Event::OTHER,
                   :date_time => event.started_on,
                   :title => event.summary,
                   :active => true)
    else
      logger.warn("***Error*** Importing ics (bad event)")
    end
  end

ご覧のとおり、私はgemicsを使用しています。私は数か月前に調査しましたが、icsファイルのイベントを抽出するというicsファイルのペアリングに最適なオプションのように見えました。このgemは、次のようなイベントを抽出できます。

BEGIN:VEVENT
something here
END:VEVENT.

問題は次のとおりです。一部のユーザーはカレンダーをインポートしようとしましたが(カレンダーの作成に使用したツールがわかりません)、イベントは次のようになります。

BEGIN:VFREEBUSY
something here
END:VFREEBUSY.

それで、手がかりは、icsファイルを解析するためのより良い代替案を知っていますか?おそらく、あらゆる種類のイベントを抽出できるもので、events.map(&:vevents)やevents.map(&:vfreebusy)のようなものを実行できます。これを処理するためのアイデアはありますか?ありがとうございました!

編集:申し訳ありませんが、この宝石の既知の属性のリストはこれであることに言及するのを忘れています

    TRANSP
    DTEND
    UID
    DTSTAMP
    LOCATION
    DESCRIPTION
    URL
    STATUS
    SEQUENCE
    SUMMARY
    DTSTART
    CREATED
# For the alarm…
    # BEGIN:VALARM (ignored)
    X-WR-ALARMUID
    TRIGGER
    ATTACH
    ACTION
    # END:VALARM (ignored)

したがって、このgemがすべての種類のイベントを抽出していない理由を簡単に理解できます。

4

1 に答える 1

4

iCalendarを試してみてください:https ://github.com/sdague/icalendar 。icsファイルを解析し、言及したイベントの種類をサポートします:https ://github.com/sdague/icalendar/blob/master/lib/icalendar/parser.rb#L139 。

于 2012-09-17T09:19:42.570 に答える