2016-07-20 71 views
8

Mam już dostęp do tokena dostępu z google api przy użyciu oAuth2. Teraz chcę użyć tego tokena, aby uzyskać zdarzenia/kalendarze użytkowników. Próbowałem podążać za kodem, ale nie działa.Jak uzyskać dostęp do listy kalendarzy użytkowników i zdarzeń z google api przy użyciu tokenu dostępu i odświeżania tokena

Czy ktoś może mi tutaj pomóc, proszę. Dzięki

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(); 

Odpowiedz

1

Znalazłem rozwiązanie przy użyciu Google.Apis.Calendar.v3, zamieszczam go tutaj, więc może pomóc komuś innemu. Poniżej znajduje się kod, aby otrzymać listę zdarzeń, gdy masz odświeżania znak użytkownik:

najpierw uzyskać nowy token dostępu za pomocą tokena odświeżania:

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); 

następnie użyć toke i odświeżyć żeton do tworzenia poświadczeń.

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 klasa:

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

Według .NET Quickstart sample dostarczonych przez Google będziesz potrzebował aby pobrać client_secret.json która jest częścią procesu uwierzytelniania. Sprawdź cały proces w linku.

Oto urywek dla feching zdarzenia w .NET:

// 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(); 

Możesz również dowiedzieć się więcej o OAuth związanych przewodników w .NET here.

Aby uzyskać więcej informacji o pobieraniu list i wydarzeń Kalendarza, read this guide.

+0

Dzięki za odpowiadasz. Mój scenariusz jest inny. Chcę uzyskać inne zdarzenia kalendarza użytkowników, którzy uwierzytelniają się za pomocą mojej aplikacji Google. Dostęp offline do zdarzeń użytkowników. –