Cloud Storage का इस्तेमाल शुरू करें

Google Display &Video 360 के ज़रिए Video 360 में, इकाई की पढ़ी गई फ़ाइलें अपने-आप सेव हो जाती हैं Google Cloud Storage में. इन फ़ाइलों को सिर्फ़ ये लोग ऐक्सेस कर सकते हैं जिन्हें ऐक्सेस दिया गया है.

प्रोजेक्ट बनाना

प्रोजेक्ट बनाने और कॉन्फ़िगर करने के लिए, यहां दिया गया तरीका अपनाएं:

  1. Google API कंसोल सक्षम API पेज पर जाएं.

    अगर आपने पहले से Google में साइन इन नहीं किया है, तो आपको साइन इन करने के लिए कहा जाएगा.

  2. प्रोजेक्ट के ड्रॉप-डाउन मेन्यू से, कोई मौजूदा प्रोजेक्ट चुनें या कोई नया प्रोजेक्ट बनाएं.
    • अगर आपके पास कई मौजूदा प्रोजेक्ट हैं, तो पक्का करें कि आपने प्रोजेक्ट चुना हो इसके लिए, Google Cloud Storage चालू करें. इसके बाद, चुनें जारी रखें.
    • इसके अलावा, अगर आपके पास कोई प्रोजेक्ट नहीं है, तो नया प्रोजेक्ट बनाएं चुनें, प्रोजेक्ट का नाम डालें, फिर बनाएं चुनें.

      ध्यान दें: आपको पता होना चाहिए कि कुछ रिसॉर्स आइडेंटिफ़ायर (जैसे कि प्रोजेक्ट आईडी) को प्रोजेक्ट के पूरा होने के बाद भी सेव रखा जा सकता है. इस वजह से, संसाधन में संवेदनशील जानकारी सेव न करें आइडेंटिफ़ायर मौजूद हैं.

  3. चालू किए गए एपीआई की सूची में, पक्का करें कि Google Cloud Storage कॉम्पोनेंट सूची में शामिल हो. अगर यह सूची में नहीं है, तो Google API टैब पर क्लिक करें, Google Cloud खोजें और चुनें स्टोरेज कॉम्पोनेंट पर जाएं और एपीआई चालू करें पर क्लिक करें.

    ध्यान दें कि ज़्यादातर प्रोजेक्ट के लिए, Google Cloud Storage कॉम्पोनेंट पहले से ही चालू होता है. अगर आपको का इस्तेमाल करके Google Cloud Storage को ऐक्सेस करने के लिए, JSON API का इस्तेमाल करें. आपको यह भी पुष्टि करनी होगी कि Google Cloud Storage JSON API चालू है.

  4. प्रोजेक्ट के लिए बिलिंग की सुविधा चालू करें.

    Google Cloud Storage का इस्तेमाल करने से पहले, आपको अपने प्रोजेक्ट को कॉपी करने की ज़रूरत पड़ सकती है. बिलिंग सक्षम करने के लिए यह ज़रूरी नहीं है कि का मतलब है कि आपको शुल्क देना होगा. ज़्यादा जानकारी के लिए, कीमत देखें.

    1. अब भी क्लाउड स्टोरेज प्रोजेक्ट में, ऊपर बाएं कोने में मौजूद गैलरी मेन्यू पर क्लिक करें. इसके बाद, बिलिंग चुनें.
    2. अगर आपके पास अभी तक कोई बिलिंग खाता नहीं है, तो नया बिलिंग खाता बनाएं.
    3. अगर आपके पास मौजूदा बिलिंग खाता है, तो इसे चुनें, फिर खाता सेट करें को चुनें.

Google API कंसोल में, उसी प्रोजेक्ट में बने रहें और अगले सेक्शन पर जाएं.

