I ask for help with a task with Google Drive API in a shared folder

68 views
Skip to first unread message

Gabriel da Silva de Barros

unread,
Mar 6, 2024, 8:36:53 AM3/6/24
to Google Apps Script Community
This is my code and I can't understand how to modify it to create a directory in the 'shared with me' folder

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GoogleDriveConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var credenciais = Autenticar();

            using (var servico = AbrirServico(credenciais))
            {
                //// listar
                //console.writeline("listagem");
                //listararquivos(servico);
                //console.writeline("fim listagem");
                //console.readline();

                //// listagem paginada
                //console.clear();
                //console.writeline("listagem paginada");
                //listararquivospaginados(servico, 10);
                //console.writeline("fim listagem paginada");
                //console.readline();

                // Criar diretorio
                Console.Clear();
                Console.WriteLine("Criar diretório");
                CriarDiretorio(servico, "NovoDiretorio");
                Console.WriteLine("Fim Criar diretório");
                Console.ReadLine();

                // Deletar
                Console.Clear();
                Console.WriteLine("Deletar item");
                DeletarItem(servico, "NovoDiretorio");
                Console.WriteLine("Fim Deletar item");
                Console.ReadLine();

                // Upload
                Console.Clear();
                Console.WriteLine("Upload");
                Upload(servico, "arquivo.txt");
                Console.WriteLine("Fim Upload");
                Console.ReadLine();

                // Download
                Console.Clear();
                Console.WriteLine("Download");
                Download(servico, "arquivo.txt", "arquivoBaixado.txt");
                Console.WriteLine("Fim Download");
                Console.ReadLine();

                // Lixeira
                Console.Clear();
                Console.WriteLine("Lixeira");
                MoverParaLixeira(servico, "arquivo.txt");
                Console.WriteLine("Fim Lixeira");
                Console.ReadLine();
            }
        }

        private static Google.Apis.Auth.OAuth2.UserCredential Autenticar()
        {
            Google.Apis.Auth.OAuth2.UserCredential credenciais;

            using (var stream = new System.IO.FileStream("client_id.json", System.IO.FileMode.Open, System.IO.FileAccess.Read))
            {
                var diretorioAtual = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
                var diretorioCredenciais = System.IO.Path.Combine(diretorioAtual, "credential");

                credenciais = Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.AuthorizeAsync(
                    Google.Apis.Auth.OAuth2.GoogleClientSecrets.Load(stream).Secrets,
                    //new[] { Google.Apis.Drive.v3.DriveService.Scope.DriveReadonly },
                    new[] { Google.Apis.Drive.v3.DriveService.Scope.Drive },
                    "user",
                    System.Threading.CancellationToken.None,
                    new Google.Apis.Util.Store.FileDataStore(diretorioCredenciais, true)).Result;
            }

            return credenciais;
        }

        private static Google.Apis.Drive.v3.DriveService AbrirServico(Google.Apis.Auth.OAuth2.UserCredential credenciais)
        {
            return new Google.Apis.Drive.v3.DriveService(new Google.Apis.Services.BaseClientService.Initializer()
            {
                HttpClientInitializer = credenciais
            });
        }

        private static void ListarArquivos(Google.Apis.Drive.v3.DriveService servico)
        {
            //var request = servico.Files.List();
            //request.Fields = "files(id, name)";
            //var resultado = request.Execute();
            //var arquivos = resultado.Files;

            //if (arquivos != null && arquivos.Any())
            //{
            //    foreach (var arquivo in arquivos)
            //    {
            //        Console.WriteLine(arquivo.Name);
            //    }
            //}

            ListarArquivosPaginados(servico, 1000);
        }

        private static void ListarArquivosPaginados(Google.Apis.Drive.v3.DriveService servico, int arquivosPorPagina)
        {
            var request = servico.Files.List();
            request.IncludeItemsFromAllDrives = true;
            request.SupportsAllDrives = true;
            request.Fields = "nextPageToken, files(id, name)";
            //request.Q = "trashed=false";
            // Default 100, máximo 1000.
            request.PageSize = arquivosPorPagina;
            var resultado = request.Execute();
            var arquivos = resultado.Files;

            while (arquivos != null && arquivos.Any())
            {
                foreach (var arquivo in arquivos)
                {
                    Console.WriteLine(arquivo.Name);
                }

                if (resultado.NextPageToken != null)
                {
                    Console.WriteLine("Digite ENTER para ir para a próxima página");
                    Console.ReadLine();
                    request.PageToken = resultado.NextPageToken;
                    resultado = request.Execute();
                    arquivos = resultado.Files;
                }
                else
                {
                    arquivos = null;
                }
            }
        }

        private static void CriarDiretorio(Google.Apis.Drive.v3.DriveService servico, string nomeDiretorio)
        {
            var diretorio = new Google.Apis.Drive.v3.Data.File();
            diretorio.Name = nomeDiretorio;
            diretorio.MimeType = "application/vnd.google-apps.folder/";
            var request = servico.Files.Create(diretorio);
           
            request.Execute();

        }

        private static string[] ProcurarArquivoId(Google.Apis.Drive.v3.DriveService servico, string nome, bool procurarNaLixeira = false)
        {
            var retorno = new List<string>();

            //var request = servico.Files.List();
            //request.Q = string.Format("name = '{0}'", nome);
            //if (!procurarNaLixeira)
            //{
            //    request.Q += " and trashed = false";
            //}
            //request.Fields = "files(id)";
            //var resultado = request.Execute();
            //var arquivos = resultado.Files;

            //if (arquivos != null && arquivos.Any())
            //{
            //    foreach (var arquivo in arquivos)
            //    {
            //        retorno.Add(arquivo.Id);
            //    }
            //}

            var arquivos = ProcurarArquivo(servico, nome, procurarNaLixeira);
            if (arquivos != null && arquivos.Any())
            {
                retorno.AddRange(arquivos.Select(a => a.Id));
            }

            return retorno.ToArray();
        }

        private static Google.Apis.Drive.v3.Data.File[] ProcurarArquivo(Google.Apis.Drive.v3.DriveService servico, string nome, bool procurarNaLixeira = false)
        {
            var retorno = new List<Google.Apis.Drive.v3.Data.File>();

            var request = servico.Files.List();
            request.Q = string.Format("name = '{0}'", nome);
            if (!procurarNaLixeira)
            {
                request.Q += " and trashed = false";
            }
            request.Fields = "files(id)";
            var resultado = request.Execute();
            var arquivos = resultado.Files;

            if (arquivos != null && arquivos.Any())
            {
                foreach (var arquivo in arquivos)
                {
                    retorno.Add(arquivo);
                }
            }

            return retorno.ToArray();
        }

        private static void DeletarItem(Google.Apis.Drive.v3.DriveService servico, string nome)
        {
            var ids = ProcurarArquivoId(servico, nome);
            if (ids != null && ids.Any())
            {
                foreach (var id in ids)
                {
                    var request = servico.Files.Delete(id);
                    request.Execute();
                }
            }
        }

        private static void Upload(Google.Apis.Drive.v3.DriveService servico, string caminhoArquivo)
        {
            //var arquivo = new Google.Apis.Drive.v3.Data.File();
            //arquivo.Name = System.IO.Path.GetFileName(caminhoArquivo);
            //arquivo.MimeType = MimeTypes.MimeTypeMap.GetMimeType(System.IO.Path.GetExtension(caminhoArquivo));
            //using (var stream = new System.IO.FileStream(caminhoArquivo, System.IO.FileMode.Open, System.IO.FileAccess.Read))
            //{
            //    var request = servico.Files.Create(arquivo, stream, arquivo.MimeType);
            //    request.Upload();
            //}



            var arquivo = new Google.Apis.Drive.v3.Data.File();
            arquivo.Name = System.IO.Path.GetFileName(caminhoArquivo);
            arquivo.MimeType = MimeTypes.MimeTypeMap.GetMimeType(System.IO.Path.GetExtension(caminhoArquivo));
            //adicional de envio para diretorio especifico
            var idPasta = ProcurarArquivoId(servico, "NovoDiretorio").First();
            arquivo.Parents = new List<string>(new string[] { idPasta });

            using (var stream = new System.IO.FileStream(caminhoArquivo, System.IO.FileMode.Open, System.IO.FileAccess.Read))
            {
                var ids = ProcurarArquivoId(servico, arquivo.Name);
                Google.Apis.Upload.ResumableUpload<Google.Apis.Drive.v3.Data.File, Google.Apis.Drive.v3.Data.File> request;

                if (ids == null || !ids.Any())
                {
                    //request = servico.Files.Create(arquivo, stream, arquivo.MimeType);
                    var theRequest = servico.Files.Create(arquivo, stream, arquivo.MimeType);
                    theRequest.Fields = "id, parents";
                    request = theRequest;
                }
                else
                {
                    request = servico.Files.Update(arquivo, ids.First(), stream, arquivo.MimeType);
                }

                request.Upload();
            }
        }

        private static void Download(Google.Apis.Drive.v3.DriveService servico, string nome, string destino)
        {
            var ids = ProcurarArquivoId(servico, nome);
            if (ids != null && ids.Any())
            {
                var request = servico.Files.Get(ids.First());
                using (var stream = new System.IO.FileStream(destino, System.IO.FileMode.Create, System.IO.FileAccess.Write))
                {
                    request.Download(stream);
                }
            }
        }

        private static void MoverParaLixeira(Google.Apis.Drive.v3.DriveService servico, string nome)
        {
            var ids = ProcurarArquivoId(servico, nome);
            if (ids != null && ids.Any())
            {
                foreach (var id in ids)
                {
                    var arquivo = new Google.Apis.Drive.v3.Data.File();
                    arquivo.Trashed = true;
                    var request = servico.Files.Update(arquivo, id);
                    request.Execute();
                }
            }
        }
    }
}

