2009-10-07 11 views
11

इसलिए मैं चाहता हूं कि हमारे कार्य कैलेंडर प्रत्येक कर्मचारी के Google कैलेंडर के साथ स्वचालित रूप से सिंक हो जाए जब शेड्यूलिंग प्रबंधक शेड्यूल पोस्ट/अपडेट करता है। उपयोगकर्ता प्रारंभ में ऑथसब टोकन का उपयोग करके ऑप्ट-इन करेंगे, लेकिन इसके बाद यह स्वचालित होना चाहिए। उन्होंने निर्धारित अन्य कार्यक्रमों के साथ संघर्ष से बचने के लिए, मैं "वर्क ऐप" नामक एक नया कैलेंडर बनाना चाहता हूं या कुछ और अद्वितीय रूप से अद्वितीय बनाना चाहता हूं। फिर अपडेट के लिए, यह नई घटनाओं को बनाने से पहले उस सीमा से किसी भी घटना को हटा देगा। तो मेरे पास कुछ प्रश्न हैं ...Google कैलेंडर API: कैलेंडर चुनना/बनाना?

  1. मैं विशिष्ट कैलेंडर का चयन कैसे करूं जो मैं एपीआई का उपयोग करना चाहता हूं? (यह सभी जेड फ्रेमवर्क का उपयोग करके, वैसे, PHP में)। मैं देखता हूं कि मैं कैलेंडर की सूची के लिए कहां पूछ सकता हूं, लेकिन दस्तावेज यह नहीं दिखाता कि उस विशिष्ट कैलेंडर में कैसे जोड़ा जाए।

  2. मैं कैलेंडर बना सकते हैं? क्या मुझे ऐसे उपयोगकर्ता बनाने की ज़रूरत है जो ऐसे कैलेंडर बनाने में ऑप्ट इन करें? यदि हां, तो क्या कोई ऐसा URL है जो मैं उनके लिए उत्पन्न कर सकता हूं जैसे कि ईवेंट जोड़ने के लिए? (चीजों को सरल और सुसंगत बनाने के लिए कुछ भी सही है?)

  3. मैं नहीं चाहता कि उपयोगकर्ता अपने प्रमाण-पत्रों को स्टोर करें, जाहिर है, लेकिन मैं प्रत्येक अपडेट के लिए एक्सेस का अनुरोध भी नहीं करना चाहता हूं। क्या लगातार पहुंच रखने के लिए मुझे ओथ टोकन चाहिए? मुझे पता है कि यूआरएल टोकन एक बार उपयोग है, लेकिन क्या मैं सत्र टोकन स्टोर कर सकता हूं और इसे एक सप्ताह बाद पुन: उपयोग कर सकता हूं?

  4. वहाँ एक रास्ता प्रत्येक घटना डुप्लिकेट से बचने के लिए के लिए क्वेरी के अलावा अन्य है? मैं इस आखिरी रात का परीक्षण कर रहा था और अब मेरे पास उसी 50 घटनाओं के 7 उदाहरण हैं। मैं प्रत्येक जोड़ से पहले जांच के साथ सर्वर समय में जोड़ना नहीं चाहता हूं।

  5. अंत में, वहाँ कई घटनाओं को जोड़ने के लिए, या भी बस कैलेंडर में ICS फ़ाइल पुश करने के लिए एक तरीका है। अभी मेरे पास स्क्रिप्ट एक SQL क्वेरी है और प्रत्येक ईवेंट को जोड़ती है क्योंकि यह परिणाम के माध्यम से लूप होती है। ऐसा लगता है कि अपेक्षा से अधिक समय लगता है, इसलिए बस आईआईसी फाइल बनाना या सभी घटनाओं को एक ऑब्जेक्ट में जोड़ना और उन्हें एक साथ जोड़ना बेहतर होगा। धन्यवाद!

+0

मैंने google-app-engine टैग को हटा दिया, क्योंकि मुझे नहीं लगता कि आप इसका उपयोग कर रहे हैं। –

उत्तर

26

खैर के बाद से कोई भी उत्तर दिया, मैं विशेष रूप से नेट सामान और कच्चे प्रोटोकॉल में सिर्फ एक बिट पर Google कैलेंडर API के लिए गैर पीएचपी प्रलेखन पर चारों ओर poking, शुरू करने का फैसला। और अगर आप यह पता नहीं होता ...

इसे ठंडा नई सुविधाओं का उल्लेख है आप नेट दस्तावेज़ पर जाएं, तो प्रमाणीकृत उपयोगकर्ताओं के लिए नई गैर-प्राथमिक कैलेंडर बनाने की विशेष रूप से कैसे और ईवेंट जोड़ने के लिए कैसे गैर प्राथमिक कैलेंडर।

बेशक

, इस दस्तावेज़ पीएचपी क्षेत्र में कहीं नहीं दिखाई देता है और वहाँ एक एक-से-एक संबंध होना प्रतीत नहीं होता है। नए कैलेंडर के निर्माण के लिए, मैंने पहले कुछ स्पष्ट सामानों की कोशिश की, फिर, तोड़ने के लिए जा रहा था, कुछ ऐसा करने की कोशिश की जो स्पष्ट नहीं था। मैंने सोचा कि अगर रेडियो चुप्पी का कारण यह था कि मैं कोई जवाब नहीं जानता था लेकिन निश्चित रूप से करना चाहूंगा।

दो इस के लिए कुंजी हैं:

