С помощью кода метода, который я привел ниже, я пытаюсь получить список дополнительных вложений к заданию Класса. Я захожу под учетной записью учителя класса, и, как вы можете видеть в начале, добавлены все возможные разрешения. Проблема: я получаю следующую ошибку: "Класс обслуживания выдал исключение. HttpStatusCode запрещен. В запросе недостаточно областей аутентификации".
Мой метод:
public class Classroom
{
static string[] Scopes = { ClassroomService.Scope.ClassroomCourses, ClassroomService.Scope.ClassroomCourseworkmaterials,
ClassroomService.Scope.ClassroomCourseworkMe, ClassroomService.Scope.ClassroomCourseworkStudents, ClassroomService.Scope.ClassroomCourseworkStudentsReadonly, ClassroomService.Scope.ClassroomGuardianlinksStudents,
ClassroomService.Scope.ClassroomAnnouncements, ClassroomService.Scope.ClassroomCourseworkMe, ClassroomService.Scope.ClassroomProfileEmails, ClassroomService.Scope.ClassroomProfilePhotos,
ClassroomService.Scope.ClassroomPushNotifications, ClassroomService.Scope.ClassroomRosters, ClassroomService.Scope.ClassroomStudentSubmissionsMeReadonly,
ClassroomService.Scope.ClassroomStudentSubmissionsStudentsReadonly, ClassroomService.Scope.ClassroomTopics};
static string ApplicationName = "ControlGoogleMCV";
public GDrive_baj GDrive_bajD = new GDrive_baj();
public void Main()
{
ClientSecrets secrets = new ClientSecrets()
{
ClientId = "________________",
ClientSecret = "__________________________"
};
UserCredential credential;
using (var stream =
new FileStream(Form1.ObtenerAtributo("rutalocaljson"), FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/", System.Reflection.Assembly.GetExecutingAssembly().GetName().FullName, "paraclassroom");
credential = Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.AuthorizeAsync(secrets,
Scopes,
"_________",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
// Create Classroom API service.
var service = new ClassroomService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
// Define request parameters.
CoursesResource.ListRequest request = service.Courses.List();
request.PageSize = 10;
try
{
CoursesResource.ListRequest lr = new CoursesResource.ListRequest(service);
string cadbusname = Interaction.InputBox("Cadena de búsqueda en el atributo ''name'' del curso. ''Cancelar'' no " +
"dará resultado; ''Aceptar'' inicia la búsqueda", "Cadena de búsqueda en el nombre del curso", "Transcripción de la música flamenca 2024/2025"
);
if (cadbusname.Length > 0) {
foreach (Course c in lr.Execute().Courses)
{
if (c.Name.Contains(cadbusname))
{
string cadbusnametarea = Interaction.InputBox("Cadena de búsqueda en el atributo ''name'' de la tarea. ''Cancelar''" +
"no dará resultado; ''Aceptar'' inicia la búsqueda", "Cadena de búsqueda en el nombre de la tarea", "Ejercicio 8.");
CoursesResource.CourseWorkResource.ListRequest cwrlr = new CoursesResource.CourseWorkResource.ListRequest(service, c.Id);
foreach (CourseWork cwr in cwrlr.Execute().CourseWork)
{
if (cwr.Title.Contains(cadbusnametarea))
{
string idCur = cwr.Id;
var cwrmat = cwr.Materials;
foreach (var item in cwrmat)
{
if (item.DriveFile != null)
{
string tx = "El archivo se ha subido desde Google Drive. El thumbonailurl es : " + item.DriveFile.DriveFile.ThumbnailUrl +
". El enlace alternativo es: " + item.DriveFile.DriveFile.AlternateLink + ". El título es: " + item.DriveFile.DriveFile.Title;
}
if (item.Link != null)
{
string tx = "Se trata de un enlace. La url es " + item.Link.Url + ". El thumbonailurl es : " + item.Link.ThumbnailUrl +
". El título es: " + item.Link.Title;
}
}
CoursesResource.CourseWorkResource.AddOnAttachmentsResource.ListRequest ccarlr = new CourseWorkResource.AddOnAttachmentsResource.ListRequest(service, c.Id, idCur);
foreach (AddOnAttachment item in ccarlr.Execute().AddOnAttachments)
{
string nn = item.ItemId;
}
}
}
}
}
};
}
catch (Exception e)
{
string ff = e.Message;
}
}
}
С помощью кода метода, который я привел ниже, я пытаюсь получить список дополнительных вложений к заданию Класса. Я захожу под учетной записью учителя класса, и, как вы можете видеть в начале, добавлены все возможные разрешения. Проблема: я получаю следующую ошибку: [b]"Класс обслуживания выдал исключение. HttpStatusCode запрещен. В запросе недостаточно областей аутентификации".[/b] Мой метод: [code]public class Classroom { static string[] Scopes = { ClassroomService.Scope.ClassroomCourses, ClassroomService.Scope.ClassroomCourseworkmaterials, ClassroomService.Scope.ClassroomCourseworkMe, ClassroomService.Scope.ClassroomCourseworkStudents, ClassroomService.Scope.ClassroomCourseworkStudentsReadonly, ClassroomService.Scope.ClassroomGuardianlinksStudents, ClassroomService.Scope.ClassroomAnnouncements, ClassroomService.Scope.ClassroomCourseworkMe, ClassroomService.Scope.ClassroomProfileEmails, ClassroomService.Scope.ClassroomProfilePhotos, ClassroomService.Scope.ClassroomPushNotifications, ClassroomService.Scope.ClassroomRosters, ClassroomService.Scope.ClassroomStudentSubmissionsMeReadonly, ClassroomService.Scope.ClassroomStudentSubmissionsStudentsReadonly, ClassroomService.Scope.ClassroomTopics}; static string ApplicationName = "ControlGoogleMCV";
public GDrive_baj GDrive_bajD = new GDrive_baj(); public void Main() { ClientSecrets secrets = new ClientSecrets() { ClientId = "________________", ClientSecret = "__________________________" };
UserCredential credential;
using (var stream = new FileStream(Form1.ObtenerAtributo("rutalocaljson"), FileMode.Open, FileAccess.Read)) {
// Create Classroom API service. var service = new ClassroomService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName, });
try { CoursesResource.ListRequest lr = new CoursesResource.ListRequest(service);
string cadbusname = Interaction.InputBox("Cadena de búsqueda en el atributo ''name'' del curso. ''Cancelar'' no " + "dará resultado; ''Aceptar'' inicia la búsqueda", "Cadena de búsqueda en el nombre del curso", "Transcripción de la música flamenca 2024/2025" ); if (cadbusname.Length > 0) { foreach (Course c in lr.Execute().Courses) { if (c.Name.Contains(cadbusname)) { string cadbusnametarea = Interaction.InputBox("Cadena de búsqueda en el atributo ''name'' de la tarea. ''Cancelar''" + "no dará resultado; ''Aceptar'' inicia la búsqueda", "Cadena de búsqueda en el nombre de la tarea", "Ejercicio 8."); CoursesResource.CourseWorkResource.ListRequest cwrlr = new CoursesResource.CourseWorkResource.ListRequest(service, c.Id);
foreach (CourseWork cwr in cwrlr.Execute().CourseWork) { if (cwr.Title.Contains(cadbusnametarea)) { string idCur = cwr.Id; var cwrmat = cwr.Materials;
foreach (var item in cwrmat) { if (item.DriveFile != null) { string tx = "El archivo se ha subido desde Google Drive. El thumbonailurl es : " + item.DriveFile.DriveFile.ThumbnailUrl + ". El enlace alternativo es: " + item.DriveFile.DriveFile.AlternateLink + ". El título es: " + item.DriveFile.DriveFile.Title; } if (item.Link != null) { string tx = "Se trata de un enlace. La url es " + item.Link.Url + ". El thumbonailurl es : " + item.Link.ThumbnailUrl + ". El título es: " + item.Link.Title; } }
CoursesResource.CourseWorkResource.AddOnAttachmentsResource.ListRequest ccarlr = new CourseWorkResource.AddOnAttachmentsResource.ListRequest(service, c.Id, idCur); foreach (AddOnAttachment item in ccarlr.Execute().AddOnAttachments) { string nn = item.ItemId; } } } } } }; } catch (Exception e) { string ff = e.Message; } } } [/code] В строке появляется ошибка: [code] foreach (AddOnAttachment item in ccarlr.Execute().AddOnAttachments)[/code] Буду признателен за любую помощь. Цель – получить доступ к данным, относящимся к вложениям задач, которые Я сам создал для студентов.