DimuDesigns

unread,
Mar 6, 2024, 10:11:51 AM3/6/24
to Google Apps Script Community
This forum only supports Google Apps Script which is a dialect of Javascript. The code you've supplied is written in Java (which is distinct from Javascript).  

Gabriel da Silva de Barros

unread,
Mar 6, 2024, 2:10:06 PM3/6/24
to Google Apps Script Community
This project is in C# console application
Ícone "Verificada pela comunidade"

DimuDesigns

unread,
Mar 7, 2024, 8:29:45 AM3/7/24
to Google Apps Script Community
Google Apps Script is based on Javascript. So C# isn't valid either.

DME

unread,
Mar 14, 2024, 4:29:08 AM3/14/24
to google-apps-sc...@googlegroups.com

To create a directory in the "shared with me" folder in Google Drive using the Google Drive API, you need to specify the appropriate parent folder ID when creating the directory. However, the Google Drive API does not directly support accessing the "shared with me" folder. Instead, you can achieve this by retrieving the ID of the folder you want to create the directory in.

Here's how you can modify your CriarDiretorio method to create a directory in a specific parent folder:

csharp
private static void CriarDiretorio(Google.Apis.Drive.v3.DriveService servico, string nomeDiretorio, string parentId) { var diretorio = new Google.Apis.Drive.v3.Data.File { Name = nomeDiretorio, MimeType = "application/vnd.google-apps.folder" }; if (!string.IsNullOrEmpty(parentId)) { diretorio.Parents = new List<string> { parentId }; }
var request = servico.Files.Create(diretorio); request.Execute(); }

Then, you can call this method with the appropriate parent folder ID to create the directory within that folder. However, you need to find out the ID of the "shared with me" folder or any other folder you want to create the directory in.

Here's how you can retrieve the ID of the "shared with me" folder:

csharp
private static string GetSharedWithMeFolderId(Google.Apis.Drive.v3.DriveService servico) { var request = servico.Files.List(); request.Q = "sharedWithMe=true and mimeType='application/vnd.google-apps.folder'"; request.Fields = "files(id, name)"; var resultado = request.Execute(); var folder = resultado.Files.FirstOrDefault(); return folder?.Id; }

Then, you can call this method to get the ID of the "shared with me" folder and pass it as the parentId parameter when creating the directory:

csharp
var sharedWithMeFolderId = GetSharedWithMeFolderId(servico); CriarDiretorio(servico, "NovoDiretorio", sharedWithMeFolderId);

Make sure to handle error cases and check for null values where necessary. Additionally, ensure that your application has the appropriate permissions to access the parent folder.


--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-apps-script-community/648fb546-8311-4d57-b0a3-0cc8ea3d0910n%40googlegroups.com.


--
Reply all
Reply to author
Forward
0 new messages