2013-04-05 13 views
8

नहीं बना रहा है, मैं एपीआई के माध्यम से Google कैलेंडर पर ईवेंट बनाने के लिए googleapis और gapitoken पैकेजों को एक साथ हैकिंग में सफल रहा हूं। इसका सब कुछ प्रोग्रामेटिक रूप से एक Google Hangout लिंक उत्पन्न करने का तरीका ढूंढना था, जिसे आप एपीआई के माध्यम से नहीं कर सकते, जहां तक ​​मुझे पता है। this post के अनुसार, आप ईवेंट बनाने के दौरान Hangout लिंक के स्वचालित निर्माण को सक्षम करने में सक्षम होना चाहिए, जिसे मैंने खाते के लिए किया है।एपीआई का उपयोग करके Google कैलेंडर ईवेंट बनाना, Hangout लिंक

मैं जिस कोड का उपयोग कर रहा हूं वह केवल नोड.जेएस से चलने वाला है, इसलिए कोई उपयोगकर्ता का सामना करने वाला हिस्सा नहीं है। मैं OAuth2.0 के माध्यम से प्रमाणित करने के लिए सेवा खाता तकनीक का उपयोग कर रहा हूं। सबकुछ ठीक काम करता प्रतीत होता है, सिवाय इसके कि घटना को छोड़कर 'hangoutलिंक' नामक कोई संपत्ति नहीं है। कोई विचार?

var moment = require('moment'); 
var googleapis = require('googleapis'); 
var GoogleToken = require('gapitoken'); 
var OAuth2Client = googleapis.OAuth2Client; 

var token = new GoogleToken({ 
    iss: '*******************@developer.gserviceaccount.com', 
    scope: 'https://www.googleapis.com/auth/calendar', 
    keyFile: './*****************.pem' 
}, function (err) { 
    if (err) { 
     return console.log(err); 
    } 

    token.getToken(function (err, token) { 
     if (err) { 
      return console.log(err); 
     } 

     googleapis.load('calendar', 'v3', function (err, client) { 
      var oauthClient = new OAuth2Client('', '', '', {}, { 
       token_type: 'Bearer', 
       access_token: token 
      }); 

      var now = moment().format(); 

      client 
       .calendar 
       .events 
       .insert({ 
        calendarId: 'primary', 
        resource: { 
         summary: 'hangout', 
         description: 'hangout', 
         reminders: { 
          overrides: { 
           method: 'popup', 
           minutes: 0 
          } 
         }, 
         start: { 
          dateTime: now 
         }, 
         end: { 
          dateTime: now 
         }, 
         attendees: [{ 
          email: '****@**********.com' 
         }] 
        } 
       }) 
       .withAuthClient(oauthClient) 
       .execute(function (err, event) { 
        // event does not contain hangoutLink 
        console.log(event.hangoutLink); 
       }); 
     }); 
    }); 
}); 

उत्तर

0

प्रमाणन ग्राहक स्पष्ट रूप से करने के लिए क्रेडेंशियल्स सेट करें:

var oauthClient = new OAuth2Client('', '', ''); 
oauthClient.credentials = { 
    token_type: 'Bearer', 
    access_token: token 
}; 
2

यह एक पूर्ण समाधान नहीं है, लेकिन मैं बाधाओं थोड़ा बदलकर आंशिक सफलता मिली है। घटनाओं के साथ hangout लिंक का स्वत: निर्माण खाता-विशिष्ट सेटिंग प्रतीत होता है, कैलेंडर कैलेंडर सेटिंग नहीं। इसका अर्थ यह है कि ईवेंट बनाने के लिए एक सेवा खाता मॉडल का उपयोग करके hangout निर्माण को ट्रिगर नहीं किया जाता है, क्योंकि हम (जहां तक ​​मैं कह सकता हूं) में बनाए गए Google खातों पर ऑटो-निर्माण-hangouts चालू करने का कोई तरीका नहीं है सेवा खाता मॉडल।

इस सिद्धांत का परीक्षण करने के लिए, मैंने एक ओथ-आधारित संस्करण को एक साथ रखा जो पारंपरिक Google खाता टोकन प्राप्त करता है। ऐसा लगता है: https://gist.github.com/drewww/5665130

यह आपके उदाहरण के समान ही कम है, टोकन के इस्तेमाल के प्रकार को छोड़कर। कॉलबैक में, hangout लिंक्स विश्वसनीय रूप से आबादी है।

जाहिर है, यह आपके उदाहरण के रूप में उतना साफ नहीं है। यह पारंपरिक ओथ फ्लो पर निर्भर करता है, और उपयोगकर्ता ईवेंट बनाने के लिए को अपनी व्यक्तिगत खाता सेटिंग्स में स्वत: बनाते हैं। यह उपयोगकर्ता अनुभव परिप्रेक्ष्य से स्पष्ट रूप से अत्यधिक असुविधाजनक है। मैं एक डमी Google खाता बनाने और इसे अपने सभी hangouts के मालिक होने का प्रयास करने जा रहा हूं।

+0

मैं वर्तमान में बहिष्कृत एपीआई का उपयोग करके कुछ ऐसा कर रहा हूं जो आपको टोकन का उपयोग करने की अनुमति देता है। वर्तमान में क्या काम कर रहा है इसके लिए यहां देखें: https://gist.github.com/eliperelman/b0201cbea1556ed1fe2e ध्यान दें कि मैंने कुछ अतिरिक्त पैरामीटर पास करने की अनुमति देने के लिए अंतर्निहित मॉड्यूल में कुछ संशोधन किए हैं। – Eli

+0

आह, हाँ। वे ऐसे उपयोगकर्ता से सामान्य उपयोगकर्ता टोकन हैं जिनके पास स्वतः-निर्माण-hangout चालू है? मैं कुछ ऐसा कर सकता हूं। ओथ फ्लो स्पष्ट रूप से ऐसी सेवा के लिए इतना अच्छा नहीं है जो उपयोगकर्ता हस्तक्षेप के बिना चलाना चाहिए, इसलिए टोकन जेनरेट करने के लिए उपयोगकर्ताओं के क्रेडेंशियल्स को हार्ड कोड करने में सक्षम होना आसान होगा। मैं वह शॉट दूंगा। आखिरकार, ये दोनों दृष्टिकोण काफी नाजुक लगते हैं और Google उन्हें किसी भी समय तोड़ सकता है। निराशाजनक यह करने के लिए एक अग्रिम तरीका नहीं है। – drewww

+0

मुझे क्लाइंटलॉगिन के बिना स्वचालित फैशन में काम करने की आकांक्षाएं थीं, लेकिन मुझे इस बिंदु पर कोई रास्ता नहीं दिख रहा है। कुछ स्तर पर मानव/ब्राउज़र हस्तक्षेप के बिना काम करने योग्य प्रतीत नहीं होता है। जितना दर्द होता है, मुझे लगता है कि मुझे क्लाइंटलॉगिन मार्ग भी जाना है। क्या आप क्लाइंटलॉगिन में किए गए परिवर्तनों को साझा करना चाहते हैं? या बस मुझे समायोजन पर सही दिशा में इंगित करें? – drewww

संबंधित मुद्दे