6

मैं जावा Google कैलेंडर एपीआई का उपयोग कर कैलेंडर से कनेक्ट करने का प्रयास कर रहा हूं। जावा एप्लिकेशन एक सेवा खाते का उपयोग करता है।सेवा Google खाते पर Google Google कैलेंडर एपीआई "access_denied"

मैंने निम्न कोड:

java.io.File licenseFile = new java.io.File("39790cb51b361f51cab6940d165c6cda4dc60177-privatekey.p12"); 

    GoogleCredential credential = new GoogleCredential.Builder() 

    .setTransport(HTTP_TRANSPORT) 
    .setJsonFactory(JSON_FACTORY) 
    .setServiceAccountId("[email protected]") 
    .setServiceAccountUser(EMAIL_ADRESS) 
    .setServiceAccountScopes(CalendarScopes.CALENDAR) 
    .setServiceAccountPrivateKeyFromP12File(licenseFile) 
    .build(); 

    client = new com.google.api.services.calendar.Calendar.Builder(
         HTTP_TRANSPORT, JSON_FACTORY, credential) 
         .setApplicationName("Google Calendar Sync").build(); 

    Calendar calendar = client.calendars().get(EMAIL_ADRESS).execute(); 

अंतिम पंक्ति मैं संदेश के साथ एक IOException मिलती है:

ex = (com.google.api.client.auth.oauth2.TokenResponseException) com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request { "error" : "access_denied" }

मैं dubble GoogleCredential वस्तु के लिए मूल्यों की जाँच की और वे सही हैं । मैंने अपने डोमेन कंसोल में , http://www.google.com/calendar/feeds/ भी जोड़ा है, क्लाइंट के रूप में एप्लिकेशन आईडी के साथ तृतीय पक्ष एप्लिकेशन एक्सेस

क्या मैं एक कदम भूल रहा हूं?

+0

का समर्थन नहीं करने वाले अनुमति समस्याओं और सेवा खातों से सावधान रहें हाय, क्या आपको यह काम करने के लिए मिला है? मैं इसे जीमेल स्कोप के साथ कोशिश कर रहा हूं लेकिन एक ही त्रुटि प्राप्त कर रहा हूं .. – zhywu

+0

मैंने उत्तर के साथ अपडेट किया;) –

+0

धन्यवाद, सेवा खाता जीमेल – zhywu

उत्तर

1

एपीआई अभी तक पूरा नहीं हुआ है। अधिक विशेष रूप से सेवा खाता हिस्सा।

कैलेंडर स्वामी को कैलेंडर की सेटिंग्स में कैलेंडर पढ़ने/लिखने के लिए एप्लिकेशन को अनुमति देने की आवश्यकता है। यह कैलेंडर की साझाकरण सेटिंग में पाया जाता है, वहां आप खातों के ई-मेल पते जोड़ सकते हैं और उन्हें अपने कैलेंडर पर अनुमति दे सकते हैं।

इसलिए इस मामले में मुझे यह जोड़ना पड़ा: [email protected] कैलेंडरों की अनुमति/साझा सूची में एप्लिकेशन को एक्सेस की आवश्यकता है।

मैंने एक और पोस्ट भी हटा दिया जो ऊपर दिए गए मुद्दे के कारण पूर्ण काम नहीं करता था। मैं इसे मिटा दूंगा क्योंकि इसमें कुछ कोड टुकड़े हैं जो भविष्य में अन्य लोगों की मदद कर सकते हैं। लेकिन Google कैलेंडर

+0

सहायता करें हाय स्टीफन, आपने कहा था कि "सेवा खाते Google कैलेंडर का समर्थन नहीं कर रहे हैं", तो क्या हम किसी के Google कैलेंडर ईवेंट को पुनर्प्राप्त करने के लिए सेवा खाते का उपयोग नहीं कर सकते हैं, भले ही उसने/उसे व्यवस्थापक ने हमें अनुमति दी है? – Jack

0

मैं

काम करने के लिए मिल गया है कि क्यों लेकिन मैं लाइन

.setServiceAccountUser(EMAIL_ADRESS) 

इसके अलावा, मैं डोमेन दायरे में एक अतिरिक्त यूआरएल जोड़ा नष्ट कर दिया मैं नहीं जानता:

https://apps-apis.google.com/a/feeds/calendar/resource/#readonly 

और एक लिंक हटा दिया जो काम नहीं कर रहा था।

अंत में मैं APPLICATIONNAME मेरे मुवक्किल घोषणा में एक ही नाम के लिए API कंसोल में के रूप में

client = new com.google.api.services.calendar.Calendar.Builder(
         HTTP_TRANSPORT, JSON_FACTORY, credential) 
         .setApplicationName("HolidaySyncs").build(); 

इन चरणों का यह काम शुरू कर दिया करने के बाद बदल दिया है।

इसके अलावा भविष्य में संदर्भ के लिए ध्यान दें के बाद मैं इस मैं निम्नलिखित त्रुटि थी क्या किया:

Event result = client.events().insert(<EMAIL ADRESS>, event).execute(); 

Event result = client.events().insert("primary", event).execute(); 

सबसे पहले करने के लिए:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "notFound", 
    "message": "Not Found" 
    } 
    ], 
    "code": 404, 
    "message": "Not Found" 
} 
} 

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

अद्यतन: इन कोड सुधार के बाद भी मुझे समस्याएं थीं। अधिक जानकारी के लिए स्वीकृत उत्तर पढ़ें।

0

मुझे क्या करना:

List find = client.events().list(EMAIL_ADRESS); 
DateTime timeMin = new DateTime(DateUtil.stringToDate("01/01/2013")); 
DateTime timeMax = new DateTime(DateUtil.stringToDate("01/02/2013")); 

find.setTimeMin(timeMin); 
find.setTimeMax(timeMax); 

    try{ 
     Events events = find.execute(); 
     int i =0; 

     while (true) { 
      System.out.println("Page: "+(++i)+": "+events.getItems().size()); 
     for (Event event : events.getItems()) { 
      System.out.println(event.getSummary()); 
     } 
     String pageToken = events.getNextPageToken(); 
     if (pageToken != null && !pageToken.isEmpty()) { 
      events = client.events().list(EMAIL_ADRESS).setPageToken(pageToken).execute(); 
     } else { 
      break; 
     } 
     } 

     }catch(GoogleJsonResponseException e){ 
      System.out.println(e.getMessage()); 
//   e.printStackTrace(); 
     }