सी # में iCal फ़ाइलें बनाना

मैं C# (asp.net) में iCalendar फ़ाइल (* .ics) उत्पन्न करने की एक अच्छी विधि ढूंढ रहा हूं। मुझे कुछ संसाधन मिल गए हैं, लेकिन एक चीज जिसकी कमी है, वह उद्धृत-प्रिंट करने योग्य फ़ील्ड के लिए उनका समर्थन है - जिन क्षेत्रों में कैरिज रिटर्न और लाइन फ़ीड्स हैं।

उदाहरण के लिए, यदि विवरण फ़ील्ड ठीक से एन्कोड नहीं किया गया है, तो केवल पहली पंक्ति * .ics फ़ाइल में शेष जानकारी को प्रदर्शित और संभावित रूप से दूषित कर देगी।

मैं मौजूदा कक्षाओं की तलाश में हूं जो * .ics फ़ाइलों और/या एक वर्ग उत्पन्न कर सकते हैं जो उद्धृत-प्रिंट करने योग्य फ़ील्ड उत्पन्न कर सकता है।

0
ro fr bn
हालांकि यह सवाल बहुत समय पहले हुआ था, मैंने सोचा था कि मैं इंगित करता हूं कि उद्धृत-प्रिंट करने योग्य फ़ील्ड iCalendar मानक (vCalendar 2.0) का नहीं हिस्सा हैं। वे vCalendar मानक (vCalendar 1.0) का हिस्सा हैं जो आजकल शायद ही कभी (यदि कभी) उपयोग किया जाता है। iCalendar के पास डेटा से बचने की अपनी विधि है जो उद्धृत-प्रिंट करने योग्य की तुलना में बहुत साफ और समझना आसान है।
जोड़ा लेखक Doug, स्रोत

8 उत्तर

मैं DDay.Ical का उपयोग करता हूं, इसकी अच्छी सामग्री। एक ical फ़ाइल खोलने और एक अच्छा ऑब्जेक्ट मॉडल में अपना डेटा प्राप्त करने की क्षमता है। यह बीटा कहता है, लेकिन यह हमारे लिए बहुत अच्छा काम करता है।

नवंबर 2016 को संपादित करें

इस पुस्तकालय को हटा दिया गया है, लेकिन उठाया गया था और iCal.NET के रूप में एक और देव द्वारा पुनः जारी किया गया था।

Notes about the release: rianjs.net/2016/07/dday-ical-is-now-ical-net

Source on GitHub: github.com/rianjs/ical.net

0
जोड़ा
धन्यवाद, अद्यतन किया गया
जोड़ा लेखक DevelopingChris, स्रोत
मैंने अभी इस जवाब का उपयोग किया है, और ऐसा लगता है कि यह बहुत अच्छा काम कर रहा है! मैं इसके बारे में एक ब्लॉग पोस्ट आज़माकर लिखूंगा और अगर मैं करता हूं तो इसे यहां पोस्ट करूंगा।
जोड़ा लेखक John Bubriski, स्रोत
दयालुता कि DDay.Ical दृढ़ता से हस्ताक्षरित नहीं है, इसलिए इसे दृढ़ता से हस्ताक्षरित असेंबली द्वारा संदर्भित नहीं किया जा सकता है :(
जोड़ा लेखक Janis Veinbergs, स्रोत
इस पुस्तकालय को बहिष्कृत कर दिया गया है, लेकिन इसे एक और देव द्वारा उठाया गया और फिर से जारी किया गया: rianjs.net/2016/07/dday-ical-is-now-ical-net | github.com/rianjs/ical.net
जोड़ा लेखक jocull, स्रोत
@janis स्रोत डाउनलोड करने के लिए उपलब्ध है, आप इसे प्राप्त कर सकते हैं और इसे स्वयं साइन कर सकते हैं।
जोड़ा लेखक John Boker, स्रोत
उपरोक्त लिंक टूटा हुआ है। यहां SourceForge लिंक है: sourceforge.net/projects/dday-ical
जोड़ा लेखक Martin Buberl, स्रोत
2015 में यह अभी भी सबसे अच्छा विकल्प उपलब्ध है?
जोड़ा लेखक Dizzle, स्रोत

iCal जटिल हो सकता है, इसलिए मैं एक पुस्तकालय का उपयोग करने की सलाह देते हैं। डीडी एक अच्छा मुफ्त समाधान है। आखिर में मैंने जांच की कि आवर्ती घटनाओं के लिए इसका पूर्ण समर्थन नहीं था, लेकिन इसके अलावा यह वास्तव में अच्छा लग रहा है। निश्चित रूप से कई ग्राहकों के साथ कैलेंडर का परीक्षण करें।

0
जोड़ा

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

यह आपके द्वारा पूछे गए उद्धृत-प्रिंट करने योग्य फ़ील्ड को संभाल नहीं करता है, लेकिन शेष कोड वहां है और संशोधित किया जा सकता है।

0
जोड़ा

मैं कस्टम समय क्षेत्र के साथ एक उदाहरण याद कर रहा हूँ। तो यहां एक स्निपेट दिखाता है कि आप ics में समय क्षेत्र कैसे सेट कर सकते हैं (और इसे एएसपीनेट में ब्राउज़र में भेज सकते हैं)।

//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();
0
जोड़ा

ऐसा करने का सबसे आसान तरीका यह है कि आप अपने HTML को microformats का उपयोग करके चिह्नित करें।

यदि आप iCalendar फ़ाइलों को उत्पन्न करना चाहते हैं तो आप hCalendar microformat का उपयोग कर सकते हैं, फिर एक लिंक जैसे ' कैलेंडर में जोड़ें 'जो इंगित करता है:

http://feeds.technorati.com/events/[ your page's full URL including the http:// ]

Technorati पृष्ठ तब आपके पृष्ठ को पार करता है, hCalendar जानकारी निकालता है और iCalendar फ़ाइल को क्लाइंट को भेजता है।

0
जोड़ा
इस विधि का उपयोग NerdDinner.com द्वारा किया जाता है और यह काफी अच्छी तरह से काम करता प्रतीत होता है। उस ने कहा, मुझे DDay.iCal के लिए +1 देना होगा (हालांकि मैं am पक्षपाती हूं) :)
जोड़ा लेखक Doug, स्रोत
मुझे इस विधि से क्या पसंद नहीं है यह है कि टेक्नोराटी इसके विनिर्देशों को बदल सकता है या यहां तक ​​कि सेवा को बंद कर सकता है। हालांकि यह एक अच्छा विचार है।
जोड़ा लेखक Gabriel Espinoza, स्रोत

