גישה לנתונים ציבוריים

חלק מהנתונים המאוחסנים ב-Cloud Storage מוגדרים כך שכולם יכולים לקרוא אותם בכל זמן. אפשר לגשת לנתונים ציבוריים אלו במספר דרכים, בהתאם לאופן שבו רוצים לעבוד עם הנתונים.

  1. מקבלים את השם של האובייקט הציבורי ואת הקטגוריה שמאחסנת את האובייקט.

  2. כדי לגשת לאובייקט בקטגוריה, משתמשים ב-URI הבא:

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

לדוגמה, הקטגוריה הציבורית gcp-public-data-landsat של Google מכילה את מערך הנתונים הציבורי של Landsat. אפשר לבצע קישור לאובייקט המשותף לציבור LC08/01/001/003/LC08_L1GT_001003_20140812_20170420_01_T2/LC08_L1GT_001003_20140812_20170420_01_T2_B3.TIFבאמצעות הקישור:

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

המסוף

  1. מקבלים את השם של האובייקט הציבורי ואת הקטגוריה שמאחסנת את האובייקט.

  2. באמצעות דפדפן אינטרנט, ניגשים לאובייקט עם ה-URI הבא (אם לא נכנסתם לחשבון, תתבקשו להיכנס אליו):

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

  3. אם לציבור יש הרשאה להצגה של תוכן הקטגוריה, תוכלו לראות את כל האובייקטים בקטגוריה עם ה-URI הבא:

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

לדוגמה, הקטגוריה הציבורית gcp-public-data-landsat של Google מכילה את מערך הנתונים הציבורי של Landsat. אפשר לגשת לקטגוריה באמצעות:

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

שורת הפקודה

gcloud

  1. אם ה-CLI של gcloud לא מותקן, מתקינים אותו לפי ההוראות.

  2. מקבלים את השם של האובייקט הציבורי ואת הקטגוריה שמאחסנת את האובייקט.

  3. אם ההרשאה להצגה של תוכן הקטגוריה מוענק לציבור, תוכלו להציג חלק מהאובייקטים שבקטגוריה או את כולם באמצעות הפקודה ls.

    לדוגמה, הקטגוריה הציבורית gcp-public-data-landsat של Google מכילה את מערך הנתונים הציבורי של Landsat. אפשר להציג אובייקטים עם הקידומת LC08/01/001/003/LC באמצעות הפקודה הבאה:

    gcloud storage ls --recursive gs://gcp-public-data-landsat/LC08/01/001/003/LC*
  4. הורידו אובייקטים ציבוריים ספציפיים הכלולים בקטגוריה באמצעות הפקודה cp.

    לדוגמה, הפקודה הבאה מורידה קובץ מהקטגוריה gcp-public-data-landsat לספרייה המקומית:

    gcloud storage 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 .

gsutil

  1. אם אין לכם gsutil, צריך לפעול לפי ההוראות האלו כדי להתקין אותו.

  2. מקבלים את השם של האובייקט הציבורי ואת הקטגוריה שמאחסנת את האובייקט.

  3. אם ההרשאה להצגה של תוכן הקטגוריה מוענק לציבור, תוכלו להציג חלק מהאובייקטים שבקטגוריה או את כולם באמצעות הפקודה ls.

    לדוגמה, הקטגוריה הציבורית gcp-public-data-landsat של Google מכילה את מערך הנתונים הציבורי של Landsat. אפשר להציג אובייקטים עם הקידומת LC08/01/001/003/LC באמצעות הפקודה הבאה:

    gsutil ls -r gs://gcp-public-data-landsat/LC08/01/001/003/LC*
  4. הורידו אובייקטים ציבוריים ספציפיים הכלולים בקטגוריה באמצעות הפקודה cp.

    לדוגמה, הפקודה הבאה מורידה קובץ מהקטגוריה gcp-public-data-landsat לספרייה המקומית:

    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 .

ספריות לקוח

C++

מידע נוסף מופיע בחומרי העזר של Cloud Storage C++ API.

כדי לבצע אימות ב-Cloud Storage, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת אימות לסביבת פיתוח מקומית.

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;
  }
  if (stream.bad()) throw google::cloud::Status(stream.status());
  std::cout << "The object has " << count << " lines\n";
}

C#

מידע נוסף מופיע בחומרי העזר של Cloud Storage C# API.

כדי לבצע אימות ב-Cloud Storage, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת אימות לסביבת פיתוח מקומית.


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

מידע נוסף מופיע בחומרי העזר של Cloud Storage Go API.

כדי לבצע אימות ב-Cloud Storage, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת אימות לסביבת פיתוח מקומית.

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: %w", 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: %w", object, err)
	}
	defer rc.Close()

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

Java

מידע נוסף מופיע בחומרי העזר של Cloud Storage Java API.

כדי לבצע אימות ב-Cloud Storage, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת אימות לסביבת פיתוח מקומית.


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

מידע נוסף מופיע בחומרי העזר של Cloud Storage Node.js API.

כדי לבצע אימות ב-Cloud Storage, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת אימות לסביבת פיתוח מקומית.

/**
 * 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

מידע נוסף מופיע בחומרי העזר של Cloud Storage Python API.

כדי לבצע אימות ב-Cloud Storage, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת אימות לסביבת פיתוח מקומית.

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

מידע נוסף מופיע בחומרי העזר של Cloud Storage Ruby API.

כדי לבצע אימות ב-Cloud Storage, צריך להגדיר את Application Default Credentials. מידע נוסף מופיע במאמר הגדרת אימות לסביבת פיתוח מקומית.

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

המאמרים הבאים