Como acessar dados públicos

Alguns dados armazenados no Cloud Storage são configurados para que possam ser acessados por qualquer pessoa a qualquer momento. Esses dados públicos podem ser acessados de várias maneiras, dependendo de como você quer trabalhar com os dados.

Ao acessar os dados públicos pelo Console do Google Cloud, é necessário autenticar com uma Conta do Google. A conta não precisa estar associada ao projeto que contém os dados públicos nem inscrita no serviço do Cloud Storage.

Por outro lado, o acesso a dados públicos com o gsutil ou um link da API Cloud Storage não requer autenticação. Esses métodos são adequados para links de propósito geral para dados compartilhados publicamente. Por exemplo, um link de API pode ser usado em uma página da Web, com bibliotecas de clientes ou com uma ferramenta de linha de comando, como cURL.

Para acessar dados públicos:

O acesso a esse link não requer autenticação. É adequado, por exemplo, como um link em uma página da Web ou para download com uma ferramenta de linha de comando, como cURL.

  1. Consiga o nome do bucket que contém os dados públicos.

  2. Use o URI a seguir para acessar um objeto no bucket:

    https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME

Por exemplo, o bucket público do Google gcp-public-data-landsat contém o Conjunto de dados públicos da Landsat. É possível vincular o objeto compartilhado publicamente LC08/01/001/003/LC08_L1GT_001003_20140812_20170420_01_T2/LC08_L1GT_001003_20140812_20170420_01_T2_B3.TIF com o link:

https://storage.googleapis.com/gcp-public-data-landsat/LC08/01/001/003/LC08_L1GT_001003_20140812_20170420_01_T2/LC08_L1GT_001003_20140812_20170420_01_T2_B3.TIF

Console

O acesso a esse link requer autenticação com o Google. Normalmente, é necessário usar o método descrito na guia Link da API para acessar links de objetos individuais em um bucket público. Só será possível acessar objetos públicos pelo Console do Cloud se você tiver a permissão storage.objects.list para o bucket que contém os objetos.

  1. Consiga o nome do bucket público.

  2. Usando um navegador da Web, acesse o bucket com o URI a seguir (você será solicitado a fazer login, se necessário):

    https://console.cloud.google.com/storage/browser/BUCKET_NAME

Por exemplo, o bucket público do Google gcp-public-data-landsat contém o Conjunto de dados públicos da Landsat. Você pode acessar o bucket com:

https://console.cloud.google.com/storage/browser/gcp-public-data-landsat

gsutil

  1. Se você não tiver o gsutil, siga estas instruções para instalar o gsutil.

  2. Consiga o nome do bucket que contém os dados públicos.

  3. Se o bucket for público (e não apenas alguns dos dados contidos nele), você poderá listar alguns ou todos os dados (objetos) contidos no bucket usando o comando ls.

    Por exemplo, o bucket público do Google gcp-public-data-landsat contém o Conjunto de dados públicos da Landsat. Você pode listar arquivos com o prefixo LC08/01/001/003/LC com o comando:

    gsutil ls -r gs://gcp-public-data-landsat/LC08/01/001/003/LC*
  4. Use o comando cp para receber objetos públicos específicos contidos no bucket.

    Por exemplo, o comando a seguir faz o download de um arquivo do bucket gcp-public-data-landsat para o diretório local:

    gsutil cp gs://gcp-public-data-landsat/LC08/01/001/003/LC08_L1GT_001003_20140812_20170420_01_T2/LC08_L1GT_001003_20140812_20170420_01_T2_B3.TIF .

Amostras de código

C++

Para mais informações, consulte a documentação de referência da API Cloud Storage para C++.

namespace gcs = ::google::cloud::storage;
[](std::string const& bucket_name, std::string const& object_name) {
  // Create a client that does not authenticate with the server.
  auto client = gcs::Client{
      google::cloud::Options{}.set<google::cloud::UnifiedCredentialsOption>(
          google::cloud::MakeInsecureCredentials())};

  // Read an object, the object must have been made public.
  gcs::ObjectReadStream stream = client.ReadObject(bucket_name, object_name);

  int count = 0;
  std::string line;
  while (std::getline(stream, line, '\n')) {
    ++count;
  }
  std::cout << "The object has " << count << " lines\n";
}

C#

Para mais informações, consulte a documentação de referência da API Cloud Storage para C#.


using Google.Cloud.Storage.V1;
using System;
using System.IO;

