- PVSM.RU - https://www.pvsm.ru -
Привет!
Не так давно на работе столкнулся с задачей автоматизации получения финансовых отчетов из нашего Google-аккаунта. В этой публикации я хотел бы рассказать, как это делается на примере с .NET API (C#) и предостеречь вас от ошибок, с которыми столкнулся сам.
Итак, приступим.
Для начала соберем немного первичной информации:
Введите свое имя проекта.
После создания проекта нажимаем на левой панели API & auth, потом Credential:
Нажимаем кнопку Create Client ID и выбираем Service account:
После создание аккаунта генерируем и скачиваем P12 key файл.
Итак, чтобы далее все заработало без лишних проблем, нужно для сгенерированного в п.2 аккаунта (поле EMAIL ADDRESS) выдать права на чтение финансовых отчетов.
Для этого нужно зайти на Google Play Publish Page [1] и сделать инвайт для нашего 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}rn", 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);
}
}
}
}
}
}
Надеюсь, кому-нибудь эта публикация сэкономит массу времени и нервов.
Автор: vorobyev_evgeney
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/google-analytics/69190
Ссылки в тексте:
[1] play.google.com/apps/publish: https://play.google.com/apps/publish
[2] console.developers.google.com: https://console.developers.google.com/project
[3] Источник: http://habrahabr.ru/post/236149/
Нажмите здесь для печати.