Menciptakan iCal File di c#

I'm mencari metode yang baik menghasilkan file iCalendar (*.ics) di c# (asp.net). I've menemukan beberapa sumber daya, tetapi satu hal yang telah kurang lebih dukungan mereka untuk quoted-printable bidang - bidang yang memiliki kereta kembali dan line feed.

Misalnya, jika deskripsi bidang isn't dikodekan dengan benar, hanya baris pertama akan menampilkan dan mungkin merusak seluruh informasi dalam *.file ics.

I'm mencari kelas-kelas yang ada yang dapat menghasilkan *.file ics dan/atau kelas yang dapat menghasilkan quoted-printable bidang.

Mengomentari pertanyaan (1)

Saya menggunakan DDay.Ical, untuk hal-hal yang baik. Memiliki kemampuan untuk membuka file ical dan mendapatkan data dalam sebuah nice object model. Ia mengatakan versi beta, tapi ini karya besar untuk kita.

Edit Nov 2016

Perpustakaan ini telah usang, tapi dijemput dan dirilis ulang sebagai iCal.NET oleh dev.

Catatan tentang rilis: rianjs.net/2016/07/dday-ical-is-now-ical-net

Sumber di GitHub: github.com/rianjs/ical.net

Komentar (0)

Cara termudah I've ditemukan untuk melakukan ini adalah untuk markup HTML anda menggunakan microformats.

Jika anda'kembali mencari untuk menghasilkan file iCalendar maka anda bisa menggunakan tersedia dalam hnews kemudian menyertakan link seperti 'Tambahkan ke Kalender' yang menunjuk ke:

http://feeds.technorati.com/events/[ halaman anda's URL lengkap termasuk http:// ]

Technorati halaman kemudian mem-parsing halaman anda, ekstrak tersedia dalam info dan mengirimkan file iCalendar untuk klien.

Komentar (2)