Cloud Storage का ऐक्सेस सेट अप करना

  1. अब भी ज़रूरी प्रोजेक्ट के अंदर Google API कंसोल में, गैलरी मेन्यू पर क्लिक करें ऊपरी बाएं कोने में, एपीआई और सेवाएं पर क्लिक करें और फिर क्रेडेंशियल पर क्लिक करें. इस क्रेडेंशियल पेज, सेवा खाते की कुंजियां खोजें.

    सेवा खाते की कुंजी का ईमेल पता ढूंढें:

    1. सेवा खाते की कुंजी वाले सेक्शन की दाईं ओर मौजूद, सेवा खाते मैनेज करें लिंक चुनें.
    2. ईमेल पता, नतीजे के तौर पर मिलने वाली अनुमतियां पेज पर देखा जा सकता है.

    अगर सेवा खाते की कोई भी कुंजी नहीं है, तो नया सेवा खाता बनाएं:

    1. क्रेडेंशियल बनाएं ड्रॉप-डाउन चुनें. इसके बाद, सेवा खाता कुंजी चुनें.
    2. सेवा खाता ड्रॉप-डाउन में, नया सेवा खाता चुनें.
    3. सेवा खाते के लिए कोई नाम डालें. सेवा खाता आईडी अपने-आप जनरेट किया गया है.
    4. सेवा खाता आईडी gserviceaccount.com ईमेल पते का एक नोट बनाएं. बनाएं चुनने के बाद, यह क्रेडेंशियल पेज पर नहीं दिखता.
    5. कुंजी टाइप सेक्शन में, JSON चुनें.
    6. बनाएं पर क्लिक करें. खाते के सार्वजनिक/निजी कुंजी के जोड़े के साथ JSON फ़ाइल यहां सेव की जाती है आपका डाउनलोड फ़ोल्डर. इस कुंजी का उपयोग API पर आपके ऐप्लिकेशन को प्रमाणित करने के लिए किया जाता है और एपीआई को भेजे जाने वाले सभी अनुरोधों पर साइन करता है. जनरेट की गई JSON फ़ाइल को किसी सुरक्षित जगह पर सेव करें, जहां आपका ऐप्लिकेशन इसे ऐक्सेस कर सके.
  2. Display &Video 360 खाते से संपर्क करें इकाई की जानकारी वाली फ़ाइलों को चालू करने का अनुरोध करने के लिए, Video 360 की सहायता टीम और/या Google Bid Manager API.

    जब सहायता टीम ऐक्सेस की पुष्टि कर दे, तब एक अलग Google ग्रुप बनाएं (या ग्रुप) को एक्सपोर्ट करने के लिए Video 360 पार्टनर की जानकारी (ध्यान दें कि सिर्फ़ उपयोगकर्ता पार्टनर-लेवल का ऐक्सेस होने पर ये बदलाव किए जा सकेंगे:

    • पढ़ा गया Google ग्रुप लॉग करें
      रीड-ओनली ग्रुप के पास सिर्फ़ फ़ाइलों को पढ़ने और स्टोरेज बकेट के कॉन्टेंट की सूची बनाने की अनुमतियां होती हैं.
    • लॉग मैनेजमेंट Google ग्रुप
      मैनेजमेंट ग्रुप के पास रीड-ओनली ग्रुप की सभी अनुमतियां होती हैं. हालांकि, वह इन अनुमतियों में बदलाव भी कर सकता है बकेट के अंदर फ़ाइलों के ACL. ध्यान दें कि यहां तक कि मैनेजमेंट ग्रुप के पास भी अनुमति नहीं है बकेट ACL बदलने के लिए और न ही उनके पास फ़ाइलें बनाने, संशोधित करने या हटाने की अनुमति होती है.

    Google ग्रुप जोड़े जाने के बाद, उपयोगकर्ताओं को ज़रूरत के हिसाब से अपने Google ग्रुप में जोड़ा और हटाया जा सकता है दिखाई नहीं दे रहा है. Video 360 की सहायता टीम; केवल उन उपयोगकर्ताओं को आपके ग्रुप में शामिल लोग आपके डेटा को ऐक्सेस कर सकेंगे.

अपना डेटा ऐक्सेस करना

gsutil का इस्तेमाल करके डेटा ऐक्सेस करना

gsutil टूल एक कमांड-लाइन ऐप्लिकेशन है, जिससे किसी भी प्रोग्रामिंग के बिना, Google Cloud Storage का डेटा आसानी से सेव करना अनुभव. उदाहरण के लिए, आप स्क्रिप्ट या बैच फ़ाइल के हिस्से के रूप में इसके बजाय gsutil का इस्तेमाल कर सकते हैं कस्टम ऐप्लिकेशन बनाने के लिए किया जा सकता है.

gsutil के साथ शुरू करने के लिए, gsutil दस्तावेज़ पढ़ें. आपको अब भी पहले की तरह OAuth 2 का इस्तेमाल करके पुष्टि करनी होगी, लेकिन gsutil ही आपको उनका पहली बार इस्तेमाल करते समय आपके क्रेडेंशियल सेव किए जाते हैं और बाद में इस्तेमाल करने के लिए सेव किए जाते हैं.

प्रोग्राम के हिसाब से डेटा को ऐक्सेस करना

Google Cloud Storage में कई प्रोग्रामिंग भाषाओं के लिए ऐसे एपीआई हैं जो प्रोग्राम के हिसाब से आपका डेटा ऐक्सेस करने में मदद करता है. नीचे दिए गए उदाहरण में बताया गया है कि किसी आसान तरीके से इकाई की पढ़ी गई फ़ाइलों में से किसी एक का डाउनलोड Google Cloud Storage से पाएं. याद रखें कि सिर्फ़ लोग इकाई की पढ़ी गई फ़ाइलें gdbm-public बकेट; आपका निजी इकाई के लिए पढ़ी गई फ़ाइलों को पार्टनर और विज्ञापन देने वाले व्यक्ति या कंपनी के हिसाब से बनाए गए बकेट में सेव किया जाएगा.

Java

नीचे दिए गए उदाहरण में, Google Java के लिए एपीआई क्लाइंट लाइब्रेरी, जो Google खाते में मौजूद डेटा को ऐक्सेस करने की सुविधा देती है Cloud Storage का इस्तेमाल करना आसान है. मुख्य सामान्य Google API क्लाइंट लाइब्रेरी के अलावा, आपको अलग-अलग भाषाओं में, लाइब्रेरी Cloud Storage API के लिए.

सबसे पहले आपको वे क्रेडेंशियल सेट अप करने होंगे जिनका इस्तेमाल, एपीआई से संपर्क करने के लिए किया जाएगा अपने डेटा को ऐक्सेस करने की अनुमति पाएं. इसके लिए, एक Credential बनाना होगा वह ऑब्जेक्ट जो सेवा खाते के developer.gserviceaccount.com ईमेल पते का इस्तेमाल करता है के रूप में ServiceAccountId के रूप में डाली जाती है और डाउनलोड की गई निजी कुंजी फ़ाइल को भी लोड किया जाता है से साइन इन किया जा सकता है. इससे पक्का होगा कि आगे से एपीआई को किए जाने वाले अनुरोधों पर सेवा खाते की निजी कुंजी से साइन किया जाएगा:

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();

Credential ऑब्जेक्ट बनाने के बाद, इसका इस्तेमाल इंस्टैंशिएट करने के लिए किया जा सकता है नया Storage ऑब्जेक्ट इस्तेमाल करें. इसका इस्तेमाल, आने वाले समय में Google Cloud Storage एपीआई:

Storage storage = new Storage(HTTP_TRANSPORT, JSON_FACTORY, credential);

अब आपके पास एक नया Storage ऑब्जेक्ट है. इसलिए, अब इसका अनुरोध किया जा सकता है एपीआई को चुनें. यहां आप किसी खास आइटम bucketObjectName को वापस पाने का अनुरोध कर रहे हैं bucket बकेट से. लाइब्रेरी, यहां से फ़ाइल के एचटीटीपी डाउनलोड को मैनेज करती है Google Cloud Storage में सेव कर सकते हैं और फिर आप कॉन्टेंट को कंसोल:

Get bucketObject = storage.objects().get(bucketName, bucketObjectName);

ByteArrayOutputStream output = new ByteArrayOutputStream();
bucketObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
bucketObject.executeAndDownloadTo(output);

System.out.println(output.toString());

bucket और bucketObjectName की वैल्यू, इनके आधार पर अलग-अलग होंगी एपीआई के किस हिस्से को ऐक्सेस किया जा रहा है; नामकरण के बारे में सही सेक्शन देखें कर सकते हैं.

C#

नीचे दिए गए उदाहरण में .NET के लिए Google API क्लाइंट लाइब्रेरी, जो Google Cloud Storage में मौजूद डेटा को ऐक्सेस करना आसान और आसान बनाती है.

सबसे पहले आपको वे क्रेडेंशियल सेट अप करने होंगे जिनका इस्तेमाल, एपीआई से संपर्क करने के दौरान किया जा सके, ताकि आपके डेटा को ऐक्सेस करने की अनुमति मिल सके. ऐसा AssertionFlowClient ऑब्जेक्ट बनाकर किया जाता है, जो सेवा खाते के developer.gserviceaccount.com ईमेल पते का इस्तेमाल ServiceAccountId के तौर पर करता है. साथ ही, सेवा खाता बनाते समय Google API कंसोल से डाउनलोड की गई निजी कुंजी फ़ाइल भी लोड करता है.

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()
};

