Logo Spiria

L’interface de programmation (API) Google Drive avec .NET, une alternative au stockage d’objets blob Azure

7 mars 2016.
Vue d’ensemble de l’interface de programmation REST pour Google Drive La plateforme Drive vous donne accès à un ensemble d’interfaces de programmation (ci-après, API), à des bibliothèques clients, à une foule d’exemples précis pour plusieurs langages de programmation et à de la documentation pour vous aider à intégrer vos applications à Drive.

Vue d’ensemble de l’interface de programmation REST pour Google Drive

La plateforme Drive vous donne accès à un ensemble d’interfaces de programmation (ci-après, API), à des bibliothèques clients, à une foule d’exemples précis pour plusieurs langages de programmation et à de la documentation pour vous aider à intégrer vos applications à Drive.

La principale fonctionnalité des applications Drive est le téléchargement et le téléversement dans Google Drive. Cependant, la plateforme fournit beaucoup plus qu’un simple espace de stockage. Vous pouvez notamment créer ou ouvrir des fichiers, utiliser le moteur de recherche, etc.

Voilà une alternative très intéressante au stockage d’objets blob Azure. Google vous offre 15 gigaoctets de stockage gratuit. Une seule limite : un maximum de 500 000 requêtes par jour.

Débuter avec .NET

Après avoir complété les étapes suivantes, vous obtiendrez une application de console .NET capable de faire des requêtes à l’API de Drive, et ce, en moins de cinq minutes.

Prérequis

  • Visual Studio 2013 ou une version plus récente,
  • Un accès internet et un navigateur web,
  • Un compte Google et Google Drive.

Étape 1 : Activer l’API de Drive

  • Avec l’aide de cet assistant d’installation, créez ou choisissez un projet dans la console de Google Développeurs, en vous assurant que l’API est automatiquement activé. Appuyez sur le bouton Go to Credentials pour continuer.
    decorative
    decorative
  • Au sommet de la page, choisissez l’onglet OAuth consent screen. Choisissez une adresse courriel et entrez le “nom du produit” (Product name) s’il n’est pas déjà renseigné. Il ne vous reste plus qu’à sauvegarder.
    decorative
  • De retour à l’onglet de Credentials, cliquez sur le bouton et choisissez OAuth 2.0 client ID.
    decorative
  • Choisissez le type d’application Other et appuyez sur le bouton de création Create.
    decorative
  • Cliquez sur OK pour fermer le dialogue.
    decorative
  • Cliquez sur le bouton Download JSON à droite de votre identifiant client. Déplacez le fichier dans votre répertoire de travail et nommez le client_secret.json.
    decorative

Étape 2 : Préparer le projet

  • Créer une nouvelle console en C# dans Visual Studio.
  • Ouvrez le NuGet Package Manager Console, en choisissant nuget.org comme source et entrez la commande suivante :
PM> Install-Package Google.Apis.Drive.v2

Il est possible que ce message d’erreur apparaisse :

decorative

La version de votre client NuGet n’est pas à jour, vous devez donc télécharger et installer la dernière version disponible, via : https://nuget.codeplex.com/releases/view/118318.

decorative

Étape 3 : Mettre en place votre échantillon

Déplacez client_secret.json (téléchargé à l’étape no 1) dans l’Explorateur de solutions Visual Studio.

Choisissez client_secret.json, ouvrez la fenêtre Propriétés et choisissez l’option Copy always dans le champ Copy to Output Directory.

decorative

Remplacez le contenu de Program.cs avec le code qui suit :

using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v2;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Threading;
using File = Google.Apis.Drive.v2.Data.File;

namespace GoogleDriveAPI
{
    class Program
    {
        static string[] Scopes = { DriveService.Scope.Drive };
        static string ApplicationName = "GoogleDriveAPIDemoApp";

        static void Main(string[] args)
        {
            UserCredential credential;

            using (var stream =
                new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(
                    System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/drive-dotnet-Demo");

                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Create Drive API service.
            var service = new DriveService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            /////////////////////////////// UPLOAD FILE /////////////////////////////////////
            UploadFile(service);

            ////////////////////////////// LIST FILES //////////////////////////////////////
            ListFiles(service);
            

        }

        private static void UploadFile(DriveService service)
        {
            File body = new File();
            body.Title = "test upload";
            body.Description = "test upload";
            body.MimeType = "application/vnd.ms-excel";

            
            // File's content.
            byte[] byteArray = System.IO.File.ReadAllBytes("/Temp/testUploadExcel.xlsx");
            MemoryStream stream = new MemoryStream(byteArray);
            try {
                FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "application/vnd.google-apps.spreadsheet");
                request.Upload();

              File file = request.ResponseBody;

              // Uncomment the following line to print the File ID.
              // Console.WriteLine("File ID: " + file.Id);

            } catch (Exception e) {
              Console.WriteLine("An error occurred: " + e.Message);
            }
        }

        
        private static void ListFiles(DriveService service)
        {
            // Define parameters of request.
            FilesResource.ListRequest listRequest = service.Files.List();
            listRequest.MaxResults = 100;

            // List files.
            IList files = listRequest.Execute()
                .Items;
            Console.WriteLine("Files:");
            if (files != null && files.Count > 0)
            {
                foreach (var file in files)
                {
                    Console.WriteLine("{0} ({1})", file.Title, file.Id);
                    Debug.WriteLine("{0} ({1})", file.Title, file.Id);
                }
            }
            else
            {
                Console.WriteLine("No files found.");
            }
            Console.Read();
        }
    }
}

Étape 4 : Téléverser un fichier

Lorsqu’un fichier est téléversé, l’API de Google Drive vous fournit le « file id » (identifiant de fichier) dans les résultats de téléversement, ainsi que l’URL de téléchargement :

decorative

Le fichier est également disponible sur l’UI de Google Drive :

decorative

Étape 5 :

decorative

Ça y est ! Dans un article à paraître sous peu, je vous expliquerai comment créer des Classeurs (fichiers Excel) et comment les manipuler via l’API de Google Drive et de Google Sheets.