public class DownloadPublicFileSample
{
    public string DownloadPublicFile(
        string bucketName = "your-bucket-name",
        string objectName = "your-object-name",
        string localPath = "path/to/download/object/to")
    {
        var storage = StorageClient.CreateUnauthenticated();

        using var outputFile = File.OpenWrite(localPath);
        storage.DownloadObject(bucketName, objectName, outputFile);

        Console.WriteLine($"Downloaded public file {objectName} from bucket {bucketName} to {localPath}.");
        return localPath;
    }
}

Go

Para mais informações, consulte a documentação de referência da API Cloud Storage para Go.

import (
	"context"
	"fmt"
	"io"
	"io/ioutil"
	"time"

	"cloud.google.com/go/storage"
	"google.golang.org/api/option"
)

// downloadPublicFile downloads a public object.
func downloadPublicFile(w io.Writer, bucket, object string) ([]byte, error) {
	// bucket := "bucket-name"
	// object := "object-name"
	ctx := context.Background()
	// Create a client that does not authenticate with the server.
	client, err := storage.NewClient(ctx, option.WithoutAuthentication())
	if err != nil {
		return nil, fmt.Errorf("storage.NewClient: %v", err)
	}
	defer client.Close()

	ctx, cancel := context.WithTimeout(ctx, time.Second*50)
	defer cancel()

	rc, err := client.Bucket(bucket).Object(object).NewReader(ctx)
	if err != nil {
		return nil, fmt.Errorf("Object(%q).NewReader: %v", object, err)
	}
	defer rc.Close()

	data, err := ioutil.ReadAll(rc)
	if err != nil {
		return nil, fmt.Errorf("ioutil.ReadAll: %v", err)
	}
	fmt.Fprintf(w, "Blob %v downloaded.\n", object)
	return data, nil
}

Java

Para mais informações, consulte a documentação de referência da API Cloud Storage para Java.

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.nio.file.Path;

public class DownloadPublicObject {
  public static void downloadPublicObject(
      String bucketName, String publicObjectName, Path destFilePath) {
    // The name of the bucket to access
    // String bucketName = "my-bucket";

    // The name of the remote public file to download
    // String publicObjectName = "publicfile.txt";

    // The path to which the file should be downloaded
    // Path destFilePath = Paths.get("/local/path/to/file.txt");

    // Instantiate an anonymous Google Cloud Storage client, which can only access public files
    Storage storage = StorageOptions.getUnauthenticatedInstance().getService();

    Blob blob = storage.get(BlobId.of(bucketName, publicObjectName));
    blob.downloadTo(destFilePath);

    System.out.println(
        "Downloaded public object "
            + publicObjectName
            + " from bucket name "
            + bucketName
            + " to "
            + destFilePath);
  }
}

Node.js

Para mais informações, consulte a documentação de referência da API Cloud Storage para Node.js.

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';

// The ID of your GCS file
// const srcFilename = 'your-file-name';

// The path to which the file should be downloaded
// const destFileName = '/local/path/to/file.txt';

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function downloadPublicFile() {
  const options = {
    destination: destFileName,
  };

  // Download public file.
  await storage.bucket(bucketName).file(srcFileName).download(options);

  console.log(
    `Downloaded public file ${srcFileName} from bucket name ${bucketName} to ${destFileName}`
  );
}

downloadPublicFile().catch(console.error);

Python

Para mais informações, consulte a documentação de referência da API Cloud Storage para Python.

from google.cloud import storage

def download_public_file(bucket_name, source_blob_name, destination_file_name):
    """Downloads a public blob from the bucket."""
    # bucket_name = "your-bucket-name"
    # source_blob_name = "storage-object-name"
    # destination_file_name = "local/path/to/file"

    storage_client = storage.Client.create_anonymous_client()

    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(source_blob_name)
    blob.download_to_filename(destination_file_name)

    print(
        "Downloaded public blob {} from bucket {} to {}.".format(
            source_blob_name, bucket.name, destination_file_name
        )
    )

Ruby

Para mais informações, consulte a documentação de referência da API Cloud Storage para Ruby.

def download_public_file bucket_name:, file_name:, local_file_path:
  # The name of the bucket to access
  # bucket_name = "my-bucket"

  # The name of the remote public file to download
  # file_name = "publicfile.txt"

  # The path to which the file should be downloaded
  # local_file_path = "/local/path/to/file.txt"

  require "google/cloud/storage"

  storage = Google::Cloud::Storage.anonymous
  bucket  = storage.bucket bucket_name, skip_lookup: true
  file    = bucket.file file_name

  file.download local_file_path

  puts "Downloaded public object #{file.name} from bucket #{bucket} to #{local_file_path}"
end

A seguir