sexta-feira, 14 de abril de 2017

Utilizando a API do Google Drive no C# e VB.NET - Parte 2

Outro detalhe importante é que, por padrão, a listagem de arquivos também retorna todos os arquivos que estiverem na lixeira. Se esse não for o comportamento que você está querendo, basta configurar um filtro para o request, através da propriedade “Q“. Exemplo:
1
2
// C#
request.Q = "trashed=false";
1
2
' VB.NET
Request.Q = "trashed=false"

Listagem paginada

Como vimos na seção anterior, o máximo de arquivos e pastas que serão listados pela API do Google Drive é 1000. Mas, o que fazemos se quisermos listar mais do que 1000 itens? Nesse caso, a saída é fazer uma listagem paginada, ou seja, retornarmos “X” itens de cada vez.
Para fazermos isso, nós temos que retornar também o “nextPageToken” na hora de listarmos os itens. Com isso, sempre que executarmos o request, caso ainda existam itens para serem retornados, o resultado sempre contará com um token que possibilitará a listagem da próxima página. Veja como é que fica o código de um novo método para listagem de arquivos que receberá também a quantidade de itens por página:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// C#
private static void ListarArquivosPaginados(Google.Apis.Drive.v3.DriveService servico, int arquivosPorPagina)
{
    var request = servico.Files.List();
    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;
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
' VB.NET
Private Sub ListarArquivosPaginados(Servico As Google.Apis.Drive.v3.DriveService, ArquivosPorPagina As Integer)
    Dim Request = Servico.Files.List()
    Request.Fields = "nextPageToken, files(id, name)"
    'Request.Q = "trashed=false"
    ' Default 100, máximo 1000.
    Request.PageSize = ArquivosPorPagina
    Dim Resultado = Request.Execute()
    Dim Arquivos = Resultado.Files
 
    While Arquivos IsNot Nothing AndAlso Arquivos.Any()
        For Each arquivo In Arquivos
            Console.WriteLine(arquivo.Name)
        Next
 
        If Resultado.NextPageToken IsNot Nothing Then
            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 = Nothing
        End If
    End While
End Sub
No bloco “using“, nós podemos chamar esse novo método, passando a quantidade de itens por página. Por exemplo, o código para listarmos os itens de 10 em 10 ficaria assim:
1
2
3
4
5
6
// C#
Console.Clear();
Console.WriteLine("Listagem paginada");
ListarArquivosPaginados(servico, 10);
Console.WriteLine("Fim Listagem paginada");
Console.ReadLine();
1
2
3
4
5
6
' VB.NET
Console.Clear()
Console.WriteLine("Listagem paginada")
ListarArquivosPaginados(Servico, 10)
Console.WriteLine("Fim Listagem paginada")
Console.ReadLine()
Veja só o resultado:

Criação de diretórios

Agora que já conseguimos listar os itens do nosso Google Drive, vamos conferir como é que podemos fazer para criarmos um novo diretório. Estranhamente, tudo no Google Drive são “itens“. Ou seja, arquivos e diretórios são ambos tratados como “File” (arquivo). A única diferença é que diretórios possuem um “mime type” específico, que fará com que o Google Drive entenda que ele é um diretório, e não um arquivo.
A criação do diretório é bem simples. Basta criarmos uma nova instância da classe “File” e configurarmos um nome e o “mime type” indicando que ele é um diretório. Em seguida, criamos e executamos um request utilizando o método “Files.Create” passando a instância de “File” que instanciamos anteriormente:
1
2
3
4
5
6
7
8
9
// C#
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();
}
1
2
3
4
5
6
7
8
' VB.NET
Private Sub CriarDiretorio(Servico As Google.Apis.Drive.v3.DriveService, NomeDiretorio As String)
    Dim Diretorio = New Google.Apis.Drive.v3.Data.File()
    Diretorio.Name = NomeDiretorio
    Diretorio.MimeType = "application/vnd.google-apps.folder"
    Dim Request = Servico.Files.Create(Diretorio)
    Request.Execute()
End Sub
Para criarmos um diretório chamado “NovoDiretorio” temos que fazer a seguinte chamada dentro do nosso bloco “using“:
1
2
3
4
5
6
// C#
Console.Clear();
Console.WriteLine("Criar diretório");
CriarDiretorio(servico, "NovoDiretorio");
Console.WriteLine("Fim Criar diretório");
Console.ReadLine();
1
2
3
4
5
6
' VB.NET
Console.Clear()
Console.WriteLine("Criar diretório")
CriarDiretorio(Servico, "NovoDiretorio")
Console.WriteLine("Fim Criar diretório")
Console.ReadLine()
Porém, ao tentarmos executar esse código com o escopo de permissões que utilizamos anteriormente (“Scope.DriveReadonly“), nós receberemos um erro informando que não temos permissões suficientes:

Nenhum comentário:

Postar um comentário