Google Cloud Storage – это отдельный продукт Google, предназначенный для хранения данных в облаке. Менеджер рекламы применяет этот сервис в качестве хранилища данных, используемых такими функциями, как отчеты по передаче данных и массовая загрузка идентификаторов файлов cookie в сегменты аудитории.
Методы
Есть три способа получения доступа к сегментам хранилища Менеджера рекламы. Они перечислены ниже в порядке возрастания сложности.
- Через веб-интерфейс. Откройте страницу
https://console.developers.google.com/storage/gdfp-[код сети Менеджера рекламы]
. - С помощью инструмента gsutil. Это инструмент командной строки на языке Python, который позволяет управлять данными в хранилище с помощью команд, аналогичных используемым в Unix. Аутентификация сегмента выполняется абстрактным методом и обрабатывается автоматически.
- API Google Cloud Storage. Полнофункциональный API для работы с данными хранилища, доступный через веб-интерфейсы JSON и XML RESTful. Существует множество клиентских библиотек API, написанных на популярных языках программирования, в том числе Java, JavaScript, Python и Objective-C. Этот способ удобен, если вам нужно программно интегрировать сегменты хранилища с приложением Google App Engine или веб-приложением Java.
В этой статье содержится дополнительная информация о работе с Google Cloud Storage API. Поскольку веб-интерфейс и доступ через gsutil проще для освоения, чем Google Cloud Storage API, рекомендуем вам сначала ознакомиться с этими методами. Полную информацию о них можно найти на сайте для разработчиков Google Cloud Storage.
Управление доступом к сегментам хранилища Менеджера рекламы
Сегменты хранилища, используемые Менеджером рекламы, относятся к проекту, который принадлежит Google. Вы не увидите их в своем списке проектов Google Developers Console.
В процессе настройки (совместно с представителем Google) функций, которые зависят от сегментов хранения Менеджера рекламы, вам будет предоставлена группа Google для управления этими сегментами.
Если вы администратор существующей группы G Suite, вы можете сообщить ее название своему представителю, чтобы он с ее помощью активировал нужные функции, в которых используются сегменты хранилища Менеджера рекламы.
Если вы управляете несколькими сетями Менеджера рекламы, имеющими доступ к передаче данных, сообщите об этом своему представителю Google для оптимизации управления сетями. Из одной группы вы можете управлять всеми сегментами хранилища Менеджера рекламы в ваших сетях.
Использование Google Cloud Storage API
Если вы решили, что вам лучше всего подходит доступ через API, рекомендуем вам настроить аккаунт сервиса в Google Cloud Storage.
Как настроить сервисный аккаунт в Google Cloud Storage
Для доступа к сегментам хранилища через API желательно использовать сервисный аккаунт, а не аккаунт для пользователей. Аккаунты сервиса упрощают вам разработку приложений за счет использования секретного ключа для аутентификации вместо динамически генерируемого токена OAuth. Чтобы настроить сервисный аккаунт, выполните следующие действия:
-
Откройте Google Developer Console.
-
Создайте проект или нажмите на название существующего. В этом проекте вы будете разрабатывать свое приложение.
-
Если вы собираетесь переносить файлы из сегмента хранилища Менеджера рекламы в собственный аккаунт Google Cloud Storage, нажмите Оплата и настройки и добавьте в проект источник оплаты (необязательно).
-
Создайте идентификатор клиента. Для этого выполните следующие действия:
-
Нажмите API и сервисы > Учетные данные.
-
Нажмите Create new Client ID (Создать идентификатор клиента).
-
Установите переключатель в положение Service account (Аккаунт сервиса), и нажмите кнопку Create Client ID (Создать идентификатор клиента).
-
Скопируйте автоматически созданный адрес электронной почты и сохраните его для дальнейшего использования. Адрес имеет формат
[уникальный идентификатор]@developer.gserviceagccount.com
. -
Нажмите кнопку Создать новый ключ P12 и сохраните файл на компьютере. Этот ключ можно использовать в разрабатываемых приложениях для доступа к API (см. пример кода ниже).
-
- Добавьте адрес электронной почты в группу Google, созданную для управления доступом к сегментам хранилища Менеджера рекламы. Нажмите Добавить участников напрямую. Не используйте служебные аккаунты. Если у вас нет нужных прав, попросите администратора вашей группы Google добавить адреса.
Google предоставляет примеры кода и библиотек для Google Cloud Storage. Ниже приведен пример кода Java, который считывает файл из сегмента облачного хранилища Менеджера рекламы. Этот пример поможет вам понять, как использовать в коде созданные выше компоненты.
-
Project name. Название проекта Google Cloud Storage.
-
Service account email address. Адрес электронной почты, созданный в процессе настройки аккаунта сервиса.
-
.p12 key file. Файл ключа P12, скачанный в процессе настройки.
-
Bucket name. Название сегмента, предоставленного вам Google при активации функции, в которой используются сегменты облачного хранилища Менеджера рекламы.
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.security.GeneralSecurityException; import java.util.Collections; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.storage.Storage; import com.google.api.services.storage.model.StorageObject; public class GcsApiTest { /** * Название проекта, которое использовалось при создании сервисного аккаунта. * * Эта информация доступна в Google Developers Console. */ private static final String PROJECT_NAME = "название проекта"; /** * Адрес электронной почты разработчика, указанный в аккаунте сервиса. * * Этот адрес электронной почты генерируется после создания * идентификатора клиента при настройке аккаунта сервиса в * Google Developers Console. Его можно найти на странице учетных * данных (Credentials). Этот адрес электронной также нужно добавить в группу * Google, через которую осуществляется управление доступом к сегменту хранения. */ private static final String SERVICE_ACCOUNT_EMAIL = "адрес электронной почты в аккаунте сервиса"; /** * Сегмент, который будет использоваться для операций хранения. * * Название этого сегмента вам должен был предоставить менеджер аккаунта. Приблизительный формат названия – gdfp-12345678 или * gdfp_cookieupload_12345678 в зависимости от того, какое дополнение * Менеджера рекламы вы используете. */ private static final String BUCKET_NAME = "название сегмента"; /** * Область чтения/записи OAuth 2.0 Google Cloud Storage. Должна * соответствовать правам доступа, установленным для сегмента в вашей * группе Google. Нельзя запрашивать права, которые отличаются от предоставленных * группе (это могут быть права read_only). */ private static final String STORAGE_SCOPE = "https://www.googleapis.com/auth/devstorage.read_write"; /** * Путь к файлу key.p12, который обеспечивает доступ к сегменту. * Этот файл создается вместе с идентификатором клиента в аккаунте сервиса. Если у вас * нет этого файла, вам нужно создать новый ключ P12 * в Google Developers Console. */ private static final String KEY_P12 = "путь к файлу ключа P12"; /** HTTP-транспорт. */ private HttpTransport httpTransport; private Storage storage; // Этот конструктор создает учетные данные и объекты хранения. public GcsApiTest() { File p12File = new File(KEY_P12); try { httpTransport = GoogleNetHttpTransport.newTrustedTransport(); GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(JacksonFactory.getDefaultInstance()) .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) .setServiceAccountScopes( Collections.singleton(STORAGE_SCOPE)) .setServiceAccountPrivateKeyFromP12File(p12File).build(); storage = new Storage.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential) .setApplicationName(PROJECT_NAME).build(); } catch (GeneralSecurityException | IOException e1) { e1.printStackTrace(); System.exit(1); } } /** * Этот метод возвращает имя первого файла в сегменте. * * @возвращает имя файла или null, если сегмент пустой. * @генерирует исключение IOException. */ public String GetFirstFile() throws IOException { Storage.Objects.List listObjects = storage.objects().list(BUCKET_NAME); listObjects.setMaxResults(5L); com.google.api.services.storage.model.Objects objects = listObjects .execute(); // пустой сегмент? if (null == objects.getItems() || objects.getItems().isEmpty()) { System.out.println("Bucket \"" + BUCKET_NAME + "\" empty or invalid."); return null; } StorageObject object = objects.getItems().get(0); System.out.println("Первый объект в сегменте: \"" + object.getName() + "\"."); return object.getName(); } /** * Метод загрузки указанного файла из сегмента хранилища. * * @param filename * Имя скачиваемого файла. * @генерирует исключение IOException. */ public void DownloadFile(String filename) throws IOException { Storage.Objects.Get getObject = storage.objects().get(BUCKET_NAME, filename); OutputStream os = new FileOutputStream(filename, true); getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); getObject.executeMediaAndDownloadTo(os); System.out.println("Файл \"" + filename + "\" скачан."); } /** * Основной метод выполнения различных тестов. * * @param args */ public static void main(String[] args) { GcsApiTest gcsApiTest = new GcsApiTest(); try { String filename = gcsApiTest.GetFirstFile(); gcsApiTest.DownloadFile(filename); } catch (IOException e) { System.out.println(e.getMessage()); } } }
Ограничения на количество одновременных подключений
Ограничений на количество одновременных подключений нет, но злоупотребления не приветствуются. Чтобы избежать чрезмерных нагрузок, Google регулирует количество запросов на передачу данных.