Динамически создавать и совместно использовать папки Google Диска

У меня есть список писем.

Для каждого письма мне нужно создать папку с Google Диском и поделиться им с данным электронным письмом.

Как я могу сделать это программно?

Я использую ASP.NET 4.0.

Ответ 1

Прежде всего, вам нужно убедиться, что у вас есть приложение с clientid/secret и исправлено перенаправление uri. Для моего случая - это настольное приложение:

enter image description here

Пока вы получите клиентский/секретный ключ:

enter image description here

Теперь пришло время написать несколько кодов!

Шаг 1 - авторизация:

private async static Task<UserCredential> Auth(ClientSecrets clientSecrets)
{   
    return await GoogleWebAuthorizationBroker.AuthorizeAsync(clientSecrets, Scopes, "user", CancellationToken.None);
}

Шаг 2 - создайте свой клиент для диска Google:

private static DriveService GetService(UserCredential credential)
{
    return new DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "MyApplicationName",
    });
}

Шаг 3 - создайте папку (или любое другое содержимое):

private static string CreateFolder(DriveService service, string folderName)
{
    var file = new File {Title = folderName, MimeType = "application/vnd.google-apps.folder"};
    var result = service.Files.Insert(file).Execute();
    return result.Id;
}

Шаг 4 - поделитесь им!

/// <summary>
/// Share content. Doc link: https://developers.google.com/drive/v2/reference/permissions/insert
/// </summary>  
private static void Share(DriveService service, string fileId, string value, string type, string role)
{
    var permission = new Permission {Value = value, Type = type, Role = role};
    service.Permissions.Insert(permission, fileId).Execute();
}

И, наконец, использование всего:

static void Main(string[] args)
{
    var ClientId = "MySecredId";
    var SecretKey = "MySecretKey";

    var Scopes = new[] { DriveService.Scope.DriveFile, DriveService.Scope.Drive };

    var secrets = new ClientSecrets { ClientId = ClientId, ClientSecret = SecretKey };
    var credentials = Auth(secrets).Result;

    var service = GetService(credentials);

    var folderId = CreateFolder(service, "folderName");

    Share(service, folderId, "[email protected]", "user", "reader");
}

В списке писем вы можете сделать то же самое, что создаете/делитесь контентом в цикле для каждого вашего письма.

Некоторые полезные ссылки:

Создание файлов

Совместное использование файлов

И Вам понадобится Google.Apis.Drive.v2 пакет nuget

Ответ 2

Шаги, чтобы выполнить эту привязку при аутентификации с помощью Google в первую очередь. Как только вы это сделаете, вы сможете получить доступ к API-интерфейсу Drive для выполнения необходимых действий. Следующие ссылки охватывают все, что вам нужно.

Шаг 1. Аутентификация (на стороне сервера в вашем случае, когда вы используете ASP.NET) https://developers.google.com/drive/web/auth/web-server

Шаг 2: Создайте свои папки https://developers.google.com/drive/web/folder

Шаг 3: Поделитесь своими папками https://developers.google.com/drive/web/manage-sharing