एक नया कैलेंडर बनाने के लिए

  1. आप कैलेंडर घटनाओं को जोड़ने के लिए एक ही विधि का उपयोग करने के लिए है, जो insertEvent()

  2. आपके पास है विधि में पोस्ट यूआरएल सेट करने के लिए, जो अन्यथा डिफ़ॉल्ट फ़ीड यूआरएल पर जाता है।

यह उदाहरण देखने के लिए कि एप्लिकेशन कैलेंडर पहले से मौजूद है और यदि नहीं की जाँच करता है, यह बनाता है:

//Standard creation of the HTTP client 
$gdataCal = new Zend_Gdata_Calendar($client); 

//Get list of existing calendars 
$calFeed = $gdataCal->getCalendarListFeed(); 

//Set this to true by default, only gets set to false if calendar is found 
$noAppCal = true; 

//Loop through calendars and check name which is ->title->text 
foreach ($calFeed as $calendar) { 
    if($calendar -> title -> text == "App Calendar") { 
    $noAppCal = false; 
    } 
} 

//If name not found, create the calendar 
if($noAppCal) { 

    // I actually had to guess this method based on Google API's "magic" factory 
    $appCal = $gdataCal -> newListEntry(); 
    // I only set the title, other options like color are available. 
    $appCal -> title = $gdataCal-> newTitle("App Calendar"); 

    //This is the right URL to post to for new calendars... 
    //Notice that the user's info is nowhere in there 
    $own_cal = "http://www.google.com/calendar/feeds/default/owncalendars/full"; 

    //And here's the payoff. 
    //Use the insertEvent method, set the second optional var to the right URL 
    $gdataCal->insertEvent($appCal, $own_cal); 
} 

और वहाँ तुम्हारे पास है। अगला लक्ष्य उस कैलेंडर में ईवेंट सम्मिलित करना है, डिफ़ॉल्ट कैलेंडर पर नहीं। गैर प्राथमिक कैलेंडर

आसान बात यह है कि आप शायद अनुमान लगा सकते हैं करने के लिए

जोड़ना घटनाओं आप की तरह इस तरह के फिर से कि वैकल्पिक URL सेट करने की जरूरत है जो: insertEvent($newEvent, $calURL), मुश्किल हिस्सा कैलेंडर के URL हो रही है। "स्वामित्व वाले कैलेंडर" पथ के विपरीत, विशिष्ट कैलेंडर में न केवल उपयोगकर्ता-निर्दिष्ट जानकारी होती है, उनके पास कुछ प्रकार की हैश-लुकिन आईडी भी होती है।

//Set up that loop again to find the new calendar: 
$calFeed = $gdataCal->getCalendarListFeed(); 
foreach ($calFeed as $calendar) { 
    if($calendar->title->text == "App Calendar") 
    //This is the money, you need to use '->content-src' 
    //Anything else and you have to manipulate it to get it right. 
    $appCalUrl = $calendar->content->src; 
} 

//.......... Some Assumed MySQL query and results ............. 

     while ($event = $result->fetch_assoc()) { 
    $title = $event['description']; 

    //Quick heads up 
    //This is a handy way of getting the date/time in one expression. 
    $eventStart = date('Y-m-d\TH:i:sP', strtotime($event['start'])); 
    $eventEnd = date('Y-m-d\TH:i:sP', strtotime($event['end'])); 

    $newEvent = $gdataCal->newEventEntry(); 
    $newEvent->title = $gdataCal->newTitle($title); 
    $when = $gdataCal->newWhen(); 
    $when->startTime = $eventStart; 
    $when->endTime = $eventEnd; 

    $newEvent->when = array($when); 

    //And at last, the insert is set to the calendar URL found above 
    $createdEvent = $gdataCal->insertEvent($newEvent, $appCalUrl); 
    } 
    echo "<p>".$result->num_rows." added to your Google calendar.</p>"; 

जो कोई मेरे सवाल पढ़ सकते हैं और इस पर कोई सोच किया था के लिए धन्यवाद:

कोड यह रहा। अगर कोई उपरोक्त कोड को कसने के तरीके के बारे में जानता है (शायद मुझे दो लूप की आवश्यकता नहीं है?) मुझे फीडबैक प्राप्त करना अच्छा लगेगा।

+1

आत्म-शोध और उत्तर के लिए धन्यवाद। क्या आप हमें बताए गए .NET दस्तावेज़ों का एक लिंक दे रहे हैं? एक बार फिर धन्यवाद। –

+1

क्या आपने पाया है कि गैर-प्राइमरी से विशिष्ट कैलेंडर का चयन कैसे करें? – glaz666

1

मेरा मानना ​​है कि एंथनी या तो Google कैलेंडर API साइट पर v1 दस्तावेज़ या v2 दस्तावेज़ों का जिक्र कर रहा है। मैंने v2 protocol guide का पालन करके पर्ल में यह बहुत आसानी से प्रबंधित किया।

कुंजी उस यूआरएल को बदलना है जिसे आप पोस्ट कर रहे हैं। डिफ़ॉल्ट "/ कैलेंडर/फ़ीड्स/डिफ़ॉल्ट/निजी/पूर्ण" के बजाय, पहले उपलब्ध कैलेंडर की सूची प्राप्त करें, फिर इच्छित कैलेंडर से सामग्री/@ src मान प्राप्त करें, और उस पर पोस्ट करें, उदा। /calendar/feeds/1234567890abcdefeg%40group.calendar.google.com/private/full