Как получить классные комнаты из класса google с помощью вызовов API?

72
10

Поэтому я пытаюсь извлечь свои классы из моей классной комнаты google в мое приложение: вот мой URL-адрес google:

var Googleurl = "https://accounts.google.com/o/oauth2/v2/auth?redirect_uri=" + googleplus_redirect_url + "&prompt=consent&response_type=code&client_id=" + googleplus_client_id + "&scope=https://www.googleapis.com/auth/userinfo.profile+https://www.google.com/m8/feeds/+https://www.googleapis.com/auth/drive+https://www.googleapis.com/auth/drive.appdata+https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/drive.metadata+https://www.googleapis.com/auth/classroom.courses+https://www.googleapis.com/auth/classroom.profile.emails+https://www.googleapis.com/auth/classroom.profile.photos+https://www.googleapis.com/auth/classroom.rosters+https://www.googleapis.com/auth/classroom.rosters.readonly&access_type=offline";

После этого я запрашиваю коды доступа через:

 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token");
webRequest.Method = "POST";
Parameters = "code=" + code + "&client_id=" + googleplus_client_id + "&client_secret=" + googleplus_client_sceret + "&redirect_uri=" + googleplus_redirect_url + "&grant_type=authorization_code";
byte[] byteArray = Encoding.UTF8.GetBytes(Parameters);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.ContentLength = byteArray.Length;
Stream postStream = webRequest.GetRequestStream();
// Add the post data to the web request
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();

WebResponse response = webRequest.GetResponse();
postStream = response.GetResponseStream();
StreamReader reader = new StreamReader(postStream);
string responseFromServer = reader.ReadToEnd();

GooglePlusAccessToken serStatus = JsonConvert.DeserializeObject<GooglePlusAccessToken>(responseFromServer);

Я могу получить код доступа, а также токен обновления.

Теперь, когда я хочу получить свой класс:

 string p="https://classroom.googleapis.com/v1/courses";
string auth = "Bearer "+access_token;
private bool GetClasses(string p,string auth)
{
using (var client = new WebClient())
{
var uri = new Uri(p);
//client.DefaultRequestHeaders.Authorization=new AuthenticationHeaderValue("Bearer", auth);
string req="Authorization: "+ auth;
client.Headers.Add(req);

var response = client.DownloadString(uri);

}

return true;
}

Этот код возвращает ошибку типа: System.Net.WebException: {"Удаленный сервер возвратил ошибку: (403) Запрещено".}

Я использовал тот же access_token, чтобы получить все остальные области, как показано в параметре scopes в mu Googleurl. Однако я не могу получить доступ к своим классам, хотя я добавил соответствующие области для него.

спросил(а) 2018-03-09T18:54:00+03:00 1 год, 11 месяцев назад
1
Решение
51

По-видимому, для использования функций класса, связанных с классом google, нам необходимо включить класс Api в google. Как ни глупо, как может показаться, я не знал об этом (поскольку я уже включил службу Google Api). Просто нужно было активировать класс api, и код работал как шарм.

ответил(а) 2018-03-09T19:04:00+03:00 1 год, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема