Вивантаження фінансових звітів з Google Cloud Storage з використанням .NET API

Привіт, Хабр!
Не так давно на роботі зіткнувся із завданням автоматизації отримання фінансових звітів з нашого Google-аккаунта. У цій публікації я хотів би розповісти, як це робиться на прикладі з .NET API (C #) і застерегти вас від помилок, з якими зіткнувся сам.
 
Отже, приступимо.
 
Для початку зберемо трохи первинної інформації:
 
     
  • 1. Дізнаємося свій BucketID
    Для цього заходимо на play.google.com/apps/publish , натискаємо на лівій панелі «Фінансові звіти». У самому низу буде шуканий BucketID . Зверніть увагу, далі ми будемо використовувати BucketID без символів gs: //.
     
     
     
  •  
  • 2. Отримання credential
    Заходимо на console.developers.google.com . Створюємо новий проект (кнопка Create Project).
     
     
     
    Введіть своє ім'я проекту.
     
    Після створення проекту натискаємо на лівій панелі API & auth , потім Credential :
     
     
     
    Натискаємо кнопку Create Client ID і вибираємо Service account :
     
     
     
    Після створення аккаунта генеруємо і викачуємо P12 key файл.
     
     
     
     
  •  
  • 3. Видача доступу на читання фін. звітів
    Незнання цієї фічі відняло в мене & gt; 50% від усього часу, витраченого на розробку програми.
     
    Отже, щоб далі все запрацювало без зайвих проблем, потрібно для згенерованого в п.2 аккаунта (поле EMAIL ADDRESS ) видати права на читання фінансових звітів.
     
    Для цього потрібно зайти на Google Play Publish Page і зробити інвайт для нашого EMAIL ADDRESS з правом читання фін. звітів. Для цього потрібні адмінських права в Google-акаунті.
  •  
 
Підсумуємо: ми знайшли BucketID , скачали собі .p12 файл , отримали Email Address і вислали на нього інвайт з можливістю читання фін. звітів.
 
Йдемо далі. Створюємо в Visual Studio новий проект консольного додатка. Версію .NET Framework бажано вибрати не нижче 4.5 (інакше будуть проблеми з пробілами в іменах файлів).
 
Після створення проекту встановлюємо nuget пакет з API:
 
 
Install-Package Google.Apis.Storage.v1beta2 

 
Версія API з часом може зміниться, так що слідкуйте за оновленням.
 
А ось власне і весь код (зібраний по шматочках з різних місць). Замініть у ньому Bucket, email і шлях до .p12 файлу на свої.
 
 
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Storage.v1beta2;

namespace GoogleCloudStorageAPIClient
{
    class Program
    {
        static void Main(string[] args)
        {
            const string bucket = "pubsite_prod_rev_XXXXXXXXXXXXXXXXXXXXX";  // без gs://
            const string email = "YYYYYYYYYYYYYYYYYYYYYY@developer.gserviceaccount.com";

            var certificate = new X509Certificate2(
                    @"<указываем путь к .p12 файлу>",
                    "notasecret",
                    X509KeyStorageFlags.Exportable
                    );

            var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(email)
            {
                Scopes = new[] { StorageService.Scope.DevstorageReadOnly }

            }.FromCertificate(certificate));

            var service = new StorageService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = "GoogleReportDownloader"
            });

            var listRequest = service.Objects.List(bucket);

            var list = listRequest.Execute();

            if (list != null)
            {
                Console.WriteLine("File count = {0}\r\n", list.Items.Count);

                foreach (var item in list.Items)
                {
                    Console.WriteLine(item.Name);

                    // скачать файл
                    var getRequest = service.Objects.Get(bucket, item.Name);
                    var objectName = string.Format("{0}\\{1}", @"C:\!temp\", item.Name);
                    using (var fileStream = new FileStream(objectName, FileMode.Create, FileAccess.Write))
                    {
                        getRequest.Download(fileStream);
                    }

                }
            }
        }
    }
}


 
Сподіваюся, кому-небудь ця публікація заощадить масу часу і нервів.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.