2016-07-20 25 views
8

Ich habe bereits Benutzer Zugriffstoken von Google API mit oAuth2 erhalten. Jetzt möchte ich dieses Token verwenden, um Benutzerereignisse/Kalender zu erhalten. Ich habe folgenden Code versucht, aber es funktioniert nicht.Wie Zugriff auf Benutzer Kalenderliste und Ereignisse von Google API mit Zugriffstoken und aktualisieren Token

Kann mir hier bitte jemand helfen. Dank

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

Antwort

1

Ich habe Lösung mit Google.Apis.Calendar.v3 gefunden, ich poste es hier, also kann jemand anderes helfen. Im Folgenden finden Sie den Code der Ereignisliste zu erhalten, wenn Sie Aktualisierungs-Token eines Benutzers haben:

Erste neuen Zugang zu bekommen Token, um den Aktualisierungs-Token verwenden:

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

dann die Toke verwenden und aktualisieren Token-Anmeldeinformationen zu erstellen.

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

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

Nach dem .NET Quickstart sample von Google bereitgestellt werden Sie eine client_secret.json zum Download mehr brauchen, die einen Teil des Authentifizierungsprozesses ist. Überprüfen Sie den gesamten Prozess in dem Link.

Hier ein Ausschnitt für Ereignisse in .NET 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(); 

Sie auch mehr von oAuth bezogenen Führungen in .NET here lesen kann.

Weitere Informationen zum Abrufen von Kalenderlisten und Ereignissen finden Sie unter read this guide.

+0

Dank für Sie antworten. Mein Szenario ist anders. Ich möchte andere Kalenderereignisse für Benutzer abrufen, die sich über meine Google-Anwendung authentifizieren. Offline-Zugriff auf Benutzerereignisse –