c#에서 iCal 파일 만들기
c#(asp.net )에서 iCalendar 파일(*.ics)을 생성할 수 있는 좋은 방법을 찾고 있습니다.몇 가지 리소스를 찾았지만 한 가지 부족한 점은 캐리지 리턴과 라인 피드가 있는 인용 인쇄 가능 필드에 대한 지원입니다.
예를 들어 설명 필드가 제대로 인코딩되지 않은 경우 첫 번째 줄만 표시되고 *.ics 파일의 나머지 정보가 손상될 수 있습니다.
*.ics 파일을 생성할 수 있는 기존 클래스 및/또는 따옴표로 묶은 필드를 생성할 수 있는 클래스를 찾고 있습니다.
저는 DDay를 사용합니다.Ical, 좋은 물건입니다.icial 파일을 열고 해당 데이터를 멋진 객체 모델로 가져올 수 있습니다.베타라고 쓰여 있지만, 우리에게는 아주 잘 작동합니다.
2016년 11월 편집
이 라이브러리는 더 이상 사용되지 않지만 iCal로 선택되어 다시 릴리스되었습니다.다른 개발자의 NET.
릴리스에 대한 참고 사항: rianjs.net/2016/07/dday-ical-is-now-ical-net
GitHub 소스: github.com/rianjs/ical.net
제가 찾은 가장 쉬운 방법은 마이크로포맷을 사용하여 HTML을 표시하는 것입니다.
iCalendar 파일을 생성하려는 경우 hCalendar 마이크로포맷을 사용하여 다음을 가리키는 'Add to Calendar'와 같은 링크를 포함할 수 있습니다.
http://feeds.technorati.com/events/ [http://]를 포함한 페이지의 전체 URL
그런 다음 Technorati 페이지가 페이지를 구문 분석하고 hCalendar 정보를 추출한 다음 iCalendar 파일을 클라이언트로 보냅니다.
나는 이것을 처리하기 위해 심 함수를 작성했습니다.대부분 호환됩니다. 단, 첫 번째 줄이 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)과 따옴표로 묶인 인쇄물이 서로 맞지 않습니다.
Quoted-printable은 vCal(vCal 1.0)에서 인쇄할 수 없는 문자(예: 줄 바꿈)를 나타내는 데 많이 사용됩니다(=0D=0A).기본 vCal 인코딩은 7비트이므로 따옴표로 묶은 인쇄 가능한 문자를 사용하여 ASCII가 아닌 문자를 표시해야 하는 경우가 있습니다(기본 인코딩을 재정의할 수 있지만 다른 vCal 호환 통신 당사자는 이를 이해할 필요가 없습니다).
iCal에서 특수 문자는 '\n'과 같은 이스케이프를 사용하여 표시됩니다.기본 인코딩은 UTF-8이며, 모든 iCal 호환 당사자가 이를 지원해야 하므로 iCal 2.0(및 vCard 3.0)에서는 따옴표로 인쇄할 필요가 전혀 없습니다.
요구 사항을 명확히 하기 위해 고객/이해 관계자를 지원해야 할 수도 있습니다.vCal과 iCal 사이에 혼동이 있는 것 같습니다.
사용자 지정 시간대에 대한 예제가 없습니다.다음은 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();
http://www.codeproject.com/KB/vb/vcalendar.aspx 를 확인해 보세요.
당신이 요청한 것처럼 따옴표로 묶인 필드는 처리하지 않지만, 나머지 코드는 거기에 있고 수정할 수 있습니다.
RFC-2445에 따르면 주석 및 설명 필드는 TEXT입니다.테스트 필드의 규칙은 다음과 같습니다. [1] TEXT 필드의 한 줄은 75옥텟을 초과할 수 없습니다.CRLF 다음에 공백을 삽입하여 래핑할 수 있습니다.\ (역 슬래시); (세미콜론), (콤마) 및 새 줄을 포함하여 인코딩해야 하는 몇 가지 문자가 있습니다.\ (역 슬래시)를 구분 기호로 사용하면 \; \, \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.
아이칼은 복잡할 수 있으니 도서관을 이용하는 것을 추천합니다.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
그것은 나에게 효과가 있었다.
언급URL : https://stackoverflow.com/questions/10658/creating-ical-files-in-c-sharp
'programing' 카테고리의 다른 글
Python에서 파일이 열려 있는지 확인합니다. (0) | 2023.06.20 |
---|---|
Visual Studio 2012의 웹 사이트 관리 도구 위치 (0) | 2023.06.20 |
Git 원격 오리진 설정 (0) | 2023.06.20 |
행 번호를 사용하여 표의 두 번째 행 선택 (0) | 2023.06.20 |
Node.js로 이메일을 보내시겠습니까? (0) | 2023.06.20 |