C #에서 iCal 파일 만들기
c # (asp.net)에서 iCalendar 파일 (* .ics)을 생성하는 좋은 방법을 찾고 있습니다. 몇 가지 리소스를 찾았지만 한 가지 부족한 것은 캐리지 리턴 및 줄 바꿈이있는 필드 인 인용 인쇄 가능한 필드에 대한 지원입니다 .
예를 들어 설명 필드가 제대로 인코딩되지 않은 경우 첫 번째 줄만 표시되고 * .ics 파일의 나머지 정보가 손상 될 수 있습니다.
* .ics 파일을 생성 할 수있는 기존 클래스 및 / 또는 인용 인쇄 가능한 필드를 생성 할 수있는 클래스를 찾고 있습니다.
나는 DDay.Ical을 사용 합니다. ical 파일을 열고 멋진 개체 모델에서 데이터를 가져올 수 있습니다. 베타라고 말하지만 우리에게는 잘 작동합니다.
2016 년 11 월 수정
이 라이브러리는 더 이상 사용되지 않지만 다른 개발자가 iCal.NET으로 선택하여 다시 릴리스했습니다.
릴리스에 대한 참고 사항 : rianjs.net/2016/07/dday-ical-is-now-ical-net
GitHub의 출처 : github.com/rianjs/ical.net
내가 찾은 가장 쉬운 방법은 microformats를 사용하여 HTML을 마크 업하는 것 입니다.
iCalendar 파일을 생성하려는 경우 hCalendar 마이크로 포맷 을 사용하고 다음을 가리키는 '캘린더에 추가'와 같은 링크를 포함 할 수 있습니다 .
http://feeds.technorati.com/events/ [ http : //를 포함한 페이지의 전체 URL]
그런 다음 Technorati 페이지는 페이지를 구문 분석하고 hCalendar 정보를 추출하고 iCalendar 파일을 클라이언트에 보냅니다.
이것을 처리하기 위해 shim 함수를 작성했습니다. 대부분 호환됩니다. 첫 번째 줄이 75 자 대신 74 자 (74는 다음 줄의 공백을 처리하는 것임)라는 것뿐입니다.
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
ICS 피드의 요약 및 설명에 사용합니다. 필드가 이미 추가 된 줄을 입력하십시오 (예 : LongText = "SUMMARY : Event Title"). 캐싱을 적당히 오래 설정하는 한 작업 비용이 너무 많이 들지 않습니다.
iCal (ical 2.0)과 인용 인쇄용은 함께 사용할 수 없습니다.
인용 인쇄 가능은 vCal (vCal 1.0)에서 인쇄 할 수없는 문자를 나타 내기 위해 많이 사용됩니다 (예 : 줄 바꿈 (= 0D = 0A)). 기본 vCal 인코딩은 7 비트이므로 때때로 비 ASCII 문자를 나타 내기 위해 quoted-printable을 사용해야합니다 (기본 인코딩을 재정의 할 수 있지만 다른 vCal 호환 통신 당사자는이를 이해할 필요가 없습니다).
에서 iCal을 , 특수 문자 예를 들어, '\ n'을, 탈출을 사용하여 표시됩니다. 기본 인코딩은 UTF-8이며 모든 iCal 호환 당사자는이를 지원해야하며 iCal 2.0 (및 vCard 3.0)에서는 인용 인쇄가 완전히 필요하지 않습니다.
요구 사항을 명확히하기 위해 고객 / 이해 관계자를 지원해야 할 수도 있습니다. vCal과 iCal 사이에 혼동이있는 것 같습니다.
http://www.codeproject.com/KB/vb/vcalendar.aspx 확인
요청한대로 따옴표로 묶인 인쇄 가능한 필드를 처리하지 않지만 나머지 코드는 거기에 있으며 수정할 수 있습니다.
RFC-2445에 따르면 주석 및 설명 필드는 TEXT입니다. 테스트 필드에 대한 규칙은 다음과 같습니다. [1] TEXT 필드의 한 줄은 75 옥텟을 초과하지 않아야합니다. [2] 래핑은 CRLF 다음에 공백을 삽입하여 수행됩니다. [3] \ (역 슬래시)를 포함하여 인코딩해야하는 여러 문자가 있습니다. (세미콜론), (쉼표) 및 줄 바꿈. \ (역 슬래시)를 구분 기호로 사용하면 \ \가됩니다. \, \ n
예 : 다음은 속성 값에 서식이 지정된 줄 바꿈이있는 속성의 예입니다.
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.
iCal은 복잡 할 수 있으므로 라이브러리 사용을 권장합니다. DDay는 좋은 무료 솔루션입니다. 마지막으로 반복되는 이벤트를 완벽하게 지원하지 않는지 확인했지만 그 외에는 정말 멋져 보입니다. 여러 클라이언트로 캘린더를 확실히 테스트합니다.
너무 늦었지만 다른 사람들에게 도움이 될 수 있습니다. 제 경우에는 확장자가 .ics 인 다음 텍스트 파일을 작성했습니다.
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
그것은 나를 위해 일했습니다.
사용자 지정 시간대가있는 예가 없습니다. 여기에 ics에서 시간대를 설정하고 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();
참고 URL : https://stackoverflow.com/questions/10658/creating-ical-files-in-c-sharp
'developer tip' 카테고리의 다른 글
Linux 커널에서 부동 소수점 사용 (0) | 2020.10.22 |
---|---|
새로운 AWS Certificate Manager 서비스를 사용하여 SSL 인증서를 AWS EC2에 추가하는 방법 (0) | 2020.10.22 |
IMAP을 사용하여 Gmail에서 Java 애플리케이션으로 메일 가져 오기 (0) | 2020.10.22 |
페이지가 완전히로드 될 때까지 브라우저가 페이지를 표시 할 때까지 기다리도록하려면 어떻게해야합니까? (0) | 2020.10.22 |
div 요소의 크기 조정 (0) | 2020.10.22 |