2016-07-20 9 views
8

मैंने पहले ही उपयोगकर्ताओं को oAuth2 का उपयोग करके Google एपीआई से टोकन एक्सेस प्राप्त कर लिया है। अब मैं उपयोगकर्ता घटनाओं/कैलेंडर प्राप्त करने के लिए इस टोकन का उपयोग करना चाहता हूं। मैंने कोड का पालन करने की कोशिश की है लेकिन यह काम नहीं कर रहा है।एक्सेस टोकन और टोकन रीफ्रेश टोकन का उपयोग करके Google एपीआई से उपयोगकर्ता कैलेंडर सूची और ईवेंट तक कैसे पहुंचे

क्या कोई यहां कृपया मेरी सहायता कर सकता है। धन्यवाद

var urlBuilder = new System.Text.StringBuilder(); 

    urlBuilder.Append("https://"); 
    urlBuilder.Append("www.googleapis.com"); 
    urlBuilder.Append("/calendar/v3/users/me/calendarList"); 
    urlBuilder.Append("?minAccessRole=reader"); 

    var httpWebRequest = HttpWebRequest.Create(urlBuilder.ToString()) as HttpWebRequest; 

    httpWebRequest.CookieContainer = new CookieContainer(); 
    httpWebRequest.Headers["Authorization"] string.Format("Bearer {0}", data.access_token); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    Stream eventResponseStream = response.GetResponseStream(); 
    StreamReader eventResponseStreamReader = new StreamReader(responseStream); 
    string eventsStr = eventResponseStreamReader.ReadToEnd(); 

उत्तर

1

मुझे Google.Apis.Calendar.v3 का उपयोग करके समाधान मिला है, मैं इसे यहां पोस्ट कर रहा हूं ताकि किसी और की मदद कर सके।

पहले नया पहुँच टोकन ताज़ा टोकन का उपयोग मिलता है:

string postString = "client_id=yourclientid"; 
postString += "&client_secret=youclientsecret&refresh_token=userrefreshtoken"; 
postString += "&grant_type=refresh_token"; 
string url = "https://www.googleapis.com/oauth2/v4/token"; 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url.ToString()); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
UTF8Encoding utfenc = new UTF8Encoding(); 
byte[] bytes = utfenc.GetBytes(postString); 
Stream os = null; 

    request.ContentLength = bytes.Length; 
    os = request.GetRequestStream(); 
    os.Write(bytes, 0, bytes.Length); 


    GoogleToken token = new GoogleToken(); 

    HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse(); 
    Stream responseStream = webResponse.GetResponseStream(); 
    StreamReader responseStreamReader = new StreamReader(responseStream); 
    string result = responseStreamReader.ReadToEnd(); 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    token = serializer.Deserialize<GoogleToken>(result); 

फिर toke का उपयोग करें और साख बनाने के लिए टोकन ताज़ा के बाद आप एक उपयोगकर्ता की ताज़ा टोकन जब घटनाओं सूची प्राप्त करने के कोड है।

var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer 
      { 
       ClientSecrets = new ClientSecrets 
       { 
        ClientId = yourclientid, 
        ClientSecret = yourclientsecret 
       }, 
       Scopes = new[] { CalendarService.Scope.Calendar } 
      }); 



      var credential = new UserCredential(flow, Environment.UserName, new TokenResponse 
      { 
       AccessToken = token.access_token, 
       RefreshToken = userrefreshtoke 
      }); 


      CalendarService service = new CalendarService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "application name", 
      }); 
      var list = service.CalendarList.List().Execute().Items; 
      foreach (var c in list) 
      { 
       var events = service.Events.List(c.Id).Execute().Items.Where(i => i.Start.DateTime >= DateTime.Now).ToList(); 
       foreach (var e in events) 
       { 
       } 
} 

GoogleToken वर्ग:

public class GoogleToken 
    { 
     public string access_token { get; set; } 
     public string token_type { get; set; } 
     public string expires_in { get; set; }  
    } 
0

.NET Quickstart sample गूगल द्वारा प्रदान की आप एक client_secret.json जो प्रमाणीकरण प्रक्रिया का हिस्सा है डाउनलोड करने के लिए की आवश्यकता होगी, हो जाएगा के अनुसार। लिंक में पूरी प्रक्रिया की जांच करें।

यहाँ

'नेट में घटनाओं feching के लिए एक टुकड़ा:

// List events. 
Events events = request.Execute(); 
Console.WriteLine("Upcoming events:"); 
if (events.Items != null && events.Items.Count > 0) 
{ 
foreach (var eventItem in events.Items) 
{ 
string when = eventItem.Start.DateTime.ToString(); 
if (String.IsNullOrEmpty(when)) 
{ 
when = eventItem.Start.Date; 
} 
Console.WriteLine("{0} ({1})", eventItem.Summary, when); 
} 
} 
else 
{ 
Console.WriteLine("No upcoming events found."); 
} 
Console.Read(); 

तुम भी .NET here में oAuth संबंधित गाइडों की अधिक पढ़ सकते हैं।

कैलेंडर सूचियों और घटनाओं को पुनर्प्राप्त करने के बारे में अधिक जानकारी के लिए, read this guide

+0

धन्यवाद आप के लिए उत्तर। मेरा परिदृश्य अलग है। मैं अन्य उपयोगकर्ता कैलेंडर ईवेंट प्राप्त करना चाहता हूं जो मेरे Google एप्लिकेशन के माध्यम से प्रमाणीकृत हैं। उपयोगकर्ता घटनाओं के लिए ऑफ़लाइन पहुंच। –

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