Saya menulis shim berfungsi untuk menangani hal ini. It's kebanyakan compliant--satu-satunya hangup adalah bahwa baris pertama adalah 74 karakter bukan dari 75 (74 adalah untuk menangani ruang pada baris berikutnya)...

 Private Function RFC2445TextField(ByVal LongText As String) As String

     LongText = LongText.Replace("\", "\\")
     LongText = LongText.Replace(";", "\;")
     LongText = LongText.Replace(",", "\,")

     Dim sBuilder As New StringBuilder
     Dim charArray() As Char = LongText.ToCharArray

     For i = 1 To charArray.Length
         sBuilder.Append(charArray(i - 1))
         If i Mod 74 = 0 Then sBuilder.Append(vbCrLf & " ")
     Next

     Return sBuilder.ToString

 End Function

Saya menggunakan ini untuk ringkasan dan deskripsi pada kami ICS pakan. Hanya makan sesuai dengan bidang yang sudah ditambahkan (misalnya LongText = "SUMMARY:Judul Acara"). Selama anda mengatur caching sopan panjang, it's tidak terlalu mahal dari operasi.

Komentar (1)

iCal (ical 2.0) dan quoted-printable don't pergi bersama-sama.

Quoted-printable banyak digunakan di vCal (vCal 1.0) untuk mewakili karakter non-printable, misalnya garis-istirahat (=0D=0A). Default vCal encoding 7 bit, sehingga kadang-kadang anda perlu menggunakan quoted-printable untuk mewakili karakter non-ASCII (anda dapat mengganti default encoding, tetapi yang lain vCal-compliant berkomunikasi partai tidak diperlukan untuk memahaminya.)

Di iCal, karakter khusus yang direpresentasikan menggunakan lolos, misalnya '\n'. Default encoding UTF-8, semua iCal-compliant pihak harus mendukung dan yang membuat quoted-printable benar-benar tidak perlu di iCal 2.0 (dan vCard 3.0, hal ini).

Anda mungkin perlu untuk kembali pelanggan/stakeholder untuk memperjelas persyaratan. Sepertinya ada kebingungan antara vCal dan iCal.

Komentar (1)

Menurut RFC-2445, komentar dan deskripsi bidang TEKS. Aturan untuk uji lapangan adalah: [1] satu baris dalam kolom TEKS tidak melebihi 75 oktet. [2] Pembungkus dicapai dengan memasukkan CRLF diikuti oleh spasi. [3] Ada beberapa karakter yang harus dikodekan termasuk \ (reverse slash) ; (titik koma) , (koma) dan baris baru. Menggunakan \ (reverse slash) sebagai pembatas memberikan \ \; \, \n

Contoh: berikut ini adalah contoh dari properti dengan diformat jeda baris dalam nilai properti:

 DESCRIPTION:Meeting to provide technical review for "Phoenix"
   design.\n Happy Face Conference Room. Phoenix design team
   MUST attend this meeting.\n RSVP to team leader.
Komentar (0)

Check out http://www.codeproject.com/KB/vb/vcalendar.aspx

Itu doesn't menangani quoted-printable bidang seperti yang kau minta, tapi sisa kode yang ada dan dapat dimodifikasi.

Komentar (0)

iCal dapat menjadi rumit, jadi saya sarankan untuk menggunakan perpustakaan. DDay adalah sebuah solusi gratis. Lalu aku memeriksa itu didn't memiliki dukungan penuh untuk acara berulang, tapi lain dari itu terlihat benar-benar bagus. Pasti menguji kalender dengan beberapa klien.

Komentar (0)

aku tahu itu terlambat, tapi itu mungkin membantu orang lain. dalam kasus saya saya tulis berikut file teks dengan .ics ekstensi

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Calendly//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20170509T164109Z
UID:your id-11273661
DTSTART:20170509T190000Z
DTEND:20170509T191500Z
CLASS:PRIVATE
DESCRIPTION:Event Name: 15 Minute Meeting\nDate & Time: 03:00pm - 03:15pm (
 Eastern Time - US & Canada) on Tuesday\, May 9\, 2017\n\nBest Phone Number
  To Reach You :: xxxxxxxxx\n\nany "link": https://wwww.yahoo.com\n\n
SUMMARY:15 Minute Meeting
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

ini bekerja untuk saya.

Komentar (0)

I'm hilang contoh dengan zona waktu kustom. Jadi di sini cuplikan yang menunjukkan bagaimana anda dapat mengatur zona waktu di ics (dan mengirimkannya ke browser dalam asp.net).

//set a couple of variables for demo purposes
DateTime IcsDateStart = DateTime.Now.AddDays(2);
DateTime IcsDateEnd = IcsDateStart.AddMinutes(90);
string IcsSummary = "ASP.Net demo snippet";
string IcsLocation = "Amsterdam (Netherlands)";
string IcsDescription = @"This snippes show you how to create a calendar item file (.ics) in ASP.NET.\nMay it be useful for you.";
string IcsFileName = "MyCalendarFile";

//create a new stringbuilder instance
StringBuilder sb = new StringBuilder();

//begin the calendar item
sb.AppendLine("BEGIN:VCALENDAR");
sb.AppendLine("VERSION:2.0");
sb.AppendLine("PRODID:stackoverflow.com");
sb.AppendLine("CALSCALE:GREGORIAN");
sb.AppendLine("METHOD:PUBLISH");

//create a custom time zone if needed, TZID to be used in the event itself
sb.AppendLine("BEGIN:VTIMEZONE");
sb.AppendLine("TZID:Europe/Amsterdam");
sb.AppendLine("BEGIN:STANDARD");
sb.AppendLine("TZOFFSETTO:+0100");
sb.AppendLine("TZOFFSETFROM:+0100");
sb.AppendLine("END:STANDARD");
sb.AppendLine("END:VTIMEZONE");

//add the event
sb.AppendLine("BEGIN:VEVENT");

//with a time zone specified
sb.AppendLine("DTSTART;TZID=Europe/Amsterdam:" + IcsDateStart.ToString("yyyyMMddTHHmm00"));
sb.AppendLine("DTEND;TZID=Europe/Amsterdam:" + IcsDateEnd.ToString("yyyyMMddTHHmm00"));

//or without a time zone
//sb.AppendLine("DTSTART:" + IcsDateStart.ToString("yyyyMMddTHHmm00"));
//sb.AppendLine("DTEND:" + IcsDateEnd.ToString("yyyyMMddTHHmm00"));

//contents of the calendar item
sb.AppendLine("SUMMARY:" + IcsSummary + "");
sb.AppendLine("LOCATION:" + IcsLocation + "");
sb.AppendLine("DESCRIPTION:" + IcsDescription + "");
sb.AppendLine("PRIORITY:3");
sb.AppendLine("END:VEVENT");

//close calendar item
sb.AppendLine("END:VCALENDAR");

//create a string from the stringbuilder
string CalendarItemAsString = sb.ToString();

//send the ics file to the browser
Response.ClearHeaders();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "text/calendar";
Response.AddHeader("content-length", CalendarItemAsString.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=\"" + IcsFileName + ".ics\"");
Response.Write(CalendarItemAsString);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
Komentar (0)