iCal (ical 2.0) and quoted-printable don't go together.

गैर-प्रिंट करने योग्य वर्णों का प्रतिनिधित्व करने के लिए उद्धृत-प्रिंट करने योग्य vCal (vCal 1.0) में बहुत उपयोग किया जाता है, उदा। लाइन ब्रेक (= 0 डी = 0 ए)। डिफ़ॉल्ट vCal एन्कोडिंग 7-बिट है, इसलिए कभी-कभी आपको गैर-ASCII वर्णों का प्रतिनिधित्व करने के लिए उद्धृत-प्रिंट करने योग्य उपयोग करने की आवश्यकता होती है (आप डिफ़ॉल्ट एन्कोडिंग को ओवरराइड कर सकते हैं, लेकिन अन्य vCal-compliant संचार पार्टी को इसे समझने की आवश्यकता नहीं है।)

iCal में, विशेष वर्णों का उपयोग escapes का उपयोग करके किया जाता है, उदा। '\ N'। डिफ़ॉल्ट एन्कोडिंग यूटीएफ -8 है, सभी आईकैल-अनुपालन पार्टियों को इसका समर्थन करना चाहिए और यह iCal 2.0 (और उस मामले के लिए vCard 3.0) में उद्धृत-प्रिंट करने योग्य पूरी तरह अनावश्यक बनाता है।

आवश्यकताओं को स्पष्ट करने के लिए आपको अपने ग्राहक/हितधारक को वापस करने की आवश्यकता हो सकती है। VCal और iCal के बीच भ्रम प्रतीत होता है।

0
जोड़ा
हाइलाइट करने के लिए धन्यवाद कि यूटीएफ -8 डिफ़ॉल्ट एन्कोडिंग है।
जोड़ा लेखक Andrea Antonangeli, स्रोत

मैंने इसे संभालने के लिए एक शिम समारोह लिखा था। यह ज्यादातर अनुपालन है - केवल लटकाना यह है कि पहली पंक्ति 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

मैं इसे अपने आईसीएस फ़ीड पर सारांश और विवरण के लिए उपयोग करता हूं। पहले से ही खेले गए फ़ील्ड के साथ लाइन को फ़ीड करें (उदा। LongText = "सारांश: ईवेंट शीर्षक")। जब तक आप धीरे-धीरे कैशिंग को सेट करते हैं, यह एक ऑपरेशन का महंगा नहीं है।

0
जोड़ा
आपके कोड से प्रेरित, मैंने इसे फिर से लिखा (सी # का उपयोग करके) जहां पार्सिंग ब्लॉक द्वारा है और चरित्र-वार नहीं है। इसे किसी संबंधित प्रश्न पर जांचें: stackoverflow.com/a/27164955/914512
जोड़ा लेखक reexmonkey, स्रोत

मुझे पता है कि यह बहुत देर हो चुकी है, लेकिन यह दूसरों की मदद कर सकती है। मेरे मामले में मैंने .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

यह मेरे लिए काम किया।

0
जोड़ा