Reklamy displayowe Google Video 360 automatycznie przechowuje pliki odczytu elementu w Google Cloud Storage. Te pliki są dostępne tylko dla: Konta, którym przyznano dostęp.
Utwórz projekt
Utwórz i skonfiguruj projekt w ten sposób:
- Otwórz stronę interfejsów API włączonych w Konsoli interfejsów API Google.
Jeśli wcześniej nie zalogujesz się na konto Google, pojawi się prośba o zalogowanie.
- Z menu wybierz istniejący projekt lub utwórz nowy.
- Jeśli masz wiele istniejących projektów, wybierz ten dla których chcesz aktywować Google Cloud Storage, a następnie wybierz Dalej.
- Jeśli nie masz projektu, wybierz Utwórz nowy projekt, wpisz jego nazwę, a następnie kliknij Utwórz.
Uwaga: pamiętaj, że niektóre identyfikatory zasobów (np. identyfikatory projektów) mogą być przechowywane przez cały czas trwania Twojego projektu. Z tego powodu unikaj przechowywania informacji poufnych w zasobach i identyfikatorów.
- Sprawdź, czy komponent Google Cloud Storage jest na liście włączonych interfejsów API.
Jeśli nie ma jej na liście, kliknij kartę Google APIs, wyszukaj i wybierz Google Cloud
Komponent Pamięć i kliknij Włącz API.
Pamiętaj, że w większości projektów komponent Google Cloud Storage jest już włączony. Jeśli planujesz aby uzyskać dostęp do Google Cloud Storage za pomocą interfejsu API JSON, a potem sprawdź też, czy włączony jest interfejs Google Cloud Storage JSON API.
- Włącz płatności w projekcie.
Aby korzystać z Google Cloud Storage, musisz włączyć płatności projektu, jeśli jeszcze nie zostało to zrobione. Włączenie płatności nie musi co oznacza, że zostanie naliczona opłata. Więcej informacji znajdziesz w cenniku.
- Będąc w projekcie w chmurze, kliknij menu galerii w lewym górnym rogu i wybierz Płatności.
- Jeśli nie masz jeszcze konta rozliczeniowego, postępuj zgodnie z instrukcjami, aby utworzyć nowe konto rozliczeniowe.
- Jeśli masz istniejące konto rozliczeniowe, wybierz tę opcję, a następnie kliknij Ustaw konto.
W konsoli interfejsów API Google pozostań w tym samym projekcie i przejdź do następnej sekcji.
Konfigurowanie dostępu do Cloud Storage
Pozostając w Konsoli interfejsów API Google w wymaganym projekcie, kliknij menu galerii w w lewym górnym rogu, wybierz Interfejsy API Usługi, a następnie kliknij Dane logowania. Dzień Na stronie Dane logowania poszukaj kluczy konta usługi.
Znajdź adres e-mail klucza konta usługi:
- Kliknij link Zarządzaj kontami usługi (po prawej stronie sekcji Klucze konta usługi).
- Adres e-mail będzie widoczny na wyświetlonej stronie Uprawnienia.
Jeśli nie ma kluczy konta usługi, utwórz nowe konto usługi:
- Kliknij menu Utwórz dane logowania, a następnie Klucz konta usługi.
- W menu Konto usługi wybierz Nowe konto usługi.
- Wpisz nazwę konta usługi. Identyfikator konta usługi jest ustawiany automatycznie wygenerowane na podstawie nazwy i nazwy projektu.
- Zanotuj adres e-mail konta usługi o identyfikatorze
gserviceaccount.com
. Nie wyświetli się na stronie Dane logowania po kliknięciu Utwórz. - W sekcji Typ klucza wybierz JSON.
- Kliknij Utwórz. Plik JSON z parą kluczy publiczny/prywatny konta jest zapisywany w folder Pobrane pliki. Ten klucz służy do uwierzytelniania aplikacji w interfejsie API oraz podpisy wszystkie żądania wysyłane do interfejsu API. Zapisz wygenerowany plik JSON w bezpiecznym miejscu. w którym aplikacja będzie miała do niego dostęp.
Skontaktuj się z zespołem Display &Video 360 Zespół pomocy Video 360 prosi o włączenie plików odczytu elementu lub interfejs API Google Bid Manager.
Gdy zespół pomocy potwierdzi dostęp, utwórz dedykowaną grupę dyskusyjną Google (lub grup) i zaktualizuj następujące pola w sekcji Display & informacje o partnerze wideo 360 (pamiętaj, że tylko użytkownicy, z dostępem na poziomie partnera będą mogli wprowadzać te zmiany):
- Grupa dyskusyjna Google odczytu dziennika
Grupa tylko do odczytu ma uprawnienia tylko do odczytu plików i wyświetlania zawartości zasobników na dane. - Grupa dyskusyjna Google służąca do zarządzania dziennikami
Grupa zarządzania ma wszystkie uprawnienia grupy tylko do odczytu, ale może też zmieniać na listach kontroli dostępu plików w zasobnikach. Pamiętaj, że nawet grupa zarządzająca nie ma uprawnień zmieniać list kontroli dostępu zasobnika i nie mają uprawnień do tworzenia, modyfikowania ani usuwania plików.
Po dodaniu Grupy dyskusyjnej Google możesz dodawać użytkowników do grupy dyskusyjnej Google i ich z niej usuwać bez dodatkowego zaangażowania ze strony zespołu zespół pomocy Video 360; tylko ci użytkownicy członkowie grupy będą mieli dostęp do Twoich danych.
- Grupa dyskusyjna Google odczytu dziennika
Dostęp do danych
Uzyskiwanie dostępu do danych przy użyciu polecenia gsutil
Narzędzie gsutil to aplikacja wiersza poleceń Dane Google Cloud Storage bez konieczności programowania i uzyskiwanie dodatkowych informacji. Możesz na przykład użyć polecenia gsutil jako części skryptu lub pliku wsadowego zamiast tworzenia niestandardowych aplikacji.
Jeśli chcesz zacząć używać polecenia gsutil, zapoznaj się z dokumentacją narzędzia gsutil. Nadal musisz uwierzytelniać się przy użyciu OAuth 2 tak jak wcześniej, ale narzędzie gsutil poprosi Cię o przy pierwszym użyciu tych danych, a następnie zapisać je do późniejszego użycia.
Uzyskiwanie zautomatyzowanego dostępu do danych
Google Cloud Storage udostępnia interfejsy API dla wielu języków programowania, które pozwalają
uzyskać dostęp do swoich danych w sposób zautomatyzowany. Z przykładu poniżej dowiesz się, jak wykonać prostą
pobranie jednego z plików odczytu elementu.
z Google Cloud Storage. Pamiętaj, że tylko publiczność
Pliki odczytu elementu są przechowywane w
gdbm-public
zasobnik; Twoja prywatna
Pliki odczytu elementu będą przechowywane w zasobnikach dotyczących partnerów i reklamodawców.
Java
W przykładzie poniżej użyto funkcji Google Biblioteka klienta API dla języka Java, która umożliwia dostęp do danych przechowywanych w Google Cloud Storage to proste rozwiązanie. Oprócz głównej ogólnej biblioteki klienta interfejsów API Google musisz też pobrać osobny plik, biblioteka dla interfejsu Cloud Storage API.
Najpierw musisz skonfigurować dane logowania, których będziesz używać do komunikacji z interfejsem API w celu:
uzyskać autoryzację dostępu do danych. W tym celu należy utworzyć Credential
obiekt, który korzysta z adresu e-mail developer.gserviceaccount.com
konta usługi
jako ServiceAccountId
oraz wczytuje pobrany plik klucza prywatnego
w Konsoli interfejsów API Google przy tworzeniu konta usługi. Dzięki temu wszystkie
przyszłe żądania wysyłane do interfejsu API będą podpisane kluczem prywatnym konta usługi:
NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport(); JacksonFactory JSON_FACTORY = new JacksonFactory(); ... Credential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) .setJsonFactory(JSON_FACTORY) .setServiceAccountId("...@developer.gserviceaccount.com") .setServiceAccountScopes(StorageScopes.DEVSTORAGE_READ_ONLY) .setServiceAccountPrivateKeyFromP12File(new File("...-privatekey.p12")) .build();
Po utworzeniu obiektu Credential
możesz go użyć do stworzenia instancji
nowy obiekt Storage
, którego możesz używać w przypadku wszystkich przyszłych żądań wysyłanych do
Interfejs API Google Cloud Storage:
Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);
Masz już nowy obiekt Storage
, więc możesz zacząć wysyłać żądania do
interfejs API. Tu wysyłasz prośbę o pobranie konkretnego elementu: bucketObjectName
z zasobnika bucket
. Biblioteka obsługuje pobieranie pliku HTTP z witryny
Google Cloud Storage, a następnie po prostu wydrukuj je w
konsola:
Get bucketObject = storage.objects().get(bucketName, bucketObjectName); ByteArrayOutputStream output = new ByteArrayOutputStream(); bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); bucketObject.executeAndDownloadTo(output); System.out.println(output.toString());
Wartości w polach bucket
i bucketObjectName
będą się różnić w zależności od
do której części interfejsu API masz dostęp; zapoznaj się z odpowiednią sekcją dotyczącą nazewnictwa
i konwencji.
C#
W poniższym przykładzie użyto parametru Biblioteka klienta interfejsów API Google dla .NET, która ułatwia dostęp do danych przechowywanych w Google Cloud Storage.
Najpierw musisz skonfigurować dane logowania, których będziesz używać podczas komunikacji z interfejsem API w celu uzyskania autoryzacji dostępu do danych. W tym celu należy utworzyć obiekt AssertionFlowClient
, który jako ServiceAccountId
korzysta z adresu e-mail developer.gserviceaccount.com
konta usługi, a także wczytuje plik klucza prywatnego, który został pobrany z konsoli interfejsów API Google podczas tworzenia konta usługi.
string keyPath = @"...-privatekey.p12"; X509Certificate2 certificate = new X509Certificate2(keyPath, "notasecret", X509KeyStorageFlags.Exportable); var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) { ServiceAccountId = "...@developer.gserviceaccount.com", Scope = StorageService.Scopes.DevstorageRead_only.GetStringValue() };
Po utworzeniu obiektu AssertionFlowClient
możesz za jego pomocą utworzyć instancję nowego obiektu OAuth2Authenticator
, za pomocą którego możesz utworzyć nową instancję Storage
dla wszystkich przyszłych żądań do interfejsu Google Cloud Storage API:
var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); StorageService service = new StorageService(auth);
Masz już nowy obiekt Storage
, więc możesz zacząć wysyłać żądania
do interfejsu API. Prosisz o pobranie konkretnego elementu,
bucketObjectName
z zasobnika bucket
. Korzystamy ze standardowych
Klasy biblioteki klienta .NET do obsługi pobierania HTTP z
Google Cloud Storage, ale musisz zająć się tym ręcznie,
występuje przekierowanie, które sprawdza, czy Authorization
ma zawsze prawidłowy adres
nagłówek znajdujący się w żądaniu:
var results = service.Objects.Get(bucketName, bucketObjectName).Fetch(); HttpWebRequest request = createRequest(results.Media.Link, auth); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Handle redirects manually to ensure that the Authorization header is present if // your request is redirected. if (response.StatusCode == HttpStatusCode.TemporaryRedirect) { request = createRequest(response.Headers["Location"], auth); response = (HttpWebResponse)request.GetResponse(); }
Zawartość odpowiedzi można następnie odczytać z obiektu HttpWebResponse
przez GetResponseStream
. Twoje wartości dla: bucket
i
Wartość bucketObjectName
może się różnić w zależności od części interfejsu API, do której masz dostęp. znajdziesz w odpowiedniej sekcji poświęconej konwencjom nazewnictwa.
Załącznik: pełne próbki
Java
/* * Copyright (c) 2013 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.bidmanager.api.samples; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStreamReader; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.storage.Storage; import com.google.api.services.storage.Storage.Objects.Get; import com.google.api.services.storage.StorageScopes; /** * A simple class that demonstrates how to download a specific object from a bucket using a * service account */ public class ServiceDownload { /** * This is the HTTP Transport object used for automatically refreshing access tokens. */ static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport(); /** * This is the JSON factory used for parsing refresh token responses.Your first requirement */ static final JacksonFactory JSON_FACTORY = new JacksonFactory(); /** * The main method will attempt to download a specific named object from the gdbm-public bucket * using a service account. * * @param args Not used. */ public static void main(String[] args) { try { // Prompt the user for the details of the object to download. System.out.print("Name of object to download, e.g. entity/20130430.0.Browser.json:"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String bucketObjectName = in.readLine(); in.close(); String bucketName = "gdbm-public"; Credential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT) .setJsonFactory(JSON_FACTORY) .setServiceAccountId("...@developer.gserviceaccount.com") .setServiceAccountScopes(StorageScopes.DEVSTORAGE_READ_ONLY) .setServiceAccountPrivateKeyFromP12File( new File("...-privatekey.p12")) .build(); Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential); Get bucketObject = storage.objects().get(bucketName, bucketObjectName); ByteArrayOutputStream output = new ByteArrayOutputStream(); bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); bucketObject.executeAndDownloadTo(output); System.out.println(output.toString()); } catch (Exception e) { System.err.println("Unexpected exception caught: " + e.getMessage()); e.printStackTrace(); } } }
C#
/* * Copyright (c) 2013 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Net; using System.Security.Cryptography.X509Certificates; using DotNetOpenAuth.OAuth2; using Google.Apis; using Google.Apis.Requests; using Google.Apis.Authentication.OAuth2; using Google.Apis.Authentication.OAuth2.DotNetOpenAuth; using Google.Apis.Storage.v1beta1; using Google.Apis.Storage.v1beta1.Data; using Google.Apis.Util; namespace ApiSamples { /// <summary> /// A simple class that demonstrates how to download a specific object from a bucket using a /// service account /// </summary> class ServiceDownload { /// <summary> /// The main method will attempt to download a specific named object from the /// gdbm-public bucket using a service account. /// </summary> /// <param name="args">Not used.</param> public static void Main(string[] args) { // Prompt the user for the details of the object to download Console.WriteLine("Name of object to download, e.g. entity/20130430.0.Browser.json:"); string bucketObjectName = Console.ReadLine(); string bucketName = "gdbm-public"; try { string keyPath = @"...-privatekey.p12"; X509Certificate2 certificate = new X509Certificate2(keyPath, "notasecret", X509KeyStorageFlags.Exportable); var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) { ServiceAccountId = "...@developer.gserviceaccount.com", Scope = StorageService.Scopes.DevstorageRead_only.GetStringValue() }; var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); StorageService service = new StorageService(auth); var results = service.Objects.Get(bucketName, bucketObjectName).Fetch(); HttpWebRequest request = createRequest(results.Media.Link, auth); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Handle redirects manully to ensure that the Authorization header is present if // our request is redirected. if (response.StatusCode == HttpStatusCode.TemporaryRedirect) { request = createRequest(response.Headers["Location"], auth); response = (HttpWebResponse)request.GetResponse(); } Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream); String data = reader.ReadToEnd(); Console.Write(data); } catch (Exception e) { Console.WriteLine("Unexpected exception caught: " + e.Message); Console.Write(e.StackTrace); } Console.ReadKey(); } /// <summary> /// Generate a HttpWebRequest for the given URL with the appropriate OAuth2 authorization /// header applied. The HttpWebRequest object returned has its AllowAutoRedirect option /// disabled to allow us to manually handle redirects. /// </summary> /// <param name="url">URL that is to be requested with this object</param> /// <param name="auth">The OAuth2Authenticator instance that contains the appropriate keys.</param> /// <returns>HttpWebRequest object ready to be used to make requests to the API</returns> private static HttpWebRequest createRequest(string url, OAuth2Authenticator<AssertionFlowClient> auth) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Headers.Add("Authorization", "Bearer " + auth.State.AccessToken); request.AllowAutoRedirect = false; return request; } } }