Доступ к сегментам хранилища Менеджера рекламы

Как скачать файлы передачи данных

Google Cloud Storage – это отдельный продукт Google, предназначенный для хранения данных в облаке. Менеджер рекламы применяет этот сервис в качестве хранилища данных, используемых такими функциями, как отчеты по передаче данных и массовая загрузка идентификаторов файлов cookie в сегменты аудитории.

Приведенная здесь информация поможет вам интегрировать стандартные технологии Google Cloud Storage с конфигурацией облачного хранения в Менеджере рекламы. Основным источником информации о Google Cloud Storage является сайт для разработчиков.

Методы

Есть три способа получения доступа к сегментам хранилища Менеджера рекламы. Они перечислены ниже в порядке возрастания сложности.

  • С помощью веб-интерфейса. Перейдите на страницу 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.

В этой статье содержится дополнительная информация о третьем способе. Поскольку веб-интерфейс и доступ через gsutil проще для освоения, чем API Google Cloud Storage, рекомендуем вам сначала ознакомиться с этими методами. Полную информацию о них можно найти на сайте для разработчиков Google Cloud Storage.

Управление доступом к сегментам хранилища Менеджера рекламы

Сегменты хранилища, используемые Менеджером рекламы, относятся к проекту, который принадлежит Google. Вы не увидите их в своем списке проектов Google Developers Console.

В процессе настройки (совместно с представителем DoubleClick) функций, которые зависят от сегментов хранения Менеджера рекламы, вам нужно создать группу Google для управления этими сегментами. Ее участники будут иметь права "только чтение" или "чтение и запись", в зависимости от используемых вами функций.

Ниже приводятся инструкции для администратора группы. Он должен выполнять их, предварительно выполнив вход в аккаунт Google.

Чтобы создать группу Google, выполните следующие действия:

  1. Перейдите на страницу groups.google.com и следуйте инструкциям по созданию группы.

    Правила именования групп устанавливаете вы сами, но мы рекомендуем использовать название основного продукта Google Платформы для маркетинга, идентификатор сети и название компании, например admanager-9999-BigCompany.
  2. Добавьте пользователей в группу Google. Мы рекомендуем использовать те же адреса электронной почты, с помощью которых пользователи входят в Менеджер рекламы, а не личные.

  3. Сообщите название группы представителям Google, чтобы они могли активировать нужные функции, в которых используются сегменты хранилища Менеджера рекламы.

Использование Google Cloud Storage API

Если вы решили, что вам лучше всего подходит доступ через API, рекомендуем вам настроить аккаунт сервиса в Google Cloud Storage.

Настройка аккаунта сервиса в Google Cloud Storage

Для доступа к сегментам хранилища через API желательно использовать аккаунт сервиса, а не аккаунт для пользователей. В аккаунтах сервиса упрощена разработка приложений за счет использования секретного ключа для аутентификации вместо динамически генерируемого токена OAuth. Чтобы настроить аккаунт сервиса, выполните следующие действия:

  1. Откройте Google Developer Console.

  2. Создайте проект или нажмите на название существующего. В этом проекте вы будете разрабатывать свое приложение.

  3. Если вы собираетесь переносить файлы из сегмента хранилища Менеджера рекламы в собственный аккаунт Google Cloud Storage, нажмите Оплата и настройки и добавьте в проект источник оплаты (необязательно).

  4. Создайте идентификатор клиента. Для этого выполните следующие действия:

    1. В панели слева выберите API и сервисы > Credentials (API и аутентификация > Учетные данные).

    2. Нажмите кнопку Create new Client ID (Создать идентификатор клиента).

    3. Установите переключатель в положение Сервисный аккаунт и нажмите кнопку Создать идентификатор клиента.

    4. Автоматически созданный адрес электронной почты имеет формат идентификатор@developer.gserviceagccount.com. Скопируйте этот адрес и сохраните его для дальнейшего использования.

    5. Нажмите кнопку Создать новый ключ P12 и сохраните файл на компьютере. Этот ключ можно использовать в разрабатываемых приложениях для доступа к API (см. пример кода ниже).

  5. Добавьте адрес электронной почты в группу 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 transport. */
    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("First object in bucket: \"" + 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("File \"" + filename + "\" downloaded.");
    }

    /**
     * Основной метод выполнения различных тестов.
     * 
     * @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 регулирует количество запросов на передачу данных.

Самая актуальная информация по теме этой статьи представлена в официальном блоге Google Code (раздел Google Cloud Storage), а вопросы можно задавать на форуме Google Cloud Storage. В теме сообщения укажите Bug (Ошибка) или Feature Request (Запрос на реализацию функции). Ответы на другие вопросы о Google Cloud Storage можно найти в разделе часто задаваемых вопросов.
Эта информация оказалась полезной?
Как можно улучшить эту статью?