AssertionFlowClient ऑब्जेक्ट बनाने के बाद, उसका इस्तेमाल करके नया OAuth2Authenticator ऑब्जेक्ट इंस्टैंशिएट किया जा सकता है. इसका इस्तेमाल करके, Google Cloud Storage एपीआई को किए जाने वाले सभी अनुरोधों के लिए, नया Storage इंस्टेंस इंस्टैंशिएट किया जा सकता है:

var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
StorageService service = new StorageService(auth);

अब आपके पास एक नया Storage ऑब्जेक्ट है. इसका इस्तेमाल करके अनुरोध किए जा सकते हैं को एपीआई में बदलें. यहां किसी खास आइटम को वापस पाने का अनुरोध किया जा रहा है, bucket बकेट से bucketObjectName,. हम स्टैंडर्ड टेक्नोलॉजी का इस्तेमाल करते हैं एचटीटीपी डाउनलोड को मैनेज करने के लिए, .NET क्लाइंट लाइब्रेरी क्लास Google Cloud Storage पर उपलब्ध है, लेकिन आपको उन मामलों को मैन्युअल तौर पर मैनेज करना होगा जहां यह पक्का करने के लिए रीडायरेक्ट किया जाता है कि Authorization हमेशा सही हो अनुरोध में मौजूद हेडर:

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();
}

इसके बाद, जवाब के कॉन्टेंट को HttpWebResponse ऑब्जेक्ट से पढ़ा जा सकता है हमेशा की तरह GetResponseStream से. bucket और के लिए आपके मान bucketObjectName, इस बात पर निर्भर करता है कि एपीआई के किस हिस्से का इस्तेमाल किया जा रहा है; संदर्भ के लिए सही सेक्शन देखें.

अपेंडिक्स: पूरे सैंपल

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;
        }

    }
}