diff --git a/samples/interactive-tutorials/README.md b/samples/interactive-tutorials/README.md deleted file mode 100644 index 64e6631c..00000000 --- a/samples/interactive-tutorials/README.md +++ /dev/null @@ -1,188 +0,0 @@ -#Retail Search Interactive Tutorials - -##Run tutorials in Cloud Shell - -To advance with the interactive tutorials, use Retail Search step-by-step manuals on the right side of the Cloud Shell IDE: -![Interactive tutorials](images/tutorial1.png) - -The interactive tutorial should open by default. If it didn’t, click on the Tutorial symbol in the menu bar to open the step-by-step manual: -![Toggle tutorial](images/tutorials2.png) - -For more details about the Cloud Shell environment, refer to the [Cloud Shell documentation](https://cloud.google.com/shell/docs). - -## Interactive tutorial flow - -Interactive guides are intended to help you understand the features provided by Google Cloud Retail Search and test the Retail API in action. - -To proceed with the tutorial, choose a language you’ll be deploying your project in: -![Select a programming language](images/tutorials3.png) - - -To begin with the tutorial workflow, click the Start button: -![Begin with the tutorial](images/tutorials4.png) - -Then, you can use Next and Previous buttons to navigate the tutorial pages. - -## Get started with the Google Cloud Retail API - -The Retail API provides you with the following possibilities to: - - Create and maintaining the catalog data. - - Fine-tune the search configuration. - - Import and maintain the user events data. - -You can find the information about the Retail services in the [documentation](https://cloud.google.com/retail/docs) - - -If you would like to have a closer look at the Retail API features and try them yourself, -the best option is to use the [Interactive Tutorials](https://cloud.google.com/retail/docs/overview). The tutorials will be launched in the CloudShell environment, and you will be able to request the Retail services and check the response with minimum time and effort. - -The code samples in the directory **python-retail/samples/interactive-tutorials** are explicitly created for use with the Retail Interactive Tutorials. - -If, for some reason, you have decided to proceed with these code samples without the tutorial, please go through the following steps and set up the required preconditions. - -### Select your project and enable the Retail API - -Google Cloud organizes resources into projects. This lets you -collect all related resources for a single application in one place. - -If you don't have a Google Cloud project yet or you're not the owner of an existing one, you can -[create a new project](https://console.cloud.google.com/projectcreate). - -After the project is created, set your PROJECT_ID to a ```project``` variable: - -1. Run the following command in the Terminal: - - ```bash - gcloud config set project - ``` - -1. Ensure that the Retail API is enabled for your project in the [API & Services page](https://console.cloud.google.com/apis/api/retail.googleapis.com/). - -## Prepare your work environment - -To prepare the work environment you should perform the following steps: -- Create a service account. -- Create service account key and set it to authorize your calls to the Retail API. -- Install Google Cloud Retail library. - -### Create service account - -To access the Retail API, you must create a service account. Check that you are an owner of your Google Cloud project on the [IAM page](https://console.cloud.google.com/iam-admin/iam). - -1. To create a service account, perform the following command: - - ```bash - gcloud iam service-accounts create - ``` - -1. Assign the needed roles to your service account: - - ```bash - for role in {retail.admin,storage.admin} - do gcloud projects add-iam-policy-binding --member="serviceAccount:@.iam.gserviceaccount.com" --role="roles/${role}" - done - ``` - -1. Use the following command to print out the service account email: - - ```bash - gcloud iam service-accounts list|grep - ``` - - Copy the service account email. - - -1. Upload your service account key JSON file and use it to activate the service - account: - - ```bash - gcloud iam service-accounts keys create ~/key.json --iam-account - ``` - - ```bash - gcloud auth activate-service-account --key-file ~/key.json - ``` - -1. Set the key as the GOOGLE_APPLICATION_CREDENTIALS environment variable to - use it for sending requests to the Retail API. - - ```bash - export GOOGLE_APPLICATION_CREDENTIALS=~/key.json - ``` - -### Install Google Cloud Retail libraries - -To run Python code samples for the Retail API tutorial, you need to set up your virtual environment. - -1. Run the following commands in a Terminal to create an isolated Python environment: - - ```bash - virtualenv -p python3 myenv - source myenv/bin/activate - ``` - -1. Next, install Google packages: - - ```bash - pip install google - pip install google-cloud-retail - pip install google-cloud-storage - pip install google-cloud-bigquery - - ``` - -## Import catalog data - -There is a python-retail/samples/interactive-tutorials/resources/products.json file with valid products prepared in the `resources` directory. - -The other file, python-retail/samples/interactive-tutorials/resources/products_some_invalid.json, contains both valid and invalid products. You will use it to check the error handling. - -### Upload catalog data to Cloud Storage - -In your own project you need to create a Cloud Storage bucket and put the JSON file there. -The bucket name must be unique. For convenience, you can name it `_`. - -1. The code samples for each of the Retail services are stored in different directories. - - Go to the code samples directory, your starting point to run more commands. - - ```bash - cd python-retail/samples/interactive-tutorials - ``` - -1. To create the bucket and upload the JSON file, open python-retail/samples/interactive-tutorials/product/setup_product/products_create_gcs_bucket.py file - -1. Go to the **product** directory and run the following command in the Terminal: - - ```bash - python product/setup_product/products_create_gcs_bucket.py - ``` - - Now you can see the bucket is created in the [Cloud Storage](https://console.cloud.google.com/storage/browser), and the files are uploaded. - -1. The name of the created Cloud Storage bucket is printed in the Terminal. - - ``` - The gcs bucket _ was created - ``` - - Copy the name and set it as the environment variable `BUCKET_NAME`: - - ```bash - export BUCKET_NAME= - ``` - -### Import products to the Retail Catalog - -To import the prepared products to a catalog, open python-retail/samples/interactive-tutorials/product/import_products_gcs.py file and run the following command in the Terminal: - -```bash -python product/import_products_gcs.py -``` - -## Run your code sample - -Run the sample in a terminal with the following command: -```bash -python search/search_with_boost_spec.py -``` \ No newline at end of file diff --git a/samples/interactive-tutorials/TEST_RESOURCES_SETUP_CLEANUP.md b/samples/interactive-tutorials/TEST_RESOURCES_SETUP_CLEANUP.md deleted file mode 100644 index 78f9ca18..00000000 --- a/samples/interactive-tutorials/TEST_RESOURCES_SETUP_CLEANUP.md +++ /dev/null @@ -1,50 +0,0 @@ -# How to set up/ tear down the test resources - -## Required environment variables - -To successfully import the catalog data for tests, the following environment variables should be set: - - BUCKET_NAME - - EVENTS_BUCKET_NAME -These values are stored in the Secret Manager and will be submitted as - docker environment variables before the test run. - -The Secret Manager name is set in .kokoro/presubmit/common.cfg file, SECRET_MANAGER_KEYS variable. - -## Import catalog data - -There are JSON files with valid products and user events prepared in `resources` directory: -`samples/resources/products.json` and `samples/resources/user_events.json` respectively. - -Run the `create_test_resources.py` to perform the following actions: - - create the GCS bucket , - - upload the product data from `resources/products.json` file to products bucket, - - import products to the default branch of the Retail catalog, - - create the GCS bucket , - - upload the product data from `resources/user_events.json` file to events bucket, - - create a BigQuery dataset and table `products`, - - insert products from resources/products.json to the created products table, - - create a BigQuery dataset and table `events`, - - insert user events from resources/user_events.json to the created events table - - -``` -$ python create_test_resources.py -``` - -In the result 316 products should be created in the test project catalog. - - -## Remove catalog data - -Run the `remove_test_resources.py` to perform the following actions: - - remove all objects from the GCS bucket , - - remove the bucket, - - delete all products from the Retail catalog. - - remove all objects from the GCS bucket , - - remove the bucket, - - remove dataset `products` along with tables - - remove dataset `user_events` along with tables - -``` -$ python remove_test_resources.py -``` \ No newline at end of file diff --git a/samples/interactive-tutorials/events/conftest.py b/samples/interactive-tutorials/events/conftest.py deleted file mode 100644 index 8cfb8596..00000000 --- a/samples/interactive-tutorials/events/conftest.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import pytest -import test_utils.prefixer - -prefixer = test_utils.prefixer.Prefixer( - "python-retail", "samples/interactive-tutorials/product" -) - - -@pytest.fixture(scope="session") -def table_id_prefix() -> str: - return prefixer.create_prefix() - - -@pytest.fixture(scope="session") -def bucket_name_prefix() -> str: - return prefixer.create_prefix() diff --git a/samples/interactive-tutorials/events/import_user_events_big_query.py b/samples/interactive-tutorials/events/import_user_events_big_query.py deleted file mode 100644 index ddc41e03..00000000 --- a/samples/interactive-tutorials/events/import_user_events_big_query.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import argparse - -import google.auth - -project_id = google.auth.default()[1] - - -def main(project_id, dataset_id, table_id): - # TODO: Set project_id to your Google Cloud Platform project ID. - # project_id = "my-project" - - # TODO: Set dataset_id - # dataset_id = "user_events" - - # TODO: Set table_id - # table_id = "events" - - # Import products into a catalog from big query table using Retail API - import time - - from google.cloud.retail import ( - BigQuerySource, - ImportUserEventsRequest, - UserEventInputConfig, - UserEventServiceClient, - ) - - default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" - - # TO CHECK ERROR HANDLING USE THE TABLE OF INVALID USER EVENTS: - # table_id = "events_some_invalid" - - # get import user events from big query request - def get_import_events_big_query_request(): - # TO CHECK ERROR HANDLING PASTE THE INVALID CATALOG NAME HERE: - # default_catalog = "invalid_catalog_name" - big_query_source = BigQuerySource() - big_query_source.project_id = project_id - big_query_source.dataset_id = dataset_id - big_query_source.table_id = table_id - big_query_source.data_schema = "user_event" - - input_config = UserEventInputConfig() - input_config.big_query_source = big_query_source - - import_request = ImportUserEventsRequest() - import_request.parent = default_catalog - import_request.input_config = input_config - - print("---import user events from BigQuery source request---") - print(import_request) - - return import_request - - # call the Retail API to import user events - def import_user_events_from_big_query(): - import_big_query_request = get_import_events_big_query_request() - big_query_operation = UserEventServiceClient().import_user_events( - import_big_query_request - ) - - print("---the operation was started:----") - print(big_query_operation.operation.name) - - while not big_query_operation.done(): - print("---please wait till operation is done---") - time.sleep(30) - print("---import user events operation is done---") - - if big_query_operation.metadata is not None: - print("---number of successfully imported events---") - print(big_query_operation.metadata.success_count) - print("---number of failures during the importing---") - print(big_query_operation.metadata.failure_count) - else: - print("---operation.metadata is empty---") - - if big_query_operation.result is not None: - print("---operation result:---") - print(big_query_operation.result()) - else: - print("---operation.result is empty---") - - import_user_events_from_big_query() - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("dataset_id", nargs="?", default="user_events") - parser.add_argument("table_id", nargs="?", default="events") - args = parser.parse_args() - main(project_id, args.dataset_id, args.table_id) diff --git a/samples/interactive-tutorials/events/import_user_events_bigquery_test.py b/samples/interactive-tutorials/events/import_user_events_bigquery_test.py deleted file mode 100644 index 69ebd716..00000000 --- a/samples/interactive-tutorials/events/import_user_events_bigquery_test.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - -from setup_events.setup_cleanup import ( - create_bq_dataset, - create_bq_table, - delete_bq_table, - upload_data_to_bq_table, -) -from setup_events.update_user_events_json import update_events_timestamp - - -def test_import_products_bq(table_id_prefix): - dataset = "user_events" - valid_products_table = f"{table_id_prefix}events" - product_schema = "../resources/events_schema.json" - valid_products_source_file = "../resources/user_events.json" - - try: - update_events_timestamp("../resources/user_events.json") - update_events_timestamp("../resources/user_events_some_invalid.json") - create_bq_dataset(dataset) - create_bq_table(dataset, valid_products_table, product_schema) - upload_data_to_bq_table( - dataset, valid_products_table, valid_products_source_file, product_schema - ) - output = str( - subprocess.check_output( - f"python import_user_events_big_query.py {dataset} {valid_products_table}", - shell=True, - ) - ) - finally: - delete_bq_table(dataset, valid_products_table) - - assert re.match( - '.*import user events from BigQuery source request.*?parent: "projects/.*?/locations/global/catalogs/default_catalog.*', - output, - ) - assert re.match( - ".*import user events from BigQuery source request.*?input_config.*?big_query_source.*", - output, - ) - assert re.match( - ".*the operation was started.*?projects/.*?/locations/global/catalogs/default_catalog/operations/import-user-events.*", - output, - ) - assert re.match(".*import user events operation is done.*", output) - assert re.match(".*number of successfully imported events.*", output) - assert re.match(".*number of failures during the importing.*?0.*", output) - assert re.match(".*operation result.*?errors_config.*", output) diff --git a/samples/interactive-tutorials/events/import_user_events_gcs.py b/samples/interactive-tutorials/events/import_user_events_gcs.py deleted file mode 100644 index b4680a89..00000000 --- a/samples/interactive-tutorials/events/import_user_events_gcs.py +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import argparse -import os - - -def main(bucket_name): - # Import user events into a catalog from GCS using Retail API - - import time - - import google.auth - from google.cloud.retail import ( - GcsSource, - ImportErrorsConfig, - ImportUserEventsRequest, - UserEventInputConfig, - UserEventServiceClient, - ) - - # Read the project number from the environment variable - project_id = google.auth.default()[1] - - # Read bucket name from the environment variable - bucket_name = os.getenv("EVENTS_BUCKET_NAME") - - # TODO: Developer set the bucket_name - # bucket_name = 'user_events_bucket' - - default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" - - gcs_bucket = f"gs://{bucket_name}" - gcs_errors_bucket = f"{gcs_bucket}/error" - gcs_events_object = "user_events.json" - - # TO CHECK ERROR HANDLING USE THE JSON WITH INVALID PRODUCT - # gcs_events_object = "user_events_some_invalid.json" - - # get import user events from gcs request - def get_import_events_gcs_request(gcs_object_name: str): - # TO CHECK ERROR HANDLING PASTE THE INVALID CATALOG NAME HERE: - # default_catalog = "invalid_catalog_name" - gcs_source = GcsSource() - gcs_source.input_uris = [f"{gcs_bucket}/{gcs_object_name}"] - - input_config = UserEventInputConfig() - input_config.gcs_source = gcs_source - - errors_config = ImportErrorsConfig() - errors_config.gcs_prefix = gcs_errors_bucket - - import_request = ImportUserEventsRequest() - import_request.parent = default_catalog - import_request.input_config = input_config - import_request.errors_config = errors_config - - print("---import user events from google cloud source request---") - print(import_request) - - return import_request - - # call the Retail API to import user events - def import_user_events_from_gcs(): - import_gcs_request = get_import_events_gcs_request(gcs_events_object) - gcs_operation = UserEventServiceClient().import_user_events(import_gcs_request) - - print("---the operation was started:----") - print(gcs_operation.operation.name) - - while not gcs_operation.done(): - print("---please wait till operation is done---") - time.sleep(30) - - print("---import user events operation is done---") - - if gcs_operation.metadata is not None: - print("---number of successfully imported events---") - print(gcs_operation.metadata.success_count) - print("---number of failures during the importing---") - print(gcs_operation.metadata.failure_count) - else: - print("---operation.metadata is empty---") - - if gcs_operation.result is not None: - print("---operation result:---") - print(gcs_operation.result()) - else: - print("---operation.result is empty---") - - import_user_events_from_gcs() - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument( - "bucket_name", nargs="?", default=os.environ["EVENTS_BUCKET_NAME"] - ) - args = parser.parse_args() - main(args.bucket_name) diff --git a/samples/interactive-tutorials/events/import_user_events_gcs_test.py b/samples/interactive-tutorials/events/import_user_events_gcs_test.py deleted file mode 100644 index 5ef77a72..00000000 --- a/samples/interactive-tutorials/events/import_user_events_gcs_test.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - -from setup_events.setup_cleanup import create_bucket, delete_bucket, upload_blob -from setup_events.update_user_events_json import update_events_timestamp - - -def test_import_events_gcs(bucket_name_prefix): - # gcs buckets have a limit of 63 characters. Get the last 60 characters - bucket_name = bucket_name_prefix[63:] - - try: - update_events_timestamp("../resources/user_events.json") - update_events_timestamp("../resources/user_events_some_invalid.json") - create_bucket(bucket_name) - upload_blob(bucket_name, "../resources/user_events.json") - - output = str( - subprocess.check_output("python import_user_events_gcs.py", shell=True) - ) - finally: - delete_bucket(bucket_name) - - assert re.match( - '.*import user events from google cloud source request.*?parent: "projects/.*?/locations/global/catalogs/default_catalog.*', - output, - ) - assert re.match( - ".*import user events from google cloud source request.*?input_config.*?gcs_source.*", - output, - ) - assert re.match( - ".*the operation was started.*?projects/.*?/locations/global/catalogs/default_catalog/operations/import-user-events.*", - output, - ) - assert re.match(".*import user events operation is done.*", output) - assert re.match(".*number of successfully imported events.*?4.*", output) - assert re.match(".*number of failures during the importing.*?0.*", output) - assert re.match(".*operation result.*?errors_config.*", output) diff --git a/samples/interactive-tutorials/events/import_user_events_inline.py b/samples/interactive-tutorials/events/import_user_events_inline.py deleted file mode 100644 index 9e247ec3..00000000 --- a/samples/interactive-tutorials/events/import_user_events_inline.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Import user events into a catalog from inline source using Retail API -# -import datetime -import random -import string -import time - -import google.auth -from google.cloud.retail import ( - ImportUserEventsRequest, - UserEvent, - UserEventInlineSource, - UserEventInputConfig, - UserEventServiceClient, -) -from google.protobuf.timestamp_pb2 import Timestamp - -project_id = google.auth.default()[1] - -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" - - -# get user events for import -def get_user_events(): - user_events = [] - for x in range(3): - timestamp = Timestamp() - timestamp.seconds = int(datetime.datetime.now().timestamp()) - - user_event = UserEvent() - user_event.event_type = "home-page-view" - user_event.visitor_id = ( - "".join(random.sample(string.ascii_lowercase, 4)) + "event_" + str(x) - ) - user_event.event_time = timestamp - user_events.append(user_event) - - print(user_events) - return user_events - - -# get import user events from inline source request -def get_import_events_inline_source_request(user_events_to_import): - inline_source = UserEventInlineSource() - inline_source.user_events = user_events_to_import - - input_config = UserEventInputConfig() - input_config.user_event_inline_source = inline_source - - import_request = ImportUserEventsRequest() - import_request.parent = default_catalog - import_request.input_config = input_config - - print("---import user events from inline source request---") - print(import_request) - - return import_request - - -# call the Retail API to import user events -def import_user_events_from_inline_source(): - import_inline_request = get_import_events_inline_source_request(get_user_events()) - import_operation = UserEventServiceClient().import_user_events( - import_inline_request - ) - - print("---the operation was started:----") - print(import_operation.operation.name) - - while not import_operation.done(): - print("---please wait till operation is done---") - time.sleep(5) - - print("---import user events operation is done---") - - if import_operation.metadata is not None: - print("---number of successfully imported events---") - print(import_operation.metadata.success_count) - print("---number of failures during the importing---") - print(import_operation.metadata.failure_count) - else: - print("---operation.metadata is empty---") - - if import_operation.result is not None: - print("---operation result:---") - print(import_operation.result()) - else: - print("---operation.result is empty---") - - -import_user_events_from_inline_source() diff --git a/samples/interactive-tutorials/events/import_user_events_inline_test.py b/samples/interactive-tutorials/events/import_user_events_inline_test.py deleted file mode 100644 index 79546b40..00000000 --- a/samples/interactive-tutorials/events/import_user_events_inline_test.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_create_product(): - output = str( - subprocess.check_output("python import_user_events_inline.py", shell=True) - ) - - assert re.match( - '.*import user events from inline source request.*?parent: "projects/.*?/locations/global/catalogs/default_catalog.*', - output, - ) - assert re.match( - ".*import user events from inline source request.*?input_config.*?user_event_inline_source.*", - output, - ) - assert re.match( - ".*the operation was started.*?projects/.*?/locations/global/catalogs/default_catalog/operations/import-user-events.*", - output, - ) - assert re.match(".*import user events operation is done.*", output) - assert re.match(".*number of successfully imported events.*?3.*", output) - assert re.match(".*number of failures during the importing.*?0.*", output) diff --git a/samples/interactive-tutorials/events/noxfile.py b/samples/interactive-tutorials/events/noxfile.py deleted file mode 100644 index de104dbc..00000000 --- a/samples/interactive-tutorials/events/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# 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. - -from __future__ import print_function - -import glob -import os -from pathlib import Path -import sys -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/samples/interactive-tutorials/events/noxfile_config.py b/samples/interactive-tutorials/events/noxfile_config.py deleted file mode 100644 index cee552bb..00000000 --- a/samples/interactive-tutorials/events/noxfile_config.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright 2022 Google LLC -# -# 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. - -# Default TEST_CONFIG_OVERRIDE for python repos. - -# The source of truth: -# https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/noxfile_config.py - -TEST_CONFIG_OVERRIDE = { - # You can opt out from the test for specific Python versions. - "ignored_versions": ["2.7", "3.6"], - # An envvar key for determining the project id to use. Change it - # to 'PROJECT_NUMBER' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": { - "DATA_LABELING_API_ENDPOINT": "us-central1-autopush-aiplatform.sandbox.googleapis.com", - "PYTEST_ADDOPTS": "-n=auto", # Run tests parallel using all available CPUs - "EVENTS_BUCKET_NAME": "retail-interactive-tutorials-events", - }, -} diff --git a/samples/interactive-tutorials/events/purge_user_event.py b/samples/interactive-tutorials/events/purge_user_event.py deleted file mode 100644 index 847229b6..00000000 --- a/samples/interactive-tutorials/events/purge_user_event.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Deleting user event using Retail API. -# -import google.auth -from google.cloud.retail import PurgeUserEventsRequest, UserEventServiceClient - -from setup_events.setup_cleanup import write_user_event - -project_id = google.auth.default()[1] - -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" - -visitor_id = "test_visitor_id" - - -# get purge user event request -def get_purge_user_event_request(): - purge_user_event_request = PurgeUserEventsRequest() - # TO CHECK ERROR HANDLING SET INVALID FILTER HERE: - purge_user_event_request.filter = f'visitorId="{visitor_id}"' - purge_user_event_request.parent = default_catalog - purge_user_event_request.force = True - print("---purge user events request---") - print(purge_user_event_request) - return purge_user_event_request - - -# call the Retail API to purge user event -def call_purge_user_events(): - purge_operation = UserEventServiceClient().purge_user_events( - get_purge_user_event_request() - ) - - print("---the purge operation was started:----") - print(purge_operation.operation.name) - - -write_user_event(visitor_id) -call_purge_user_events() diff --git a/samples/interactive-tutorials/events/purge_user_event_test.py b/samples/interactive-tutorials/events/purge_user_event_test.py deleted file mode 100644 index 056b883f..00000000 --- a/samples/interactive-tutorials/events/purge_user_event_test.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_create_product(): - output = str(subprocess.check_output("python purge_user_event.py", shell=True)) - - assert re.match(".*the user event is written.*", output) - assert re.match( - '.*purge user events request.*?parent: "projects/.*?/locations/global/catalogs/default_catalog.*', - output, - ) - assert re.match( - '.*purge user events request.*?filter: "visitorId=.*?test_visitor_id.*?".*', - output, - ) - assert re.match( - '.*purge user events request.*?parent: "projects/.*?/locations/global/catalogs/default_catalog.*', - output, - ) - assert re.match(".*purge user events request.*?force: true.*", output) - assert re.match( - ".*the purge operation was started.*?projects/.*?/locations/global/catalogs/default_catalog/operations/purge-user-events.*", - output, - ) diff --git a/samples/interactive-tutorials/events/rejoin_user_event.py b/samples/interactive-tutorials/events/rejoin_user_event.py deleted file mode 100644 index 0616adf0..00000000 --- a/samples/interactive-tutorials/events/rejoin_user_event.py +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Starts a user event rejoin operation using Retail API. -# -import google.auth -from google.cloud.retail import RejoinUserEventsRequest, UserEventServiceClient - -from setup_events.setup_cleanup import purge_user_event, write_user_event - -project_id = google.auth.default()[1] - -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" - -visitor_id = "test_visitor_id" - - -# get rejoin user event request -def get_rejoin_user_event_request(): - # TO CHECK THE ERROR HANDLING TRY TO PASS INVALID CATALOG: - # default_catalog = f"projects/{project_id}/locations/global/catalogs/invalid_catalog" - rejoin_user_event_request = RejoinUserEventsRequest() - rejoin_user_event_request.parent = default_catalog - rejoin_user_event_request.user_event_rejoin_scope = ( - RejoinUserEventsRequest.UserEventRejoinScope.UNJOINED_EVENTS - ) - print("---rejoin user events request---") - print(rejoin_user_event_request) - return rejoin_user_event_request - - -# call the Retail API to rejoin user event -def call_rejoin_user_events(): - rejoin_operation = UserEventServiceClient().rejoin_user_events( - get_rejoin_user_event_request() - ) - - print("---the rejoin operation was started:----") - print(rejoin_operation.operation.name) - - -write_user_event(visitor_id) -call_rejoin_user_events() -purge_user_event(visitor_id) diff --git a/samples/interactive-tutorials/events/rejoin_user_event_test.py b/samples/interactive-tutorials/events/rejoin_user_event_test.py deleted file mode 100644 index a6bea803..00000000 --- a/samples/interactive-tutorials/events/rejoin_user_event_test.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_create_product(): - output = str(subprocess.check_output("python rejoin_user_event.py", shell=True)) - - assert re.match(".*the user event is written.*", output) - assert re.match( - '.*rejoin user events request.*?parent: "projects/.*?/locations/global/catalogs/default_catalog.*', - output, - ) - assert re.match( - ".*rejoin user events request.*?user_event_rejoin_scope: UNJOINED_EVENTS.*", - output, - ) - assert re.match( - ".*the rejoin operation was started.*?projects/.*?/locations/global/catalogs/default_catalog/operations/rejoin-user-events.*", - output, - ) - assert re.match( - ".*the purge operation was started.*?projects/.*?/locations/global/catalogs/default_catalog/operations/purge-user-events.*", - output, - ) diff --git a/samples/interactive-tutorials/events/requirements-test.txt b/samples/interactive-tutorials/events/requirements-test.txt deleted file mode 100644 index 0e59cb53..00000000 --- a/samples/interactive-tutorials/events/requirements-test.txt +++ /dev/null @@ -1,3 +0,0 @@ -pytest==7.4.0 -pytest-xdist==3.3.1 -google-cloud-testutils==1.3.3 diff --git a/samples/interactive-tutorials/events/requirements.txt b/samples/interactive-tutorials/events/requirements.txt deleted file mode 100644 index 2fdd8143..00000000 --- a/samples/interactive-tutorials/events/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -google==3.0.0 -google-cloud-retail==1.16.2 -google-cloud-storage==2.10.0 -google-cloud-bigquery==3.11.4 diff --git a/samples/interactive-tutorials/events/setup_events/events_create_bigquery_table.py b/samples/interactive-tutorials/events/setup_events/events_create_bigquery_table.py deleted file mode 100644 index bf9a2436..00000000 --- a/samples/interactive-tutorials/events/setup_events/events_create_bigquery_table.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -from setup_cleanup import create_bq_dataset, create_bq_table, \ - upload_data_to_bq_table - -dataset = "user_events" -valid_events_table = "events" -invalid_events_table = "events_some_invalid" -events_schema = "../resources/events_schema.json" -valid_events_source_file = "../resources/user_events.json" -invalid_events_source_file = "../resources/user_events_some_invalid.json" - -create_bq_dataset(dataset) -create_bq_table(dataset, valid_events_table, events_schema) -upload_data_to_bq_table(dataset, valid_events_table, valid_events_source_file, - events_schema) -create_bq_table(dataset, invalid_events_table, events_schema) -upload_data_to_bq_table(dataset, invalid_events_table, - invalid_events_source_file, events_schema) diff --git a/samples/interactive-tutorials/events/setup_events/events_create_gcs_bucket.py b/samples/interactive-tutorials/events/setup_events/events_create_gcs_bucket.py deleted file mode 100644 index 07b30763..00000000 --- a/samples/interactive-tutorials/events/setup_events/events_create_gcs_bucket.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import datetime - -import google.auth - -from setup_cleanup import create_bucket, upload_blob - -project_id = google.auth.default()[1] -timestamp_ = datetime.datetime.now().timestamp().__round__() -bucket_name = f"{project_id}_events_{timestamp_}" - -create_bucket(bucket_name) -upload_blob(bucket_name, "../resources/user_events.json") -upload_blob(bucket_name, "../resources/user_events_some_invalid.json") - -print(f"\nThe gcs bucket {bucket_name} was created") diff --git a/samples/interactive-tutorials/events/setup_events/events_delete_gcs_bucket.py b/samples/interactive-tutorials/events/setup_events/events_delete_gcs_bucket.py deleted file mode 100644 index c51b06bb..00000000 --- a/samples/interactive-tutorials/events/setup_events/events_delete_gcs_bucket.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import os - -from setup_cleanup import delete_bucket - - -def delete_bucket_by_name(name: str): - if name is None: - bucket_name = os.getenv("EVENTS_BUCKET_NAME") - delete_bucket(bucket_name) - else: - delete_bucket(name) diff --git a/samples/interactive-tutorials/events/setup_events/setup_cleanup.py b/samples/interactive-tutorials/events/setup_events/setup_cleanup.py deleted file mode 100644 index 1e92e308..00000000 --- a/samples/interactive-tutorials/events/setup_events/setup_cleanup.py +++ /dev/null @@ -1,203 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -import datetime -import json -import re -import shlex -import subprocess - -from google.api_core.exceptions import NotFound -import google.auth - -from google.cloud import bigquery -from google.cloud import storage -from google.cloud.retail import ProductDetail, PurgeUserEventsRequest, \ - UserEvent, UserEventServiceClient, WriteUserEventRequest -from google.cloud.retail_v2 import Product - -from google.protobuf.timestamp_pb2 import Timestamp - -project_id = google.auth.default()[1] -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" - - -# get user event -def get_user_event(visitor_id): - timestamp = Timestamp() - timestamp.seconds = int(datetime.datetime.now().timestamp()) - - product = Product() - product.id = 'test_id' - - product_detail = ProductDetail() - product_detail.product = product - - user_event = UserEvent() - user_event.event_type = "detail-page-view" - user_event.visitor_id = visitor_id - user_event.event_time = timestamp - user_event.product_details = [product_detail] - - print(user_event) - return user_event - - -# write user event -def write_user_event(visitor_id): - write_user_event_request = WriteUserEventRequest() - write_user_event_request.user_event = get_user_event(visitor_id) - write_user_event_request.parent = default_catalog - user_event = UserEventServiceClient().write_user_event( - write_user_event_request) - print("---the user event is written---") - print(user_event) - return user_event - - -# purge user event -def purge_user_event(visitor_id): - purge_user_event_request = PurgeUserEventsRequest() - purge_user_event_request.filter = f'visitorId="{visitor_id}"' - purge_user_event_request.parent = default_catalog - purge_user_event_request.force = True - purge_operation = UserEventServiceClient().purge_user_events( - purge_user_event_request) - - print("---the purge operation was started:----") - print(purge_operation.operation.name) - - -def get_project_id(): - get_project_command = "gcloud config get-value project --format json" - config = subprocess.check_output(shlex.split(get_project_command)) - project_id = re.search('\"(.*?)\"', str(config)).group(1) - return project_id - - -def create_bucket(bucket_name: str): - """Create a new bucket in Cloud Storage""" - print("Creating new bucket:" + bucket_name) - buckets_in_your_project = list_buckets() - if bucket_name in buckets_in_your_project: - print(f"Bucket {bucket_name} already exists") - else: - storage_client = storage.Client() - bucket = storage_client.bucket(bucket_name) - bucket.storage_class = "STANDARD" - new_bucket = storage_client.create_bucket(bucket, location="us") - print( - f"Created bucket {new_bucket.name} in {new_bucket.location} with storage class {new_bucket.storage_class}") - return new_bucket - - -def delete_bucket(bucket_name: str): - """Delete a bucket from Cloud Storage""" - storage_client = storage.Client() - print("Deleting bucket:" + bucket_name) - buckets_in_your_project = list_buckets() - if bucket_name in buckets_in_your_project: - blobs = storage_client.list_blobs(bucket_name) - for blob in blobs: - blob.delete() - bucket = storage_client.get_bucket(bucket_name) - bucket.delete() - print(f"Bucket {bucket.name} is deleted") - else: - print(f"Bucket {bucket_name} is not found") - - -def list_buckets(): - """Lists all buckets""" - bucket_list = [] - storage_client = storage.Client() - buckets = storage_client.list_buckets() - for bucket in buckets: - bucket_list.append(bucket.name) - return bucket_list - - -def upload_blob(bucket_name, source_file_name): - """Uploads a file to the bucket.""" - # The path to your file to upload - # source_file_name = "local/path/to/file" - print(f"Uploading data from {source_file_name} to the bucket {bucket_name}") - storage_client = storage.Client() - bucket = storage_client.bucket(bucket_name) - object_name = re.search('resources/(.*?)$', source_file_name).group(1) - blob = bucket.blob(object_name) - blob.upload_from_filename(source_file_name) - print( - f"File {source_file_name} uploaded to {object_name}." - ) - - -def create_bq_dataset(dataset_name): - """Create a BigQuery dataset""" - full_dataset_id = f"{project_id}.{dataset_name}" - bq = bigquery.Client() - print(f"Creating dataset {full_dataset_id}") - try: - bq.get_dataset(full_dataset_id) - print(f"dataset {full_dataset_id} already exists") - except NotFound: - # Construct a Dataset object to send to the API. - dataset = bigquery.Dataset(full_dataset_id) - dataset.location = "US" - bq.create_dataset(dataset) - print("dataset is created") - - -def create_bq_table(dataset, table_name, schema_file_path): - """Create a BigQuery table""" - full_table_id = f"{project_id}.{dataset}.{table_name}" - bq = bigquery.Client() - print(f"Check if BQ table {full_table_id} exists") - try: - bq.get_table(full_table_id) - print(f"table {full_table_id} exists and will be deleted") - delete_bq_table(dataset, table_name) - except NotFound: - print(f"table {full_table_id} does not exist") - # Construct a Table object to send to the API. - with open(schema_file_path, "rb") as schema: - schema_dict = json.load(schema) - table = bigquery.Table(full_table_id, schema=schema_dict) - bq.create_table(table) - print(f"table {full_table_id} is created") - - -def delete_bq_table(dataset, table_name): - full_table_id = f"{project_id}.{dataset}.{table_name}" - bq = bigquery.Client() - bq.delete_table(full_table_id, not_found_ok=True) - print(f"Table '{full_table_id}' is deleted.") - - -def upload_data_to_bq_table(dataset, table_name, source, schema_file_path): - """Upload data to the table from specified source file""" - full_table_id = f"{project_id}.{dataset}.{table_name}" - bq = bigquery.Client() - print(f"Uploading data from {source} to the table {full_table_id}") - with open(schema_file_path, "rb") as schema: - schema_dict = json.load(schema) - job_config = bigquery.LoadJobConfig( - source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON, - schema=schema_dict) - with open(source, "rb") as source_file: - job = bq.load_table_from_file(source_file, full_table_id, - job_config=job_config) - job.result() # Waits for the job to complete. - print("data was uploaded") diff --git a/samples/interactive-tutorials/events/setup_events/update_user_events_json.py b/samples/interactive-tutorials/events/setup_events/update_user_events_json.py deleted file mode 100644 index 8f194da8..00000000 --- a/samples/interactive-tutorials/events/setup_events/update_user_events_json.py +++ /dev/null @@ -1,31 +0,0 @@ -import datetime -import re - -""" -Run the file to update the user_events.json and user_events_some_invalid.json files with more recent timestamp -""" - - -def update_events_timestamp(json_file): - # Get the yesterday's date - request_time = datetime.datetime.now() - datetime.timedelta(days=1) - day = request_time.date().strftime("%Y-%m-%d") - print(day) - - # Read in the file - with open(json_file, 'r') as file: - filedata = file.read() - - # Replace the target string '"eventTime":"YYYY-mm-dd' with yesterday date - filedata = re.sub('\"eventTime\":\"([0-9]{4})-([0-9]{2})-([0-9]{2})', - '\"eventTime\":\"' + day, filedata, flags=re.M) - - # Write the file out again - with open(json_file, 'w') as file: - file.write(filedata) - print(f"The {json_file} is updated") - - -if __name__ == "__main__": - update_events_timestamp("../resources/user_events.json") - update_events_timestamp("../resources/user_events_some_invalid.json") diff --git a/samples/interactive-tutorials/events/write_user_event.py b/samples/interactive-tutorials/events/write_user_event.py deleted file mode 100644 index 8d8da455..00000000 --- a/samples/interactive-tutorials/events/write_user_event.py +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Write user event using Retail API. -# -import datetime - -import google.auth -from google.cloud.retail import UserEvent, UserEventServiceClient, WriteUserEventRequest -from google.protobuf.timestamp_pb2 import Timestamp - -from setup_events.setup_cleanup import purge_user_event - -project_id = google.auth.default()[1] - -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" - -visitor_id = "test_visitor_id" - - -# get user event -def get_user_event(): - timestamp = Timestamp() - timestamp.seconds = int(datetime.datetime.now().timestamp()) - - user_event = UserEvent() - user_event.event_type = "home-page-view" - user_event.visitor_id = visitor_id - user_event.event_time = timestamp - - print(user_event) - return user_event - - -# get write user event request -def get_write_event_request(user_event): - # TO CHECK THE ERROR HANDLING TRY TO PASS INVALID CATALOG: - # default_catalog = f"projects/{project_id}/locations/global/catalogs/invalid_catalog" - write_user_event_request = WriteUserEventRequest() - write_user_event_request.user_event = user_event - write_user_event_request.parent = default_catalog - - print("---write user event request---") - print(write_user_event_request) - - return write_user_event_request - - -# call the Retail API to write user event -def write_user_event(): - write_user_event_request = get_write_event_request(get_user_event()) - user_event = UserEventServiceClient().write_user_event(write_user_event_request) - - print("---written user event:---") - print(user_event) - return user_event - - -write_user_event() -purge_user_event(visitor_id) diff --git a/samples/interactive-tutorials/events/write_user_event_test.py b/samples/interactive-tutorials/events/write_user_event_test.py deleted file mode 100644 index d1dbbec7..00000000 --- a/samples/interactive-tutorials/events/write_user_event_test.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_create_product(): - output = str(subprocess.check_output("python write_user_event.py", shell=True)) - - assert re.match( - '.*write user event request.*?user_event.*?event_type: "home-page-view".*', - output, - ) - assert re.match('.*written user event.*?event_type: "home-page-view".*', output) - assert re.match('.*written user event.*?visitor_id: "test_visitor_id".*', output) diff --git a/samples/interactive-tutorials/images/tutorail1.img b/samples/interactive-tutorials/images/tutorail1.img deleted file mode 100644 index e69de29b..00000000 diff --git a/samples/interactive-tutorials/images/tutorial1.png b/samples/interactive-tutorials/images/tutorial1.png deleted file mode 100644 index edeea837..00000000 Binary files a/samples/interactive-tutorials/images/tutorial1.png and /dev/null differ diff --git a/samples/interactive-tutorials/images/tutorials2.png b/samples/interactive-tutorials/images/tutorials2.png deleted file mode 100644 index 3321a0de..00000000 Binary files a/samples/interactive-tutorials/images/tutorials2.png and /dev/null differ diff --git a/samples/interactive-tutorials/images/tutorials3.png b/samples/interactive-tutorials/images/tutorials3.png deleted file mode 100644 index ae7518f0..00000000 Binary files a/samples/interactive-tutorials/images/tutorials3.png and /dev/null differ diff --git a/samples/interactive-tutorials/images/tutorials4.png b/samples/interactive-tutorials/images/tutorials4.png deleted file mode 100644 index f649a9b3..00000000 Binary files a/samples/interactive-tutorials/images/tutorials4.png and /dev/null differ diff --git a/samples/interactive-tutorials/product/add_fulfillment_places.py b/samples/interactive-tutorials/product/add_fulfillment_places.py deleted file mode 100644 index ebf1dca6..00000000 --- a/samples/interactive-tutorials/product/add_fulfillment_places.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Adding place IDs using Retail API. -# -import asyncio -import random -import string - -from google.api_core.exceptions import GoogleAPICallError -import google.auth -from google.cloud.retail import AddFulfillmentPlacesRequest, ProductServiceAsyncClient - -from setup_product.setup_cleanup import create_product, delete_product, get_product - -project_id = google.auth.default()[1] -product_id = "".join(random.sample(string.ascii_lowercase, 8)) -product_name = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/branches/default_branch/products/" - + product_id -) - - -# add fulfillment request -def get_add_fulfillment_request( - product_name: str, place_id -) -> AddFulfillmentPlacesRequest: - add_fulfillment_request = AddFulfillmentPlacesRequest() - add_fulfillment_request.product = product_name - add_fulfillment_request.type_ = "pickup-in-store" - add_fulfillment_request.place_ids = [place_id] - add_fulfillment_request.allow_missing = True - - # To send an out-of-order request assign the invalid add_time here: - # import datetime - # add_fulfillment_request.add_time = datetime.datetime.now() - datetime.timedelta(days=1) - - print("---add fulfillment request---") - print(add_fulfillment_request) - - return add_fulfillment_request - - -async def add_places(product_name: str): - print("------add fulfillment places-----") - add_fulfillment_request = get_add_fulfillment_request(product_name, "store2") - operation = await ProductServiceAsyncClient().add_fulfillment_places( - add_fulfillment_request - ) - # This operation doesn't have result or errors. So GoogleAPICallError will be raised. - try: - await operation.result() - except GoogleAPICallError: - pass - - get_product(product_name) - delete_product(product_name) - - -create_product(product_id) - -asyncio.run(add_places(product_name)) diff --git a/samples/interactive-tutorials/product/add_fulfillment_places_test.py b/samples/interactive-tutorials/product/add_fulfillment_places_test.py deleted file mode 100644 index 81c6af4d..00000000 --- a/samples/interactive-tutorials/product/add_fulfillment_places_test.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_add_fulfillment(): - output = str( - subprocess.check_output("python add_fulfillment_places.py", shell=True) - ) - - assert re.match(".*product is created.*", output) - assert re.match(".*add fulfillment request.*", output) - assert re.match(".*add fulfillment places.*", output) - assert re.match( - '.*get product response.*?fulfillment_info.*type_: "pickup-in-store".*?place_ids: "store1".*', - output, - ) - assert re.match( - '.*get product response.*?fulfillment_info.*type_: "pickup-in-store".*?place_ids: "store2".*', - output, - ) diff --git a/samples/interactive-tutorials/product/conftest.py b/samples/interactive-tutorials/product/conftest.py deleted file mode 100644 index 8cfb8596..00000000 --- a/samples/interactive-tutorials/product/conftest.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import pytest -import test_utils.prefixer - -prefixer = test_utils.prefixer.Prefixer( - "python-retail", "samples/interactive-tutorials/product" -) - - -@pytest.fixture(scope="session") -def table_id_prefix() -> str: - return prefixer.create_prefix() - - -@pytest.fixture(scope="session") -def bucket_name_prefix() -> str: - return prefixer.create_prefix() diff --git a/samples/interactive-tutorials/product/create_product.py b/samples/interactive-tutorials/product/create_product.py deleted file mode 100644 index 9d1884f6..00000000 --- a/samples/interactive-tutorials/product/create_product.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Create product in a catalog using Retail API -# -import random -import string - -import google.auth -from google.cloud.retail import ( - CreateProductRequest, - PriceInfo, - Product, - ProductServiceClient, -) -from google.cloud.retail_v2.types import product - -from setup_product.setup_cleanup import delete_product - -project_id = google.auth.default()[1] -default_branch_name = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/branches/default_branch" -) -generated_product_id = "".join(random.sample(string.ascii_lowercase, 8)) - - -# generate product to create -def generate_product() -> Product: - price_info = PriceInfo() - price_info.price = 30.0 - price_info.original_price = 35.5 - price_info.currency_code = "USD" - return product.Product( - title="Nest Mini", - type_=product.Product.Type.PRIMARY, - categories=["Speakers and displays"], - brands=["Google"], - price_info=price_info, - availability="IN_STOCK", - ) - - -# get create product request -def get_create_product_request(product_to_create: Product, product_id: str) -> object: - create_product_request = CreateProductRequest() - create_product_request.product = product_to_create - create_product_request.product_id = product_id - create_product_request.parent = default_branch_name - - print("---create product request---") - print(create_product_request) - - return create_product_request - - -# call the Retail API to create product -def create_product(product_id: str): - create_product_request = get_create_product_request(generate_product(), product_id) - product_created = ProductServiceClient().create_product(create_product_request) - - print("---created product:---") - print(product_created) - return product_created - - -# create a product -created_product = create_product(generated_product_id) -# delete created product -delete_product(created_product.name) diff --git a/samples/interactive-tutorials/product/create_product_test.py b/samples/interactive-tutorials/product/create_product_test.py deleted file mode 100644 index de2a263e..00000000 --- a/samples/interactive-tutorials/product/create_product_test.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_create_product(): - output = str(subprocess.check_output("python create_product.py", shell=True)) - - assert re.match(".*create product request.*", output) - assert re.match(".*created product.*", output) - assert re.match( - '.*name: "projects/.+/locations/global/catalogs/default_catalog/branches/0/products/.*', - output, - ) - assert re.match('.*title: "Nest Mini".*', output) - assert re.match(".*product.*was deleted.*", output) diff --git a/samples/interactive-tutorials/product/crud_product.py b/samples/interactive-tutorials/product/crud_product.py deleted file mode 100644 index 6f1df46f..00000000 --- a/samples/interactive-tutorials/product/crud_product.py +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Create, update, get and delete product in a catalog using Retail API. -# -import random -import string - -import google.auth -from google.cloud.retail import ( - CreateProductRequest, - DeleteProductRequest, - GetProductRequest, - PriceInfo, - Product, - ProductServiceClient, - UpdateProductRequest, -) -from google.cloud.retail_v2.types import product - -project_id = google.auth.default()[1] -default_branch_name = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/branches/default_branch" -) -product_id = "".join(random.sample(string.ascii_lowercase, 8)) -product_name = f"{default_branch_name}/products/{product_id}" - - -# generate product for create -def generate_product() -> Product: - price_info = PriceInfo() - price_info.price = 30.0 - price_info.original_price = 35.5 - price_info.currency_code = "USD" - return product.Product( - title="Nest Mini", - type_=product.Product.Type.PRIMARY, - categories=["Speakers and displays"], - brands=["Google"], - price_info=price_info, - availability="IN_STOCK", - ) - - -# generate product for update -def generate_product_for_update() -> Product: - price_info = PriceInfo() - price_info.price = 20.0 - price_info.original_price = 25.5 - price_info.currency_code = "EUR" - return product.Product( - id=product_id, - name=product_name, - title="Updated Nest Mini", - type_=product.Product.Type.PRIMARY, - categories=["Updated Speakers and displays"], - brands=["Updated Google"], - availability="OUT_OF_STOCK", - price_info=price_info, - ) - - -# create product -def create_product() -> object: - create_product_request = CreateProductRequest() - create_product_request.product = generate_product() - create_product_request.product_id = product_id - create_product_request.parent = default_branch_name - - print("---create product request---") - print(create_product_request) - - product_created = ProductServiceClient().create_product(create_product_request) - print("---created product:---") - print(product_created) - return product_created - - -# get product -def get_product() -> object: - get_product_request = GetProductRequest() - get_product_request.name = product_name - - print("---get product request---") - print(get_product_request) - - get_product_response = ProductServiceClient().get_product(get_product_request) - - print("---get product response:---") - print(get_product_response) - return get_product_response - - -# update product -def update_product(): - update_product_request = UpdateProductRequest() - update_product_request.product = generate_product_for_update() - update_product_request.allow_missing = True - - print("---update product request---") - print(update_product_request) - - updated_product = ProductServiceClient().update_product(update_product_request) - print("---updated product---:") - print(updated_product) - return updated_product - - -# delete product -def delete_product(): - delete_product_request = DeleteProductRequest() - delete_product_request.name = product_name - - print("---delete product request---") - print(delete_product_request) - - ProductServiceClient().delete_product(delete_product_request) - - print("deleting product " + product_name) - print("---product was deleted:---") - - -# call the methods -create_product() -get_product() -update_product() -delete_product() diff --git a/samples/interactive-tutorials/product/crud_product_test.py b/samples/interactive-tutorials/product/crud_product_test.py deleted file mode 100644 index fbea8034..00000000 --- a/samples/interactive-tutorials/product/crud_product_test.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_add_fulfillment(): - output = str(subprocess.check_output("python crud_product.py", shell=True)) - - assert re.match(".*create product request.*", output) - assert re.match(".*create product request.*", output) - assert re.match('.*create product request.*?title: "Nest Mini".*', output) - assert re.match(".*created product.*", output) - assert re.match('.*created product.*?title: "Nest Mini".*', output) - - assert re.match(".*get product request.*", output) - assert re.match(".*get product response.*", output) - - assert re.match(".*update product request.*", output) - assert re.match('.*update product request.*?title: "Updated Nest Mini.*', output) - assert re.match(".*updated product.*?title.*?Updated Nest Mini.*", output) - assert re.match(".*updated product.*?brands.*?Updated Google.*", output) - assert re.match(".*updated product.*?price.*?20.*", output) - assert re.match(".*product was deleted.*", output) diff --git a/samples/interactive-tutorials/product/delete_product.py b/samples/interactive-tutorials/product/delete_product.py deleted file mode 100644 index 3b182246..00000000 --- a/samples/interactive-tutorials/product/delete_product.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Delete product from a catalog using Retail API. -# -import random -import string - -import google.auth -from google.cloud.retail import DeleteProductRequest, ProductServiceClient - -from setup_product.setup_cleanup import create_product - -project_id = google.auth.default()[1] -default_branch_name = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/branches/default_branch" -) -product_id = "".join(random.sample(string.ascii_lowercase, 8)) - - -# get delete product request -def get_delete_product_request(product_name: str): - delete_product_request = DeleteProductRequest() - delete_product_request.name = product_name - - print("---delete product request---") - print(delete_product_request) - - return delete_product_request - - -# call the Retail API to delete product -def delete_product(product_name: str): - delete_product_request = get_delete_product_request(product_name) - ProductServiceClient().delete_product(delete_product_request) - - print("deleting product " + product_name) - print("---product was deleted:---") - - -# delete created product -created_product_name = create_product(product_id).name -delete_product(created_product_name) diff --git a/samples/interactive-tutorials/product/delete_product_test.py b/samples/interactive-tutorials/product/delete_product_test.py deleted file mode 100644 index 7bd36074..00000000 --- a/samples/interactive-tutorials/product/delete_product_test.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_delete_product(): - output = str(subprocess.check_output("python delete_product.py", shell=True)) - - assert re.match(".*delete product request.*", output) - assert re.match( - '.*name: "projects/.+/locations/global/catalogs/default_catalog/branches/0/products/.*', - output, - ) - assert re.match( - ".*deleting product projects/.+/locations/global/catalogs/default_catalog/branches/0/products/.*", - output, - ) - assert re.match(".*product was deleted.*", output) diff --git a/samples/interactive-tutorials/product/get_product.py b/samples/interactive-tutorials/product/get_product.py deleted file mode 100644 index fc5702bd..00000000 --- a/samples/interactive-tutorials/product/get_product.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Get product from a catalog using Retail API. -# -import random -import string - -import google.auth -from google.cloud.retail import GetProductRequest, ProductServiceClient - -from setup_product.setup_cleanup import create_product, delete_product - -project_id = google.auth.default()[1] -product_id = "".join(random.sample(string.ascii_lowercase, 8)) - - -# get product request -def get_product_request(product_name: str) -> object: - get_product_request = GetProductRequest() - get_product_request.name = product_name - - print("---get product request---") - print(get_product_request) - - return get_product_request - - -# call the Retail API to get product -def get_product(product_name: str): - # get a product from catalog - get_request = get_product_request(product_name) - get_product_response = ProductServiceClient().get_product(get_request) - - print("---get product response:---") - print(get_product_response) - return get_product_response - - -# create a product -created_product = create_product(product_id) -# get created product -product = get_product(created_product.name) -# remove created product -delete_product(created_product.name) diff --git a/samples/interactive-tutorials/product/get_product_test.py b/samples/interactive-tutorials/product/get_product_test.py deleted file mode 100644 index 3f50af0a..00000000 --- a/samples/interactive-tutorials/product/get_product_test.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_get_product(): - output = str(subprocess.check_output("python get_product.py", shell=True)) - - assert re.match(".*get product request.*", output) - assert re.match(".*get product response.*", output) - assert re.match( - ".*get product response.*?name.*?projects/.*/locations/global/catalogs/default_catalog/branches/0/products/.*", - output, - ) - assert re.match(".*get product response.*?title.*?Nest Mini.*", output) - assert re.match(".*product.*was deleted.*", output) diff --git a/samples/interactive-tutorials/product/import_products_big_query_table.py b/samples/interactive-tutorials/product/import_products_big_query_table.py deleted file mode 100644 index c55aef32..00000000 --- a/samples/interactive-tutorials/product/import_products_big_query_table.py +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import argparse - -import google.auth - -project_id = google.auth.default()[1] - - -def main(project_id, dataset_id, table_id): - # TODO: Set project_id to your Google Cloud Platform project ID. - # project_id = "my-project" - - # TODO: Set dataset_id - # dataset_id = "products" - - # TODO: Set table_id - # table_id = "products" - - # Import products into a catalog from big query table using Retail API - import time - - from google.cloud.retail import ( - BigQuerySource, - ImportProductsRequest, - ProductInputConfig, - ProductServiceClient, - ) - - default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog/branches/default_branch" - - # TO CHECK ERROR HANDLING USE THE TABLE WITH INVALID PRODUCTS: - # table_id = "products_some_invalid" - - # get import products from big query request - def get_import_products_big_query_request(reconciliation_mode): - # TO CHECK ERROR HANDLING PASTE THE INVALID CATALOG NAME HERE: - # default_catalog = "invalid_catalog_name" - big_query_source = BigQuerySource() - big_query_source.project_id = project_id - big_query_source.dataset_id = dataset_id - big_query_source.table_id = table_id - big_query_source.data_schema = "product" - - input_config = ProductInputConfig() - input_config.big_query_source = big_query_source - - import_request = ImportProductsRequest() - import_request.parent = default_catalog - import_request.reconciliation_mode = reconciliation_mode - import_request.input_config = input_config - - print("---import products from big query table request---") - print(import_request) - - return import_request - - # call the Retail API to import products - def import_products_from_big_query(): - # TRY THE FULL RECONCILIATION MODE HERE: - reconciliation_mode = ImportProductsRequest.ReconciliationMode.INCREMENTAL - - import_big_query_request = get_import_products_big_query_request( - reconciliation_mode - ) - big_query_operation = ProductServiceClient().import_products( - import_big_query_request - ) - - print("---the operation was started:----") - print(big_query_operation.operation.name) - - while not big_query_operation.done(): - print("---please wait till operation is done---") - time.sleep(30) - print("---import products operation is done---") - - if big_query_operation.metadata is not None: - print("---number of successfully imported products---") - print(big_query_operation.metadata.success_count) - print("---number of failures during the importing---") - print(big_query_operation.metadata.failure_count) - else: - print("---operation.metadata is empty---") - - if big_query_operation.result is not None: - print("---operation result:---") - print(big_query_operation.result()) - else: - print("---operation.result is empty---") - - import_products_from_big_query() - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("dataset_id", nargs="?", default="products") - parser.add_argument("table_id", nargs="?", default="products") - args = parser.parse_args() - main(project_id, args.dataset_id, args.table_id) diff --git a/samples/interactive-tutorials/product/import_products_bq_test.py b/samples/interactive-tutorials/product/import_products_bq_test.py deleted file mode 100644 index a388365b..00000000 --- a/samples/interactive-tutorials/product/import_products_bq_test.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - -from setup_product.setup_cleanup import ( - create_bq_dataset, - create_bq_table, - delete_bq_table, - upload_data_to_bq_table, -) - - -def test_import_products_bq(table_id_prefix): - dataset = "products" - valid_products_table = f"{table_id_prefix}products" - product_schema = "../resources/product_schema.json" - valid_products_source_file = "../resources/products.json" - - create_bq_dataset(dataset) - create_bq_table(dataset, valid_products_table, product_schema) - upload_data_to_bq_table( - dataset, valid_products_table, valid_products_source_file, product_schema - ) - - output = str( - subprocess.check_output( - f"python import_products_big_query_table.py {dataset} {valid_products_table}", - shell=True, - ) - ) - - delete_bq_table(dataset, valid_products_table) - - assert re.match(".*import products from big query table request.*", output) - assert re.match(".*the operation was started.*", output) - assert re.match( - ".*projects/.*/locations/global/catalogs/default_catalog/branches/0/operations/import-products.*", - output, - ) - - assert re.match(".*number of successfully imported products.*?316.*", output) - assert re.match(".*number of failures during the importing.*?0.*", output) diff --git a/samples/interactive-tutorials/product/import_products_gcs.py b/samples/interactive-tutorials/product/import_products_gcs.py deleted file mode 100644 index cd31754d..00000000 --- a/samples/interactive-tutorials/product/import_products_gcs.py +++ /dev/null @@ -1,114 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import argparse -import os - - -def main(bucket_name): - # Import products from using Retail API. - # - import time - - import google.auth - from google.cloud.retail import ( - GcsSource, - ImportErrorsConfig, - ImportProductsRequest, - ProductInputConfig, - ProductServiceClient, - ) - - project_id = google.auth.default()[1] - - # TODO: Developer set the bucket_name - # bucket_name = os.environ["BUCKET_NAME"] - - # You can change the branch here. The "default_branch" is set to point to the branch "0" - default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog/branches/default_branch" - - gcs_bucket = f"gs://{bucket_name}" - gcs_errors_bucket = f"{gcs_bucket}/error" - gcs_products_object = "products.json" - - # TO CHECK ERROR HANDLING USE THE JSON WITH INVALID PRODUCT - # gcs_products_object = "products_some_invalid.json" - - def get_import_products_gcs_request(gcs_object_name: str): - # TO CHECK ERROR HANDLING PASTE THE INVALID CATALOG NAME HERE: - # default_catalog = "invalid_catalog_name" - gcs_source = GcsSource() - gcs_source.input_uris = [f"{gcs_bucket}/{gcs_object_name}"] - - input_config = ProductInputConfig() - input_config.gcs_source = gcs_source - print("GRS source:") - print(gcs_source.input_uris) - - errors_config = ImportErrorsConfig() - errors_config.gcs_prefix = gcs_errors_bucket - - import_request = ImportProductsRequest() - import_request.parent = default_catalog - import_request.reconciliation_mode = ( - ImportProductsRequest.ReconciliationMode.INCREMENTAL - ) - import_request.input_config = input_config - import_request.errors_config = errors_config - - print("---import products from google cloud source request---") - print(import_request) - - return import_request - - # call the Retail API to import products - def import_products_from_gcs(): - import_gcs_request = get_import_products_gcs_request(gcs_products_object) - gcs_operation = ProductServiceClient().import_products(import_gcs_request) - - print("---the operation was started:----") - print(gcs_operation.operation.name) - - while not gcs_operation.done(): - print("---please wait till operation is done---") - time.sleep(30) - print("---import products operation is done---") - - if gcs_operation.metadata is not None: - print("---number of successfully imported products---") - print(gcs_operation.metadata.success_count) - print("---number of failures during the importing---") - print(gcs_operation.metadata.failure_count) - else: - print("---operation.metadata is empty---") - - if gcs_operation.result is not None: - print("---operation result:---") - print(gcs_operation.result()) - else: - print("---operation.result is empty---") - - # The imported products needs to be indexed in the catalog before they become available for search. - print( - "Wait 2-5 minutes till products become indexed in the catalog, after that they will be available for search" - ) - - import_products_from_gcs() - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("bucket_name", nargs="?", default=os.environ["BUCKET_NAME"]) - args = parser.parse_args() - main(args.bucket_name) diff --git a/samples/interactive-tutorials/product/import_products_gcs_test.py b/samples/interactive-tutorials/product/import_products_gcs_test.py deleted file mode 100644 index 2b79b2fd..00000000 --- a/samples/interactive-tutorials/product/import_products_gcs_test.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - -from setup_product.setup_cleanup import create_bucket, delete_bucket, upload_blob - - -def test_import_products_gcs(bucket_name_prefix): - # gcs buckets have a limit of 63 characters. Get the last 60 characters - bucket_name = bucket_name_prefix[63:] - - try: - create_bucket(bucket_name) - upload_blob(bucket_name, "../resources/products.json") - - output = str( - subprocess.check_output( - f"python import_products_gcs.py {bucket_name}", shell=True - ) - ) - finally: - delete_bucket(bucket_name) - - assert re.match(".*import products from google cloud source request.*", output) - assert re.match('.*input_uris: "gs://.*/products.json".*', output) - assert re.match(".*the operation was started.*", output) - assert re.match( - ".*projects/.*/locations/global/catalogs/default_catalog/branches/0/operations/import-products.*", - output, - ) - - assert re.match(".*number of successfully imported products.*?316.*", output) - assert re.match(".*number of failures during the importing.*?0.*", output) diff --git a/samples/interactive-tutorials/product/import_products_inline_source.py b/samples/interactive-tutorials/product/import_products_inline_source.py deleted file mode 100644 index f2ca22aa..00000000 --- a/samples/interactive-tutorials/product/import_products_inline_source.py +++ /dev/null @@ -1,145 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Import products into a catalog from inline source using Retail API -# -import random -import string -import time - -import google.auth -from google.cloud.retail import ( - ColorInfo, - FulfillmentInfo, - ImportProductsRequest, - PriceInfo, - Product, - ProductInlineSource, - ProductInputConfig, - ProductServiceClient, -) -from google.protobuf.field_mask_pb2 import FieldMask - -project_id = google.auth.default()[1] - -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog/branches/default_branch" - - -# prepare product to import as inline source -def get_products(): - products = [] - product1 = Product() - product2 = Product() - - price_info1 = PriceInfo() - price_info1.price = 16.0 - price_info1.original_price = 45.0 - price_info1.cost = 12.0 - price_info1.currency_code = "USD" - - color_info1 = ColorInfo() - color_info1.color_families = ["Blue"] - color_info1.colors = ["Light blue", "Blue", "Dark blue"] - - fulfillment_info1 = FulfillmentInfo() - fulfillment_info1.type_ = "pickup-in-store" - fulfillment_info1.place_ids = ["store1", "store2"] - - field_mask1 = FieldMask(paths=["title", "categories", "price_info", "color_info"]) - - # TO CHECK ERROR HANDLING COMMENT OUT THE PRODUCT TITLE HERE: - product1.title = "#IamRemarkable Pen" - product1.id = "".join(random.sample(string.ascii_lowercase, 8)) - product1.categories = ["Office"] - product1.uri = "https://shop.googlemerchandisestore.com/Google+Redesign/Office/IamRemarkable+Pen" - product1.brands = ["#IamRemarkable"] - product1.price_info = price_info1 - product1.color_info = color_info1 - product1.fulfillment_info = [fulfillment_info1] - product1.retrievable_fields = field_mask1 - - price_info2 = PriceInfo() - price_info2.price = 35.0 - price_info2.original_price = 45.0 - price_info2.cost = 12.0 - price_info2.currency_code = "USD" - - color_info2 = ColorInfo() - color_info2.color_families = ["Blue"] - color_info2.colors = ["Sky blue"] - - fulfillment_info2 = FulfillmentInfo() - fulfillment_info2.type_ = "pickup-in-store" - fulfillment_info2.place_ids = ["store2", "store3"] - - field_mask2 = FieldMask(paths=["title", "categories", "price_info", "color_info"]) - - product2.title = "Android Embroidered Crewneck Sweater" - product2.id = "".join(random.sample(string.ascii_lowercase, 8)) - product2.categories = ["Apparel"] - product2.uri = "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Embroidered+Crewneck+Sweater" - product2.brands = ["Android"] - product2.price_info = price_info2 - product2.color_info = color_info2 - product2.fulfillment_info = [fulfillment_info2] - product2.retrievable_fields = field_mask2 - - products.append(product1) - products.append(product2) - return products - - -# get import products from inline source request -def get_import_products_inline_request(products_to_import): - # TO CHECK ERROR HANDLING PASTE THE INVALID CATALOG NAME HERE: - # default_catalog = "invalid_catalog_name" - inline_source = ProductInlineSource() - inline_source.products = products_to_import - - input_config = ProductInputConfig() - input_config.product_inline_source = inline_source - - import_request = ImportProductsRequest() - import_request.parent = default_catalog - import_request.input_config = input_config - - print("---import products from inline source request---") - print(import_request) - - return import_request - - -# call the Retail API to import products -def import_products_from_inline_source(): - import_request = get_import_products_inline_request(get_products()) - import_operation = ProductServiceClient().import_products(import_request) - - print("---the operation was started:----") - print(import_operation.operation.name) - - while not import_operation.done(): - print("---please wait till operation is done---") - time.sleep(5) - print("---import products operation is done---") - - if import_operation.metadata is not None: - print("---number of successfully imported products---") - print(import_operation.metadata.success_count) - print("---number of failures during the importing---") - print(import_operation.metadata.failure_count) - else: - print("---operation.metadata is empty---") - - -import_products_from_inline_source() diff --git a/samples/interactive-tutorials/product/import_products_inline_test.py b/samples/interactive-tutorials/product/import_products_inline_test.py deleted file mode 100644 index a504d99b..00000000 --- a/samples/interactive-tutorials/product/import_products_inline_test.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_import_products_gcs(): - output = str( - subprocess.check_output("python import_products_inline_source.py", shell=True) - ) - - assert re.match(".*import products from inline source request.*", output) - assert re.match(".*the operation was started.*", output) - assert re.match( - ".*projects/.*/locations/global/catalogs/default_catalog/branches/0/operations/import-products.*", - output, - ) - - assert re.match(".*number of successfully imported products.*?2.*", output) - assert re.match(".*number of failures during the importing.*?0.*", output) diff --git a/samples/interactive-tutorials/product/noxfile.py b/samples/interactive-tutorials/product/noxfile.py deleted file mode 100644 index de104dbc..00000000 --- a/samples/interactive-tutorials/product/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# 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. - -from __future__ import print_function - -import glob -import os -from pathlib import Path -import sys -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/samples/interactive-tutorials/product/noxfile_config.py b/samples/interactive-tutorials/product/noxfile_config.py deleted file mode 100644 index 8008bc71..00000000 --- a/samples/interactive-tutorials/product/noxfile_config.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2020 Google LLC -# -# 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. - -# Default TEST_CONFIG_OVERRIDE for python repos. - -# The source of truth: -# https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/noxfile_config.py - -TEST_CONFIG_OVERRIDE = { - # You can opt out from the test for specific Python versions. - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {"BUCKET_NAME": "retail-interactive-tutorials"}, -} diff --git a/samples/interactive-tutorials/product/remove_fulfillment_places.py b/samples/interactive-tutorials/product/remove_fulfillment_places.py deleted file mode 100644 index b1c8c5da..00000000 --- a/samples/interactive-tutorials/product/remove_fulfillment_places.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Remove place IDs using Retail API. -# -import asyncio -import random -import string - -from google.api_core.exceptions import GoogleAPICallError -from google.cloud.retail import ( - ProductServiceAsyncClient, - RemoveFulfillmentPlacesRequest, -) - -from setup_product.setup_cleanup import create_product, delete_product, get_product - -product_id = "".join(random.sample(string.ascii_lowercase, 8)) - - -# remove fulfillment request -def get_remove_fulfillment_request( - product_name: str, store_id -) -> RemoveFulfillmentPlacesRequest: - remove_fulfillment_request = RemoveFulfillmentPlacesRequest() - remove_fulfillment_request.product = product_name - remove_fulfillment_request.type_ = "pickup-in-store" - remove_fulfillment_request.place_ids = [store_id] - remove_fulfillment_request.allow_missing = True - - # To send an out-of-order request assign the invalid remove_time here: - # import datetime - # remove_fulfillment_request.remove_time = datetime.datetime.now() - datetime.timedelta(days=1) - - print("---remove fulfillment request---") - print(remove_fulfillment_request) - - return remove_fulfillment_request - - -async def remove_places(product_name: str): - print("------remove fulfillment places-----") - remove_fulfillment_request = get_remove_fulfillment_request(product_name, "store0") - operation = await ProductServiceAsyncClient().remove_fulfillment_places( - remove_fulfillment_request - ) - # This operation doesn't have result or errors. So GoogleAPICallError will be raised. - try: - await operation.result() - except GoogleAPICallError: - pass - - get_product(product_name) - delete_product(product_name) - - -product = create_product(product_id) - -asyncio.run(remove_places(product.name)) diff --git a/samples/interactive-tutorials/product/remove_fulfillment_places_test.py b/samples/interactive-tutorials/product/remove_fulfillment_places_test.py deleted file mode 100644 index 1ad040a0..00000000 --- a/samples/interactive-tutorials/product/remove_fulfillment_places_test.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_add_fulfillment(): - output = str( - subprocess.check_output("python remove_fulfillment_places.py", shell=True) - ) - - assert re.match(".*product is created.*", output) - assert re.match(".*remove fulfillment request.*", output) - assert re.match(".*remove fulfillment places.*", output) - assert re.match( - '.*get product response.*?fulfillment_info.*type_: "pickup-in-store".*?place_ids: "store1".*', - output, - ) - assert not re.search(".*get product response.*?fulfillment_info.*store0.*", output) diff --git a/samples/interactive-tutorials/product/requirements-test.txt b/samples/interactive-tutorials/product/requirements-test.txt deleted file mode 100644 index 0e59cb53..00000000 --- a/samples/interactive-tutorials/product/requirements-test.txt +++ /dev/null @@ -1,3 +0,0 @@ -pytest==7.4.0 -pytest-xdist==3.3.1 -google-cloud-testutils==1.3.3 diff --git a/samples/interactive-tutorials/product/requirements.txt b/samples/interactive-tutorials/product/requirements.txt deleted file mode 100644 index 2c895971..00000000 --- a/samples/interactive-tutorials/product/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -google==3.0.0 -google-cloud-retail==1.16.2 -google-cloud-storage==2.10.0 -google-cloud-bigquery==3.11.4 \ No newline at end of file diff --git a/samples/interactive-tutorials/product/set_inventory.py b/samples/interactive-tutorials/product/set_inventory.py deleted file mode 100644 index e95ddc16..00000000 --- a/samples/interactive-tutorials/product/set_inventory.py +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Updating inventory information using Retail API. -# -import asyncio -import random -import string - -from google.api_core.exceptions import GoogleAPICallError -import google.auth -from google.cloud.retail import ( - FulfillmentInfo, - PriceInfo, - Product, - ProductServiceAsyncClient, - SetInventoryRequest, -) -from google.protobuf.field_mask_pb2 import FieldMask - -from setup_product.setup_cleanup import create_product, delete_product, get_product - -project_id = google.auth.default()[1] -product_id = "".join(random.sample(string.ascii_lowercase, 8)) -product_name = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/branches/default_branch/products/" - + product_id -) - - -# product inventory info -def get_product_with_inventory_info(product_name: str) -> Product: - price_info = PriceInfo() - price_info.price = 15.0 - price_info.original_price = 60.0 - price_info.cost = 8.0 - price_info.currency_code = "USD" - - fulfillment_info = FulfillmentInfo() - fulfillment_info.type_ = "pickup-in-store" - fulfillment_info.place_ids = ["store1", "store2"] - - product = Product() - product.name = product_name - product.price_info = price_info - product.fulfillment_info = [fulfillment_info] - product.availability = "IN_STOCK" - - return product - - -# set inventory request -def get_set_inventory_request(product_name: str) -> SetInventoryRequest: - set_mask = FieldMask( - paths=["price_info", "availability", "fulfillment_info", "available_quantity"] - ) - - set_inventory_request = SetInventoryRequest() - set_inventory_request.inventory = get_product_with_inventory_info(product_name) - set_inventory_request.allow_missing = True - set_inventory_request.set_mask = set_mask - - # To send an out-of-order request assign the invalid set_time here: - # import datetime - # set_inventory_request.set_time = datetime.datetime.now() - datetime.timedelta(days=1) - - print("---set inventory request---") - print(set_inventory_request) - - return set_inventory_request - - -# set inventory to product -def set_inventory(product_name: str): - set_inventory_request = get_set_inventory_request(product_name) - return ProductServiceAsyncClient().set_inventory(set_inventory_request) - - -async def set_inventory_and_remove_product(product_name: str): - operation = await set_inventory(product_name) - # This operation doesn't have result or errors. So GoogleAPICallError will be raised. - try: - await operation.result() - except GoogleAPICallError: - pass - - get_product(product_name) - delete_product(product_name) - - -product = create_product(product_id) -asyncio.run(set_inventory_and_remove_product(product.name)) diff --git a/samples/interactive-tutorials/product/set_inventory_test.py b/samples/interactive-tutorials/product/set_inventory_test.py deleted file mode 100644 index f3184ed3..00000000 --- a/samples/interactive-tutorials/product/set_inventory_test.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_set_inventory(): - output = str(subprocess.check_output("python set_inventory.py", shell=True)) - print(output) - assert re.match(".*product is created.*", output) - assert re.match( - '.*name: "projects/.*/locations/global/catalogs/default_catalog/branches/0/products.*', - output, - ) - assert re.match(".*set inventory request.*", output) - assert re.match( - '.*get product response.*?fulfillment_info.*type_: "pickup-in-store".*?place_ids: "store1".*', - output, - ) - assert re.match( - '.*get product response.*?fulfillment_info.*type_: "pickup-in-store".*?place_ids: "store2".*', - output, - ) - assert re.match( - ".*product projects/.*/locations/global/catalogs/default_catalog/branches/0/products.* was deleted.*", - output, - ) diff --git a/samples/interactive-tutorials/product/setup_product/products_create_bigquery_table.py b/samples/interactive-tutorials/product/setup_product/products_create_bigquery_table.py deleted file mode 100644 index 493893bf..00000000 --- a/samples/interactive-tutorials/product/setup_product/products_create_bigquery_table.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -from setup_cleanup import create_bq_dataset, create_bq_table, \ - upload_data_to_bq_table - -dataset = "products" -valid_products_table = "products" -invalid_products_table = "products_some_invalid" -product_schema = "../resources/product_schema.json" -valid_products_source_file = "../resources/products.json" -invalid_products_source_file = "../resources/products_some_invalid.json" - -create_bq_dataset(dataset) -create_bq_table(dataset, valid_products_table, product_schema) -upload_data_to_bq_table(dataset, valid_products_table, - valid_products_source_file, product_schema) -create_bq_table(dataset, invalid_products_table, product_schema) -upload_data_to_bq_table(dataset, invalid_products_table, - invalid_products_source_file, product_schema) diff --git a/samples/interactive-tutorials/product/setup_product/products_create_gcs_bucket.py b/samples/interactive-tutorials/product/setup_product/products_create_gcs_bucket.py deleted file mode 100644 index ac6c7a82..00000000 --- a/samples/interactive-tutorials/product/setup_product/products_create_gcs_bucket.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import datetime -from pathlib import Path, PurePath - -import google.auth - -from setup_cleanup import create_bucket, upload_blob - -project_id = google.auth.default()[1] -timestamp_ = datetime.datetime.now().timestamp().__round__() -BUCKET_NAME = f"{project_id}_products_{timestamp_}" - - -def create_gcs_bucket(bucket_name=BUCKET_NAME): - create_bucket(bucket_name) - - path_to_resources_dir = PurePath( - Path.home(), "cloudshell_open/python-retail/samples/interactive-tutorials/resources" - ) - upload_blob(bucket_name, str(path_to_resources_dir / "products.json")) - upload_blob(bucket_name, str(path_to_resources_dir / "products_some_invalid.json")) - print(f"\nThe gcs bucket {bucket_name} was created") - - -if __name__ == "__main__": - create_gcs_bucket() diff --git a/samples/interactive-tutorials/product/setup_product/setup_cleanup.py b/samples/interactive-tutorials/product/setup_product/setup_cleanup.py deleted file mode 100644 index 8a7215fa..00000000 --- a/samples/interactive-tutorials/product/setup_product/setup_cleanup.py +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import json -import re - -from google.api_core.exceptions import NotFound -import google.auth - -from google.cloud import bigquery -from google.cloud import storage -from google.cloud.retail import CreateProductRequest, DeleteProductRequest, \ - FulfillmentInfo, GetProductRequest, PriceInfo, Product, ProductServiceClient - -project_id = google.auth.default()[1] -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog" -default_branch_name = f"projects/{project_id}/locations/global/catalogs/default_catalog/branches/default_branch" - - -def generate_product() -> Product: - price_info = PriceInfo() - price_info.price = 30.0 - price_info.original_price = 35.5 - price_info.currency_code = "USD" - fulfillment_info = FulfillmentInfo() - fulfillment_info.type_ = "pickup-in-store" - fulfillment_info.place_ids = ["store0", "store1"] - return Product( - title='Nest Mini', - type_=Product.Type.PRIMARY, - categories=['Speakers and displays'], - brands=['Google'], - price_info=price_info, - fulfillment_info=[fulfillment_info], - availability="IN_STOCK", - ) - - -def create_product(product_id: str) -> object: - create_product_request = CreateProductRequest() - create_product_request.product = generate_product() - create_product_request.product_id = product_id - create_product_request.parent = default_branch_name - - created_product = ProductServiceClient().create_product( - create_product_request) - print("---product is created:---") - print(created_product) - - return created_product - - -def delete_product(product_name: str): - delete_product_request = DeleteProductRequest() - delete_product_request.name = product_name - ProductServiceClient().delete_product(delete_product_request) - - print("---product " + product_name + " was deleted:---") - - -def get_product(product_name: str): - get_product_request = GetProductRequest() - get_product_request.name = product_name - try: - product = ProductServiceClient().get_product(get_product_request) - print("---get product response:---") - print(product) - return product - except NotFound as e: - print(e.message) - return e.message - - -def try_to_delete_product_if_exists(product_name: str): - get_product_request = GetProductRequest() - get_product_request.name = product_name - delete_product_request = DeleteProductRequest() - delete_product_request.name = product_name - print( - "---delete product from the catalog, if the product already exists---") - try: - product = ProductServiceClient().get_product(get_product_request) - ProductServiceClient().delete_product(product.name) - except NotFound as e: - print(e.message) - - -def create_bucket(bucket_name: str): - """Create a new bucket in Cloud Storage""" - print("Creating new bucket:" + bucket_name) - buckets_in_your_project = list_buckets() - if bucket_name in buckets_in_your_project: - print(f"Bucket {bucket_name} already exists") - else: - storage_client = storage.Client() - bucket = storage_client.bucket(bucket_name) - bucket.storage_class = "STANDARD" - new_bucket = storage_client.create_bucket(bucket, location="us") - print( - f"Created bucket {new_bucket.name} in {new_bucket.location} with storage class {new_bucket.storage_class}" - ) - return new_bucket - - -def delete_bucket(bucket_name: str): - """Delete a bucket from Cloud Storage""" - print(f"Deleting bucket name: {bucket_name}") - storage_client = storage.Client() - buckets_in_your_project = list_buckets() - if bucket_name in buckets_in_your_project: - blobs = storage_client.list_blobs(bucket_name) - for blob in blobs: - blob.delete() - bucket = storage_client.get_bucket(bucket_name) - bucket.delete() - print(f"Bucket {bucket.name} is deleted") - else: - print(f"Bucket {bucket_name} is not found") - - -def list_buckets(): - """Lists all buckets""" - bucket_list = [] - storage_client = storage.Client() - buckets = storage_client.list_buckets() - for bucket in buckets: - bucket_list.append(bucket.name) - return bucket_list - - -def upload_blob(bucket_name, source_file_name): - """Uploads a file to the bucket.""" - # The path to your file to upload - # source_file_name = "local/path/to/file" - print(f"Uploading data from {source_file_name} to the bucket {bucket_name}") - storage_client = storage.Client() - bucket = storage_client.bucket(bucket_name) - object_name = re.search('resources/(.*?)$', source_file_name).group(1) - blob = bucket.blob(object_name) - blob.upload_from_filename(source_file_name) - - print( - f"File {source_file_name} uploaded to {object_name}." - ) - - -def create_bq_dataset(dataset_name): - """Create a BigQuery dataset""" - full_dataset_id = f"{project_id}.{dataset_name}" - bq = bigquery.Client() - print(f"Creating dataset {full_dataset_id}") - try: - bq.get_dataset(full_dataset_id) - print(f"dataset {full_dataset_id} already exists") - except NotFound: - # Construct a Dataset object to send to the API. - dataset = bigquery.Dataset(full_dataset_id) - dataset.location = "US" - bq.create_dataset(dataset) - print("dataset is created") - - -def create_bq_table(dataset, table_name, schema_file_path): - """Create a BigQuery table""" - full_table_id = f"{project_id}.{dataset}.{table_name}" - bq = bigquery.Client() - print(f"Check if BQ table {full_table_id} exists") - try: - bq.get_table(full_table_id) - print(f"table {full_table_id} exists and will be deleted") - delete_bq_table(dataset, table_name) - except NotFound: - print(f"table {full_table_id} does not exist") - # Construct a Table object to send to the API. - with open(schema_file_path, "rb") as schema: - schema_dict = json.load(schema) - table = bigquery.Table(full_table_id, schema=schema_dict) - bq.create_table(table) - print(f"table {full_table_id} is created") - - -def delete_bq_table(dataset, table_name): - full_table_id = f"{project_id}.{dataset}.{table_name}" - bq = bigquery.Client() - bq.delete_table(full_table_id, not_found_ok=True) - print(f"Table '{full_table_id}' is deleted.") - - -def upload_data_to_bq_table(dataset, table_name, source, schema_file_path): - """Upload data to the table from specified source file""" - full_table_id = f"{project_id}.{dataset}.{table_name}" - bq = bigquery.Client() - print(f"Uploading data from {source} to the table {full_table_id}") - with open(schema_file_path, "rb") as schema: - schema_dict = json.load(schema) - job_config = bigquery.LoadJobConfig( - source_format=bigquery.SourceFormat.NEWLINE_DELIMITED_JSON, - schema=schema_dict) - with open(source, "rb") as source_file: - job = bq.load_table_from_file(source_file, full_table_id, - job_config=job_config) - job.result() # Waits for the job to complete. - print("data was uploaded") diff --git a/samples/interactive-tutorials/product/update_product.py b/samples/interactive-tutorials/product/update_product.py deleted file mode 100644 index 21e82859..00000000 --- a/samples/interactive-tutorials/product/update_product.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - - -# Update product in a catalog using Retail API -# -import random -import string - -import google.auth -from google.cloud.retail import ( - PriceInfo, - Product, - ProductServiceClient, - UpdateProductRequest, -) -from google.cloud.retail_v2.types import product - -from setup_product.setup_cleanup import create_product, delete_product - -project_id = google.auth.default()[1] -default_branch_name = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/branches/default_branch" -) -generated_product_id = "".join(random.sample(string.ascii_lowercase, 8)) - - -# generate product for update -def generate_product_for_update(product_id: str) -> Product: - price_info = PriceInfo() - price_info.price = 20.0 - price_info.original_price = 25.5 - price_info.currency_code = "EUR" - return product.Product( - id=product_id, - name="projects/" - + project_id - + "/locations/global/catalogs/default_catalog/branches/default_branch/products/" - + product_id, - title="Updated Nest Mini", - type_=product.Product.Type.PRIMARY, - categories=["Updated Speakers and displays"], - brands=["Updated Google"], - availability="OUT_OF_STOCK", - price_info=price_info, - ) - - -# get update product request -def get_update_product_request(product_to_update: Product): - update_product_request = UpdateProductRequest() - update_product_request.product = product_to_update - update_product_request.allow_missing = True - # PASTE UPDATE MASK HERE: # the import FieldMask from google.protobuf.field_mask_pb2 is required - - print("---update product request---") - print(update_product_request) - - return update_product_request - - -# call the Retail API to update product -def update_product(original_product: Product): - # update product - updated_product = ProductServiceClient().update_product( - get_update_product_request(generate_product_for_update(original_product.id)) - ) - - print("---updated product---:") - print(updated_product) - return updated_product - - -# create product -created_product = create_product(generated_product_id) -# UPDATE PRODUCT -update_product(created_product) -# delete product -delete_product(created_product.name) diff --git a/samples/interactive-tutorials/product/update_product_test.py b/samples/interactive-tutorials/product/update_product_test.py deleted file mode 100644 index f0b22a0e..00000000 --- a/samples/interactive-tutorials/product/update_product_test.py +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import re -import subprocess - - -def test_add_fulfillment(): - output = str(subprocess.check_output("python update_product.py", shell=True)) - - assert re.match(".*product is created.*", output) - assert re.match(".*updated product.*", output) - assert re.match(".*updated product.*?title.*?Updated Nest Mini.*", output) - assert re.match(".*updated product.*?brands.*?Updated Google.*", output) - assert re.match(".*updated product.*?price.*?20.*", output) - assert re.match(".*product.*was deleted.*", output) diff --git a/samples/interactive-tutorials/resources/events_schema.json b/samples/interactive-tutorials/resources/events_schema.json deleted file mode 100644 index a52c0e56..00000000 --- a/samples/interactive-tutorials/resources/events_schema.json +++ /dev/null @@ -1,73 +0,0 @@ -[ - { - "fields":[ - { - "mode": "NULLABLE", - "name": "currencyCode", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "revenue", - "type": "FLOAT" - } - ], - "mode": "NULLABLE", - "name": "purchaseTransaction", - "type": "RECORD" - }, - { - "fields":[ - { - "mode": "NULLABLE", - "name": "quantity", - "type": "INTEGER" - }, - { - "fields":[ - { - "mode": "NULLABLE", - "name": "id", - "type": "STRING" - } - ], - "mode": "NULLABLE", - "name": "product", - "type": "RECORD" - } - ], - "mode": "REPEATED", - "name": "productDetails", - "type": "RECORD" - }, - { - "mode": "REQUIRED", - "name": "eventTime", - "type": "STRING" - }, - { - "mode": "REQUIRED", - "name": "visitorId", - "type": "STRING" - }, - { - "mode": "REQUIRED", - "name": "eventType", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "searchQuery", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "cartId", - "type": "STRING" - }, - { - "mode": "REPEATED", - "name": "pageCategories", - "type": "STRING" - } - ] \ No newline at end of file diff --git a/samples/interactive-tutorials/resources/product_schema.json b/samples/interactive-tutorials/resources/product_schema.json deleted file mode 100644 index 2dcc79f7..00000000 --- a/samples/interactive-tutorials/resources/product_schema.json +++ /dev/null @@ -1,317 +0,0 @@ -[ - { - "name": "name", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "id", - "type": "STRING", - "mode": "REQUIRED" - }, - { - "name": "type", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "primaryProductId", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "collectionMemberIds", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "gtin", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "categories", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "title", - "type": "STRING", - "mode": "REQUIRED" - }, - { - "name": "brands", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "description", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "languageCode", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "attributes", - "type": "RECORD", - "mode": "REPEATED", - "fields": [ - { - "name": "key", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "value", - "type": "RECORD", - "mode": "NULLABLE", - "fields": [ - { - "name": "text", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "numbers", - "type": "FLOAT", - "mode": "REPEATED" - }, - { - "name": "searchable", - "type": "BOOLEAN", - "mode": "NULLABLE" - }, - { - "name": "indexable", - "type": "BOOLEAN", - "mode": "NULLABLE" - } - ] - } - ] - }, - { - "name": "tags", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "priceInfo", - "type": "RECORD", - "mode": "NULLABLE", - "fields": [ - { - "name": "currencyCode", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "price", - "type": "FLOAT", - "mode": "NULLABLE" - }, - { - "name": "originalPrice", - "type": "FLOAT", - "mode": "NULLABLE" - }, - { - "name": "cost", - "type": "FLOAT", - "mode": "NULLABLE" - }, - { - "name": "priceEffectiveTime", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "priceExpireTime", - "type": "STRING", - "mode": "NULLABLE" - } - ] - }, - { - "name": "rating", - "type": "RECORD", - "mode": "NULLABLE", - "fields": [ - { - "name": "ratingCount", - "type": "INTEGER", - "mode": "NULLABLE" - }, - { - "name": "averageRating", - "type": "FLOAT", - "mode": "NULLABLE" - }, - { - "name": "ratingHistogram", - "type": "INTEGER", - "mode": "REPEATED" - } - ] - }, - { - "name": "expireTime", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "ttl", - "type": "RECORD", - "mode": "NULLABLE", - "fields": [ - { - "name": "seconds", - "type": "INTEGER", - "mode": "NULLABLE" - }, - { - "name": "nanos", - "type": "INTEGER", - "mode": "NULLABLE" - } - ] - }, - { - "name": "availableTime", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "availability", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "availableQuantity", - "type": "INTEGER", - "mode": "NULLABLE" - }, - { - "name": "fulfillmentInfo", - "type": "RECORD", - "mode": "REPEATED", - "fields": [ - { - "name": "type", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "placeIds", - "type": "STRING", - "mode": "REPEATED" - } - ] - }, - { - "name": "uri", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "images", - "type": "RECORD", - "mode": "REPEATED", - "fields": [ - { - "name": "uri", - "type": "STRING", - "mode": "REQUIRED" - }, - { - "name": "height", - "type": "INTEGER", - "mode": "NULLABLE" - }, - { - "name": "width", - "type": "INTEGER", - "mode": "NULLABLE" - } - ] - }, - { - "name": "audience", - "type": "RECORD", - "mode": "NULLABLE", - "fields": [ - { - "name": "genders", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "ageGroups", - "type": "STRING", - "mode": "REPEATED" - } - ] - }, - { - "name": "colorInfo", - "type": "RECORD", - "mode": "NULLABLE", - "fields": [ - { - "name": "colorFamilies", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "colors", - "type": "STRING", - "mode": "REPEATED" - } - ] - }, - { - "name": "sizes", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "materials", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "patterns", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "conditions", - "type": "STRING", - "mode": "REPEATED" - }, - { - "name": "retrievableFields", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "publishTime", - "type": "STRING", - "mode": "NULLABLE" - }, - { - "name": "promotions", - "type": "RECORD", - "mode": "REPEATED", - "fields": [ - { - "name": "promotionId", - "type": "STRING", - "mode": "NULLABLE" - } - ] - } -] \ No newline at end of file diff --git a/samples/interactive-tutorials/resources/products.json b/samples/interactive-tutorials/resources/products.json deleted file mode 100644 index 39dea765..00000000 --- a/samples/interactive-tutorials/resources/products.json +++ /dev/null @@ -1,316 +0,0 @@ -{"id": "GGCOGOAC101259","name": "GGCOGOAC101259","title": "#IamRemarkable Pen","brands": ["#IamRemarkable"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGOAC101259.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Metal","Recycled Plastic"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Office/IamRemarkable+Pen"} -{"id": "GGOEAAEC172013","name": "GGOEAAEC172013","title": "Android Embroidered Crewneck Sweater","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Embroidered+Crewneck+Sweater"} -{"id": "GGPRAHPL107110","name": "GGPRAHPL107110","title": "Android Iconic Hat Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAHPL130910.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Android+Iconic+Hat+Green"} -{"id": "GGOEAAKQ137410","name": "GGOEAAKQ137410","title": "Android Iconic Sock","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "17"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAAKQ137410.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Iconic+Sock"} -{"id": "GGOEAAWL130147","name": "GGOEAAWL130147","title": "Android Pocket Onesie Navy","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1301.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Onesie+Navy"} -{"id": "GGOEGAED142617","name": "GGOEGAED142617","title": "Google Austin Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1426.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Austin+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ163316","name": "GGOEGAEJ163316","title": "Google Charcoal Unisex Badge Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "21"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1633.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Charcoal+Unisex+Badge+Tee"} -{"id": "GGOEGDWC140899","name": "GGOEGDWC140899","title": "Google Chicago Campus Mug","brands": ["Google"],"categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "12"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGDWC140899.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Drinkware/Google+Chicago+Campus+Mug"} -{"id": "GGOEGCBD142299","name": "GGOEGCBD142299","title": "Google Cork Tablet Case","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBD142299.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Cork+Tablet+Case"} -{"id": "GGOEGAEB119414","name": "GGOEGAEB119414","title": "Google Dino Game Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1194.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dino+Game+Tee"} -{"id": "GGOEGAAH134316","name": "GGOEGAAH134316","title": "Google Heather Green Speckled Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1343.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Heather+Green+Speckled+Tee"} -{"id": "GGPRGBRC104499","name": "GGPRGBRC104499","title": "Google Incognito Zippack V2","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "36"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGBRC128099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Incognito+Zippack+V2"} -{"id": "GGOEGAEH146017","name": "GGOEGAEH146017","title": "Google LA Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1460.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+LA+Campus+Unisex+Tee"} -{"id": "GGOEGAED161612","name": "GGOEGAED161612","title": "Google LA Campus Women Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1569.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Land+and+Sea+Unisex+Tee+LS"} -{"id": "GGOEGCBA150799","name": "GGOEGCBA150799","title": "Google Large Pet Leash (Red/Yellow)","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA150799.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Large+Pet+Leash+Red+Yellow"} -{"id": "GGOEGADJ137115","name": "GGOEGADJ137115","title": "Google Men's Tech Fleece Vest Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1371.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Mens+Tech+Fleece+Vest+Charcoal"} -{"id": "GGOEGAER119515","name": "GGOEGAER119515","title": "Google Mountain View Tee Red","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Red"],"colors": ["Red","Neon red"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1195.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Mountain+View+Tee+Red"} -{"id": "GGOEGAEB140413","name": "GGOEGAEB140413","title": "Google NYC Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1404.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+NYC+Campus+Zip+Hoodie"} -{"id": "GGOEGAEC165215","name": "GGOEGAEC165215","title": "Google Navy French Terry Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1652.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Navy+French+Terry+Zip+Hoodie"} -{"id": "GGOEGALJ148813","name": "GGOEGALJ148813","title": "Google Seattle Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1488.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Seattle+Campus+Ladies+Tee"} -{"id": "GGOEGALJ148816","name": "GGOEGALJ148816","title": "Google Seattle Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1488.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Seattle+Campus+Ladies+Tee"} -{"id": "GGOEGAAQ117715","name": "GGOEGAAQ117715","title": "Google Striped Tank","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "29"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1177.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Google+Striped+Tank"} -{"id": "GGOEGAAQ117716","name": "GGOEGAAQ117716","title": "Google Striped Tank","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "29"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1177.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Google+Striped+Tank"} -{"id": "GGCOGAEJ153718","name": "GGCOGAEJ153718","title": "Google TYCTWD Gray Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1537.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Charcoal+Tee"} -{"id": "GGOEGAER090417","name": "GGOEGAER090417","title": "Google Tee Red","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Red"],"colors": ["Red","Flame red"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0904.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tee+Red"} -{"id": "GGOEGAXB135628","name": "GGOEGAXB135628","title": "Google Toddler Hero Tee Charcoal Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "24"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Ebony","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1356.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Toddler+Hero+Tee+Black"} -{"id": "GGOEGHBJ101899","name": "GGOEGHBJ101899","title": "Google Twill Cap Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "13"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGHBJ101899.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Twill+Cap+Charcoal"} -{"id": "GGOEGAEB125316","name": "GGOEGAEB125316","title": "Google Unisex Pride Eco-Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1253.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Unisex+Pride+Eco-Tee+Black"} -{"id": "GGOEGAEB170917","name": "GGOEGAEB170917","title": "Google Unisex V-neck Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "27"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1709.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Unisex+V+neck+Tee"} -{"id": "GGOEGAPC167099","name": "GGOEGAPC167099","title": "Google Vintage Cap Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGAPC167099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Vintage+Cap+Navy"} -{"id": "GGOEGAEH174914","name": "GGOEGAEH174914","title": "Google Vintage Olive Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "28"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1749.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Vintage+Olive+Tee"} -{"id": "GGOEGAPJ108213","name": "GGOEGAPJ108213","title": "Google Women's Discovery Lt. Rain Shell","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1082.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Discovery"} -{"id": "GGOEGALB119017","name": "GGOEGALB119017","title": "Google Women's Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1190.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Eco+Tee+Black"} -{"id": "GGOEGAWH126845","name": "GGOEGAWH126845","title": "Stan and Friends 2019 Onesie","brands": ["Stan and Friends"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1268.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Stan+and+Friends+Onesie+Green"} -{"id": "GGOEYOCR125599","name": "GGOEYOCR125599","title": "YouTube Transmission Journal Red","brands": ["YouTube"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"colorInfo": {"colorFamilies": ["Red"],"colors": ["Red","Neon red","Flame red"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYOCR125599.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/YouTube+Transmission+Journal+Red"} -{"id": "GGCOGADC100815","name": "GGCOGADC100815","title": "#IamRemarkable Hoodie","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1008.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Hoodie"} -{"id": "GGCOGALC100713","name": "GGCOGALC100713","title": "#IamRemarkable Ladies T-Shirt","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "12"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1007.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Ladies+T-Shirt"} -{"id": "GGOEAAYH130212","name": "GGOEAAYH130212","title": "Android Pocket Youth Tee Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1302.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Youth+Tee+Green"} -{"id": "GGPRGCBA104199","name": "GGPRGCBA104199","title": "Google ApPeel Journal Red","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3.67"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGCBA104199.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Sustainable+Kit"} -{"id": "GGOEGAFB134012","name": "GGOEGAFB134012","title": "Google Badge Heavyweight Pullover Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1340.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Badge+Heavyweight+Pullover+Black"} -{"id": "GGOEGAFB134018","name": "GGOEGAFB134018","title": "Google Badge Heavyweight Pullover Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1340.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Badge+Heavyweight+Pullover+Black"} -{"id": "GGOEGALL144015","name": "GGOEGALL144015","title": "Google Boulder Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1440.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Boulder+Campus+Ladies+Tee"} -{"id": "GGOEGADH120418","name": "GGOEGADH120418","title": "Google Campus Raincoat Green","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Campus+Raincoat+Green"} -{"id": "GGOEGBJD141499","name": "GGOEGBJD141499","title": "Google Chicago Campus Tote","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "11"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGBJD141499.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Bags/Google+Chicago+Campus+Tote"} -{"id": "GGPRGDHB106099","name": "GGPRGDHB106099","title": "Google Chrome Dino Light Up Water Bottle","brands": ["Google"],"categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "24"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGDHB163199.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Chrome+Dino+Light+Up+Water+Bottle"} -{"id": "GGOEGAEB173714","name": "GGOEGAEB173714","title": "Google Crewneck Sweatshirt Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "37"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Crewneck+Sweatshirt+Black"} -{"id": "GGOEGADH134214","name": "GGOEGADH134214","title": "Google Crewneck Sweatshirt Green","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1342.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Crewneck+Sweatshirt+Green"} -{"id": "GGOEGAER149217","name": "GGOEGAER149217","title": "Google Kirkland Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1492.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Kirkland+Campus+Unisex+Tee"} -{"id": "GGOEGOAA172399","name": "GGOEGOAA172399","title": "Google Ombre Pen","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.75"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGOAA172399.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Ombre+Pen+Yellow"} -{"id": "GGOEGAEJ148013","name": "GGOEGAEJ148013","title": "Google PNW Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1480.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+PNW+Campus+Zip+Hoodie"} -{"id": "GGOEGAEJ148214","name": "GGOEGAEJ148214","title": "Google PNW Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1482.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+PNW+Campus+Unisex+Tee"} -{"id": "GGPRGAAB100712","name": "GGPRGAAB100712","title": "Google Unisex Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Ebony","Outer Space","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGXXX1007.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Unisex+Eco+Tee+Black"} -{"id": "GGOEGAQB107813","name": "GGOEGAQB107813","title": "Google Women's Grid Zip-Up","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "33"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1078.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Grid+Zip+Up"} -{"id": "GGOEGAPB176914","name": "GGOEGAPB176914","title": "Google Women's Puffer Jacket","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "36"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Womens+Puffer+Jacket"} -{"id": "GGOEGATB176713","name": "GGOEGATB176713","title": "Google Women's Puffer Vest","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "34"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Womens+Puffer+Vest"} -{"id": "GGOEGAPJ138615","name": "GGOEGAPJ138615","title": "Google Women's Tech Fleece Grey","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1386.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Tech+Fleece+Grey"} -{"id": "GGOEGAYH135914","name": "GGOEGAYH135914","title": "Google Youth Badge Tee Olive","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "24"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1359.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Youth+Badge+Tee+Olive"} -{"id": "GGOEGAYB113113","name": "GGOEGAYB113113","title": "Google Youth FC Longsleeve Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1131.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Youth+FC+Longsleeve+Charcoal"} -{"id": "GGOEGAEH126718","name": "GGOEGAEH126718","title": "Stan and Friends 2019 Tee","brands": ["Stan and Friends"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1267.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Stan+and+Friends+Tee+Green"} -{"id": "GGOEYAEB093815","name": "GGOEYAEB093815","title": "YouTube Icon Pullover Black","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Ebony","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYXXX0938.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/YouTube+Icon+Hoodie+Black"} -{"id": "GGOEYAEJ120318","name": "GGOEYAEJ120318","title": "YouTube Icon Tee Grey","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYXXX1203.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/YouTube+Icon+Tee+Grey"} -{"id": "GGPRAOAL107699","name": "GGPRAOAL107699","title": "Android Iconic Pen","brands": ["Android"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.75"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAOAL129199.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Android+Iconic+Pen"} -{"id": "GGOEAAEH129617","name": "GGOEAAEH129617","title": "Android Pocket Tee Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "29"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1296.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Tee+Green"} -{"id": "GGPRAAEH107217","name": "GGPRAAEH107217","title": "Android Pocket Tee Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "29"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1296.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Android+Pocket+Tee+Green"} -{"id": "GGOEAAXL129928","name": "GGOEAAXL129928","title": "Android Pocket Toddler Tee Navy","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "23"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1299.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Toddler+Tee+Navy"} -{"id": "GGOEGAEC171813","name": "GGOEGAEC171813","title": "Google Bike Eco Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1718.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Bike+Eco+Tee"} -{"id": "GGOEGALL144016","name": "GGOEGALL144016","title": "Google Boulder Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1440.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Boulder+Campus+Ladies+Tee"} -{"id": "GGOEGAEC176213","name": "GGOEGAEC176213","title": "Google Camp Fleece Snap Pullover","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Camp+Fleece+Snap+Pullover"} -{"id": "GGOEGAER141014","name": "GGOEGAER141014","title": "Google Chicago Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1410.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Chicago+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ096415","name": "GGOEGAEJ096415","title": "Google Crewneck Sweatshirt Grey","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0964.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Crew+Grey"} -{"id": "GGOEGCBA139099","name": "GGOEGCBA139099","title": "Google Emoji Magnet Set","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "10"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA139099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Emoji+Magnet+Set"} -{"id": "GGOEGBRC127999","name": "GGOEGBRC127999","title": "Google Incognito Techpack V2","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGBRC127999.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Bags/Google+Incognito+Techpack+V2"} -{"id": "GGPRGCBA105199","name": "GGPRGCBA105199","title": "Google Medium Pet Collar (Blue/Green)","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Green blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA139599.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Medium+Pet+Collar+Blue+Green"} -{"id": "GGOEGAER119516","name": "GGOEGAER119516","title": "Google Mountain View Tee Red","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Red"],"colors": ["Red","Flame red","Dark red"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1195.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Mountain+View+Tee+Red"} -{"id": "GGOEGAEJ148014","name": "GGOEGAEJ148014","title": "Google PNW Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1480.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+PNW+Campus+Zip+Hoodie"} -{"id": "GGPRGOAH102499","name": "GGPRGOAH102499","title": "Google Pen Citron","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.75"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGOAH102499.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Pen+Citron"} -{"id": "GGOEGAEL146914","name": "GGOEGAEL146914","title": "Google SF Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1469.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+SF+Campus+Unisex+Tee"} -{"id": "GGCOGALB153913","name": "GGCOGALB153913","title": "Google TYCTWD Black Women's Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1539.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Womens+Tee"} -{"id": "GGCOGAEJ153715","name": "GGCOGAEJ153715","title": "Google TYCTWD Gray Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1537.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Charcoal+Tee"} -{"id": "GGOEGAEC173816","name": "GGOEGAEC173816","title": "Google Tonal Shirt Marine Blue","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "27"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Tonal+Shirt+Marine+Blue"} -{"id": "GGOEGAEJ104015","name": "GGOEGAEJ104015","title": "Google Tudes Recycled Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1040.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tudes+Recycled+Tee"} -{"id": "GGPRGAAB100718","name": "GGPRGAAB100718","title": "Google Unisex Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGXXX1007.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Unisex+Eco+Tee+Black"} -{"id": "GGOEGAPH138213","name": "GGOEGAPH138213","title": "Google Women's Softshell Moss","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1382.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Softshell+Moss"} -{"id": "GGOEGAYB113713","name": "GGOEGAYB113713","title": "Google Youth FC Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1137.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Youth+FC+Zip+Hoodie"} -{"id": "GGOEGAEB110915","name": "GGOEGAEB110915","title": "Google Zip Hoodie F/C","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1109.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Zip+Hoodie+FC"} -{"id": "GGPRACBA107016","name": "GGPRACBA107016","title": "I \u003c3 Android Kit","brands": ["Android"],"categories": ["Kit"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44.75"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRAXXX1070.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/I+Love+Android+Kit"} -{"id": "GGOEYAEJ120313","name": "GGOEYAEJ120313","title": "YouTube Icon Tee Grey","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYXXX1203.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/YouTube+Icon+Tee+Grey"} -{"id": "GGOEYADJ173418","name": "GGOEYADJ173418","title": "YouTube Ultralight Embroidered Sweatshirt","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "33"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/YouTube+Ultralight+Embroidered+Sweatshirt"} -{"id": "GGOEAFDH105799","name": "GGOEAFDH105799","title": "Android Cardboard Sculpture","brands": ["Android"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "17"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAFDH105799.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Android+Cardboard+Sculpture"} -{"id": "GGOEGAEM126414","name": "GGOEGAEM126414","title": "Android Garden 2019 Tee","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "29"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1264.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Garden+Tee+Orange"} -{"id": "GGOEAFBA115599","name": "GGOEAFBA115599","title": "Google Android Super Hero 3D Framed Art","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAFBA115599.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Android+Super+Hero+3D+Framed+Art"} -{"id": "GGOECAEB163614","name": "GGOECAEB163614","title": "Google Black Cloud Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "28"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOECXXX1636.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Black+Cloud+Tee"} -{"id": "GGOEGAEH143916","name": "GGOEGAEH143916","title": "Google Boulder Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1439.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Boulder+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ133717","name": "GGOEGAEJ133717","title": "Google Cambridge Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1337.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Cambridge+Campus+Zip+Hoodie"} -{"id": "GGOEGAEJ168612","name": "GGOEGAEJ168612","title": "Google Campus Unisex Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1686.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Campus+Unisex+Zip+Hoodie"} -{"id": "GGOEGAEJ168613","name": "GGOEGAEJ168613","title": "Google Campus Unisex Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1686.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Campus+Unisex+Zip+Hoodie"} -{"id": "GGPRGCBD102699","name": "GGPRGCBD102699","title": "Google Cork Tablet Case","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGCBD102699.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Cork+Tablet+Case"} -{"id": "GGOEGAER149212","name": "GGOEGAER149212","title": "Google Kirkland Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1492.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Kirkland+Campus+Unisex+Tee"} -{"id": "GGOEGCBA162099","name": "GGOEGCBA162099","title": "Google Land Sea Tech Taco","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGCBA161199.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Land+and+Sea+Tech+Taco+LS"} -{"id": "GGOEGALC153213","name": "GGOEGALC153213","title": "Google Mountain View Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1532.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Mountain+View+Campus+Ladies+Tee"} -{"id": "GGOEGAEH153016","name": "GGOEGAEH153016","title": "Google Mountain View Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1530.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Mountain+View+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ153416","name": "GGOEGAEJ153416","title": "Google Mountain View Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1534.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Mountain+View+Campus+Zip+Hoodie"} -{"id": "GGOEGAEJ140215","name": "GGOEGAEJ140215","title": "Google NYC Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1402.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+NYC+Campus+Unisex+Tee"} -{"id": "GGOEGBBA175499","name": "GGOEGBBA175499","title": "Google Recycled Drawstring Bag","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Recycled+Drawstring+Bag"} -{"id": "GGOEGALL147017","name": "GGOEGALL147017","title": "Google SF Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1470.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+SF+Campus+Ladies+Tee"} -{"id": "GGOEGALJ148814","name": "GGOEGALJ148814","title": "Google Seattle Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1488.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Seattle+Campus+Ladies+Tee"} -{"id": "GGOEGAEH148718","name": "GGOEGAEH148718","title": "Google Seattle Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1487.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Seattle+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ153514","name": "GGOEGAEJ153514","title": "Google Sunnyvale Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1535.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Sunnyvale+Campus+Zip+Hoodie"} -{"id": "GGOEGAED176313","name": "GGOEGAED176313","title": "Google Sweatshirt Brick Red","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Red"],"colors": ["Red","Flame red","Dark red"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Sweatshirt+Brick+Red"} -{"id": "GGOEGAEC090714","name": "GGOEGAEC090714","title": "Google Tee Blue","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0907.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tee+Blue"} -{"id": "GGOEGAAB118913","name": "GGOEGAAB118913","title": "Google Unisex Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1189.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Unisex+Eco+Tee+Black"} -{"id": "GGOEGAPB176915","name": "GGOEGAPB176915","title": "Google Women's Puffer Jacket","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "36"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Womens+Puffer+Jacket"} -{"id": "GGOEGAEB110912","name": "GGOEGAEB110912","title": "Google Zip Hoodie F/C","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1109.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Zip+Hoodie+FC"} -{"id": "GGPRACBA107018","name": "GGPRACBA107018","title": "I \u003c3 Android Kit","brands": ["Android"],"categories": ["Kit"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44.75"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRAXXX1070.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/I+Love+Android+Kit"} -{"id": "GGOEYAEA105610","name": "GGOEYAEA105610","title": "YouTube Crew Socks","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYAEA105610.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/YouTube+Crew+Socks"} -{"id": "GGCOGADC100817","name": "GGCOGADC100817","title": "#IamRemarkable Hoodie","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1008.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Hoodie"} -{"id": "GGCOGAEC100613","name": "GGCOGAEC100613","title": "#IamRemarkable T-Shirt","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "12"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1006.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Unisex+T-Shirt"} -{"id": "GGOEGCKR133899","name": "GGOEGCKR133899","title": "Google Cambridge Campus Sticker","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "2"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCKR133899.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Cambridge+Campus+Sticker"} -{"id": "GGOEGAEJ168615","name": "GGOEGAEJ168615","title": "Google Campus Unisex Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1686.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Campus+Unisex+Zip+Hoodie"} -{"id": "GGOEGAER141013","name": "GGOEGAER141013","title": "Google Chicago Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1410.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Chicago+Campus+Unisex+Tee"} -{"id": "GGOECOLJ164299","name": "GGOECOLJ164299","title": "Google Cloud Journal","brands": ["Google Cloud"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "18"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOECOLJ164299.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Stationery/Google+Cloud+Journal"} -{"id": "GGOEGHPB178810","name": "GGOEGHPB178810","title": "Google Corduroy Black Cap","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "19"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Corduroy+Black+Cap"} -{"id": "GGOEGAXA123610","name": "GGOEGAXA123610","title": "Google Crew Combed Cotton Sock","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "17"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGAXA123610.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Google+Crew+Combed+Cotton+Sock"} -{"id": "GGOEGAXA123510","name": "GGOEGAXA123510","title": "Google Crew Striped Athletic Sock","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "17"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGAXA123510.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Google+Crew+Striped+Athletic+Sock"} -{"id": "GGOEGAEJ103915","name": "GGOEGAEJ103915","title": "Google F/C Longsleeve Ash","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1039.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+FC+Longsleeve+Ash"} -{"id": "GGOEGAEJ165013","name": "GGOEGAEJ165013","title": "Google Gray French Terry Sweatshirt","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1650.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Gray+French+Terry+Sweatshirt"} -{"id": "GGOEGAXJ164914","name": "GGOEGAXJ164914","title": "Google Gray Toddler Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver","Stone gray","Cool gray"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1649.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Gray+Toddler+Zip+Hoodie"} -{"id": "GGOEGCBA169499","name": "GGOEGCBA169499","title": "Google Kirkland Campus Patch Set","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA169499.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Kirkland+Campus+Patch+Set"} -{"id": "GGOEGCBA150599","name": "GGOEGCBA150599","title": "Google Large Pet Collar (Red/Yellow)","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA150599.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Large+Pet+Collar+Red+Yellow"} -{"id": "GGOEGOAH090199","name": "GGOEGOAH090199","title": "Google Light Pen Green","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGOAH090199.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Metal","Recycled Plastic"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Office/Google+Light+Up+Pen+Green"} -{"id": "GGOEGCBA169399","name": "GGOEGCBA169399","title": "Google Los Angeles Campus Patch Set","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA169399.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Los+Angeles+Campus+Patch+Set"} -{"id": "GGOEGOAB177399","name": "GGOEGOAB177399","title": "Google Maps Wheat Pen","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.75"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGOAB177399.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Maps+Wheat+Pen"} -{"id": "GGOEGAEH153018","name": "GGOEGAEH153018","title": "Google Mountain View Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1530.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Mountain+View+Campus+Unisex+Tee"} -{"id": "GGOEGALJ140315","name": "GGOEGALJ140315","title": "Google NYC Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1403.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+NYC+Campus+Ladies+Tee"} -{"id": "GGOEGAEC165218","name": "GGOEGAEC165218","title": "Google Navy French Terry Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1652.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Navy+French+Terry+Zip+Hoodie"} -{"id": "GGPRGADC107914","name": "GGPRGADC107914","title": "Google Raincoat Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1350.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Raincoat+Navy"} -{"id": "GGOEGALJ148815","name": "GGOEGALJ148815","title": "Google Seattle Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1488.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Seattle+Campus+Ladies+Tee"} -{"id": "GGOEGADJ135212","name": "GGOEGADJ135212","title": "Google Sherpa Zip Hoodie Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1352.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Sherpa+Zip+Hoodie+Charcoal"} -{"id": "GGCOGAYC154115","name": "GGCOGAYC154115","title": "Google TYCTWD Blue Youth Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "24"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1541.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Blue+Youth+Tee"} -{"id": "GGOEGAEC164713","name": "GGOEGAEC164713","title": "Google Tonal Blue Eco Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "27"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1647.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tonal+Blue+Eco+Tee"} -{"id": "GGOEGHPL107710","name": "GGOEGHPL107710","title": "Google Twill Cap Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "13"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGHPL107710.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Dad+Hat+Navy"} -{"id": "GGPRGAAB100714","name": "GGPRGAAB100714","title": "Google Unisex Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGXXX1007.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Unisex+Eco+Tee+Black"} -{"id": "GGOEGAEH174912","name": "GGOEGAEH174912","title": "Google Vintage Olive Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "28"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1749.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Vintage+Olive+Tee"} -{"id": "GGOEGAEH175114","name": "GGOEGAEH175114","title": "Google Vintage Pullover Olive","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Vintage+Pullover+Olive"} -{"id": "GGOEAAXQ129830","name": "GGOEAAXQ129830","title": "Android Pocket Toddler Tee White","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "23"},"colorInfo": {"colorFamilies": ["White"],"colors": ["White"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1298.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Toddler+Tee+White"} -{"id": "GGOEGBJC122399","name": "GGOEGBJC122399","title": "Google Campus Bike Tote Navy","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "11"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGBJC122399.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Bags/Google+Google+Campus+Bike+Tote+Navy"} -{"id": "GGOEGAEC141216","name": "GGOEGAEC141216","title": "Google Chicago Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1412.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Chicago+Campus+Zip+Hoodie"} -{"id": "GGOEGAEA137817","name": "GGOEGAEA137817","title": "Google Cotopaxi Shell","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1378.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Cotopaxi+Shell"} -{"id": "GGOEGAED168116","name": "GGOEGAED168116","title": "Google Earth Day Eco Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1681.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Earth+Day+Eco+Tee"} -{"id": "GGOEGAEJ165116","name": "GGOEGAEJ165116","title": "Google Gray French Terry Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver","Stone gray","Cool gray"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1651.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Gray+French+Terry+Zip+Hoodie"} -{"id": "GGPRGBRC101599","name": "GGPRGBRC101599","title": "Google Incognito Laptop Organizer V2","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "36"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGBRC101599.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Incognito+Laptop+Organizer"} -{"id": "GGOEGALJ149314","name": "GGOEGALJ149314","title": "Google Kirkland Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1493.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Kirkland+Campus+Ladies+Tee"} -{"id": "GGOEGACH161516","name": "GGOEGACH161516","title": "Google Land Sea French Terry Sweatshirt","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1609.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Land+and+Sea+French+Terry+Sweatshirt+LS"} -{"id": "GGOEGACH161517","name": "GGOEGACH161517","title": "Google Land Sea French Terry Sweatshirt","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1609.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Land+and+Sea+French+Terry+Sweatshirt+LS"} -{"id": "GGCOGAED156912","name": "GGCOGAED156912","title": "Google Land Sea Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1569.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Land+and+Sea+Unisex+Tee"} -{"id": "GGOEGOAR090099","name": "GGOEGOAR090099","title": "Google Light Pen Red","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"colorInfo": {"colorFamilies": ["Red"],"colors": ["Red","Flame red","Dark red"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGOAR090099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Metal","Recycled Plastic"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Office/Google+Light+Up+Pen+Red"} -{"id": "GGOEGCBA168999","name": "GGOEGCBA168999","title": "Google Patch","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3.5"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA168999.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Lifestyle/Google+Patch"} -{"id": "GGOEGOAC123799","name": "GGOEGOAC123799","title": "Google Pen Bright Blue","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.75"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGOAC123799.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Metal","Recycled Plastic"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Office/Google+Pen+Bright+Blue"} -{"id": "GGOEGAEL146912","name": "GGOEGAEL146912","title": "Google SF Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1469.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+SF+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ118215","name": "GGOEGAEJ118215","title": "Google Summer19 Crew Grey","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1182.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2020.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Google+Summer19+Crew+Grey"} -{"id": "GGOEGAEJ153515","name": "GGOEGAEJ153515","title": "Google Sunnyvale Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1535.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Sunnyvale+Campus+Zip+Hoodie"} -{"id": "GGCOGAEJ153717","name": "GGCOGAEJ153717","title": "Google TYCTWD Gray Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1537.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Charcoal+Tee"} -{"id": "GGCOGAXT154229","name": "GGCOGAXT154229","title": "Google TYCTWD Yellow Toddler Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "23"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1542.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Yellow+Toddler+Tee"} -{"id": "GGOEGAEC090718","name": "GGOEGAEC090718","title": "Google Tee Blue","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0907.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tee+Blue"} -{"id": "GGOEGAXQ134629","name": "GGOEGAXQ134629","title": "Google Toddler Tee White V2","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "24"},"colorInfo": {"colorFamilies": ["White"],"colors": ["White"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1346.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Toddler+Tee+White"} -{"id": "GGOEGAED175017","name": "GGOEGAED175017","title": "Google Tonal Brick Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "28"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Tonal+Brick+Tee"} -{"id": "GGOEGAEC173818","name": "GGOEGAEC173818","title": "Google Tonal Shirt Marine Blue","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "27"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Tonal+Shirt+Marine+Blue"} -{"id": "GGOEGAEB125312","name": "GGOEGAEB125312","title": "Google Unisex Pride Eco-Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1253.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino","Membrane"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Unisex+Pride+Eco-Tee+Black"} -{"id": "GGOEGAEC164612","name": "GGOEGAEC164612","title": "Google Vintage Navy Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "27"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1646.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Vintage+Navy+Tee"} -{"id": "GGOEGABB099199","name": "GGOEGABB099199","title": "Google Wallet Stand Black","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGABB099199.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Wallet+Stand+Black"} -{"id": "GGOEGAPJ108216","name": "GGOEGAPJ108216","title": "Google Women's Discovery Lt. Rain Shell","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1082.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Discovery"} -{"id": "GGOEGALB109913","name": "GGOEGALB109913","title": "Google Women's Tee F/C Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1099.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Tee+FC+Black"} -{"id": "GGOEGAYB116714","name": "GGOEGAYB116714","title": "Google Youth F/C Pullover Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1167.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual","Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Youth+FC+Pullover+Hoodie"} -{"id": "GGOEYCBR138999","name": "GGOEYCBR138999","title": "YouTube Iconic Play Pin","brands": ["YouTube"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYCBR138999.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/YouTube+Iconic+Play+Pin"} -{"id": "GGCOGADC100814","name": "GGCOGADC100814","title": "#IamRemarkable Hoodie","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1008.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Hoodie"} -{"id": "GGOEAFKQ130599","name": "GGOEAFKQ130599","title": "Android Iconic 4in Decal","brands": ["Android"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.5"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAFKQ130599.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Android+Iconic+4in+Decal"} -{"id": "GGOEAAEL130815","name": "GGOEAAEL130815","title": "Android Iconic Crew","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1308.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Iconic+Crew"} -{"id": "GGOEGCOA173158","name": "GGOEGCOA173158","title": "Google Bike Paper Clip Set","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3.5"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Bike+Paper+Clip+Set"} -{"id": "GGOEGALJ141117","name": "GGOEGALJ141117","title": "Google Chicago Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1411.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Chicago+Campus+Ladies+Tee"} -{"id": "GGOEGCBA169599","name": "GGOEGCBA169599","title": "Google Chicago Campus Patch Set","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA169599.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Chicago+Campus+Patch+Set"} -{"id": "GGOECAEB165513","name": "GGOECAEB165513","title": "Google Cloud Tri-Blend Crew Tee","brands": ["Google Cloud"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOECXXX1655.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Cloud+Unisex+Tri-Blend+Crew+Tee"} -{"id": "GGOEGDNQ138099","name": "GGOEGDNQ138099","title": "Google Cork Base Tumbler","categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "28"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGDNQ138099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Drinkware/Google+Cork+Base+Tumbler"} -{"id": "GGOEGAEL091315","name": "GGOEGAEL091315","title": "Google Crewneck Sweatshirt Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0913.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Crew+Sweater+Navy"} -{"id": "GGPRGAEL101415","name": "GGPRGAEL101415","title": "Google Crewneck Sweatshirt Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGXXX1014.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Crewneck+Sweatshirt+Navy"} -{"id": "GGOEGAWH144552","name": "GGOEGAWH144552","title": "Google Infant Hero Tee Olive","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1445.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Infant+Hero+Tee+Olive"} -{"id": "GGOEGAEH146018","name": "GGOEGAEH146018","title": "Google LA Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1460.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+LA+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ146218","name": "GGOEGAEJ146218","title": "Google LA Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1462.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+LA+Campus+Zip+Hoodie"} -{"id": "GGOEGADB138314","name": "GGOEGADB138314","title": "Google Men's Puff Jacket Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1383.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Mens+Puff+Jacket+Black"} -{"id": "GGOEGDHH177299","name": "GGOEGDHH177299","title": "Google Olive Tundra Bottle","brands": ["Google"],"categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "31"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Olive+Tundra+Bottle"} -{"id": "GGOEGAEC153118","name": "GGOEGAEC153118","title": "Google Sunnyvale Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1531.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Sunnyvale+Campus+Unisex+Tee"} -{"id": "GGOEGAEC090713","name": "GGOEGAEC090713","title": "Google Tee Blue","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0907.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tee+Blue"} -{"id": "GGOEGAXC171928","name": "GGOEGAXC171928","title": "Google Tricyle Toddler Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "23"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1719.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tricyle+Toddler+Tee"} -{"id": "GGOEGAEJ173613","name": "GGOEGAEJ173613","title": "Google Ultralight Gray Sweatshirt","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Ultralight+Gray+Sweatshirt"} -{"id": "GGOEGAEJ173615","name": "GGOEGAEJ173615","title": "Google Ultralight Gray Sweatshirt","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Stone gray","Cool gray"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Ultralight+Gray+Sweatshirt"} -{"id": "GGOEGAEQ120116","name": "GGOEGAEQ120116","title": "Google Unisex 3/4 Raglan Red","categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Red"],"colors": ["Red","Flame red","Dark red"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1201.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Unisex+3+4+Raglan+Red"} -{"id": "GGOEGADB176812","name": "GGOEGADB176812","title": "Google Unisex Puffer Jacket","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "36"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Unisex+Puffer+Jacket"} -{"id": "GGOEGAEC164617","name": "GGOEGAEC164617","title": "Google Vintage Navy Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "27"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1646.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Vintage+Navy+Tee"} -{"id": "GGOEACBA116699","name": "GGOEACBA116699","title": "Noogler Android Figure 2019","brands": ["Android"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEACBA116699.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Noogler+Android+Figure+2019"} -{"id": "GGOEYAXB089629","name": "GGOEYAXB089629","title": "YouTube Kids Tee Black","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "20"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYXXX0896.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Kids/Youtube+Kids+Tee+Black"} -{"id": "GGOEYALQ091917","name": "GGOEYALQ091917","title": "YouTube Women's Favorite Tee White","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["White"],"colors": ["White"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0919.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Youtube+Favorite+Tee+White"} -{"id": "GGOEAAYL130315","name": "GGOEAAYL130315","title": "Android Pocket Youth Tee Navy","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1303.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Youth+Tee+Navy"} -{"id": "GGOEGPJC019099","name": "GGOEGPJC019099","title": "Google 7-inch Dog Flying Disc Blue","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.5"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGPJC019099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Lifestyle/Google-Frisbee"} -{"id": "GGOEGAED142612","name": "GGOEGAED142612","title": "Google Austin Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1426.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Austin+Campus+Unisex+Tee"} -{"id": "GGOEGAEJ144113","name": "GGOEGAEJ144113","title": "Google Boulder Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1441.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Boulder+Campus+Zip+Hoodie"} -{"id": "GGOEGAEJ133712","name": "GGOEGAEJ133712","title": "Google Cambridge Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1337.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Cambridge+Campus+Zip+Hoodie"} -{"id": "GGOEGCBA096099","name": "GGOEGCBA096099","title": "Google Campus Bike","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA096099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Campus+Bike"} -{"id": "GGOECAEB165413","name": "GGOECAEB165413","title": "Google Cloud Carhartt Crew Sweatshirt","brands": ["Google Cloud"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOECXXX1654.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Cloud+Unisex+Carhartt+Crew+Sweatshirt"} -{"id": "GGOEGAEL091312","name": "GGOEGAEL091312","title": "Google Crewneck Sweatshirt Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0913.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Crew+Sweater+Navy"} -{"id": "GGOEGAEL091318","name": "GGOEGAEL091318","title": "Google Crewneck Sweatshirt Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0913.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Crew+Sweater+Navy"} -{"id": "GGOEGBMH177899","name": "GGOEGBMH177899","title": "Google ecofriendly Green Duffel","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "31"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+ecofriendly+Green+Duffel"} -{"id": "GGOEGBMR177799","name": "GGOEGBMR177799","title": "Google ecofriendly Red Duffel","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "31"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+ecofriendly+Red+Duffel"} -{"id": "GGOEGAEB103815","name": "GGOEGAEB103815","title": "Google F/C Longsleeve Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1038.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+FC+Longsleeve+Charcoal"} -{"id": "GGPRGBRC103299","name": "GGPRGBRC103299","title": "Google Incognito Dopp Kit V2","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGBRC103299.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Incognito+Dopp+Kit+V2"} -{"id": "GGPRGCBA100399","name": "GGPRGCBA100399","title": "Google Journal Set","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "10.75"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGCBA100399.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Journal+Set"} -{"id": "GGOEGAYC118315","name": "GGOEGAYC118315","title": "Google Kids Playful Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1183.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Google+Kids+Playful+Tee"} -{"id": "GGOEGDHJ145999","name": "GGOEGDHJ145999","title": "Google LA Campus Bottle","brands": ["Google"],"categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "20"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGDHJ145999.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Drinkware/Google+LA+Campus+Bottle"} -{"id": "GGOEMAEB164115","name": "GGOEMAEB164115","title": "Google F/C Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "21"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEMXXX1641.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Maps+Pin+Tee"} -{"id": "GGOEGAEB165317","name": "GGOEGAEB165317","title": "Google Marine Layer Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1653.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Marine+Layer+Tee"} -{"id": "GGOEGADH138114","name": "GGOEGADH138114","title": "Google Men's Softshell Moss","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1381.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Mens+Softshell+Moss"} -{"id": "GGOEGAEC119613","name": "GGOEGAEC119613","title": "Google Mountain View Tee Blue","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1196.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Mountain+View+Tee+Blue"} -{"id": "GGOEGAEC165212","name": "GGOEGAEC165212","title": "Google Navy French Terry Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1652.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Navy+French+Terry+Zip+Hoodie"} -{"id": "GGOEGCBA169999","name": "GGOEGCBA169999","title": "Google New York Campus Patch Set","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA169999.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+New+York+Campus+Patch+Set"} -{"id": "GGOEGBJD148499","name": "GGOEGBJD148499","title": "Google PNW Campus Tote","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "11"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGBJD148499.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Bags/Google+PNW+Campus+Tote"} -{"id": "GGOEGAAR134513","name": "GGOEGAAR134513","title": "Google Red Speckled Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1345.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Red+Speckled+Tee"} -{"id": "GGOEGAEH148715","name": "GGOEGAEH148715","title": "Google Seattle Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1487.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Seattle+Campus+Unisex+Tee"} -{"id": "GGOEGADC134712","name": "GGOEGADC134712","title": "Google Sherpa Zip Hoodie Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1347.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Sherpa+Zip+Hoodie+Navy"} -{"id": "GGOEGAEC134910","name": "GGOEGAEC134910","title": "Google Speckled Beanie Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "20"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGAEC134910.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Speckled+Beanie+Navy"} -{"id": "GGOEGOCB178199","name": "GGOEGOCB178199","title": "Google Stitched Journal Set","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Stitched+Journal+Set"} -{"id": "GGOEGAXB113351","name": "GGOEGAXB113351","title": "Google Toddler FC Tee Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1133.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Toddler+FC+Tee+Charcoal"} -{"id": "GGOEGAED175014","name": "GGOEGAED175014","title": "Google Tonal Brick Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "28"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Tonal+Brick+Tee"} -{"id": "GGOEGADB176613","name": "GGOEGADB176613","title": "Google Unisex Puffer Vest","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "34"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Unisex+Puffer+Vest"} -{"id": "GGOEGAPJ178414","name": "GGOEGAPJ178414","title": "Google Women's Essential Jacket","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1784.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Womens+Essential+Jacket"} -{"id": "GGOEGAPB096315","name": "GGOEGAPB096315","title": "Google Womens Microfleece Jacket Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0963.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Microfleece+Jacket+Black"} -{"id": "GGOEYAXB089655","name": "GGOEYAXB089655","title": "YouTube Kids Tee Black","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "20"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYXXX0896.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Kids/Youtube+Kids+Tee+Black"} -{"id": "GGOEYAEJ092115","name": "GGOEYAEJ092115","title": "Youtube 3 lines Tee Grey","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0921.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Youtube+3+lines+tee+grey"} -{"id": "GGCOGADC100813","name": "GGCOGADC100813","title": "#IamRemarkable Hoodie","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1008.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Hoodie"} -{"id": "GGCOGAEC100616","name": "GGCOGAEC100616","title": "#IamRemarkable T-Shirt","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "12"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1006.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Unisex+T-Shirt"} -{"id": "GGOEAAEL130813","name": "GGOEAAEL130813","title": "Android Iconic Crew","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1308.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Iconic+Crew"} -{"id": "GGOEAAEL130818","name": "GGOEAAEL130818","title": "Android Iconic Crew","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1308.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Iconic+Crew"} -{"id": "GGOEAAWL130145","name": "GGOEAAWL130145","title": "Android Pocket Onesie Navy","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1301.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Onesie+Navy"} -{"id": "GGPRAAEH107214","name": "GGPRAAEH107214","title": "Android Pocket Tee Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "29"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1296.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Android+Pocket+Tee+Green"} -{"id": "GGOEGAEC171816","name": "GGOEGAEC171816","title": "Google Bike Eco Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1718.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Bike+Eco+Tee"} -{"id": "GGOECAEB163513","name": "GGOECAEB163513","title": "Google Black Cloud Polo","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "36"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Ebony","Outer Space","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOECXXX1635.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Black+Cloud+Polo"} -{"id": "GGOEGALC133617","name": "GGOEGALC133617","title": "Google Cambridge Campus Ladies Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1336.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Cambridge+Campus+Ladies+Tee"} -{"id": "GGOEGAEC176217","name": "GGOEGAEC176217","title": "Google Camp Fleece Snap Pullover","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Camp+Fleece+Snap+Pullover"} -{"id": "GGPRGBJC103999","name": "GGPRGBJC103999","title": "Google Campus Bike Tote Navy","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3.4"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Campus+Bike+Tote+Navy"} -{"id": "GGOEGAEJ168513","name": "GGOEGAEJ168513","title": "Google Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1685.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Campus+Unisex+Tee"} -{"id": "GGOEGDWH175999","name": "GGOEGDWH175999","title": "Google Ceramic Glazed Mug","brands": ["Google"],"categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "12"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Ceramic+Glazed+Mug"} -{"id": "GGOEGAEJ163317","name": "GGOEGAEJ163317","title": "Google Charcoal Unisex Badge Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "21"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1633.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Charcoal+Unisex+Badge+Tee"} -{"id": "GGPRGCBA100499","name": "GGPRGCBA100499","title": "Google Confetti Task Pad","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3.75"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGCBA100499.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Confetti+Combo"} -{"id": "GGPRGOCA102299","name": "GGPRGOCA102299","title": "Google Confetti Slim Task Pad","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGOCA102299.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Confetti+Slim+Task+Pad"} -{"id": "GGPRGOCD102099","name": "GGPRGOCD102099","title": "Google Cork Journal","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGOCD102099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Cork+Journal"} -{"id": "GGOEGAEJ096412","name": "GGOEGAEJ096412","title": "Google Crewneck Sweatshirt Grey","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0964.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Crew+Grey"} -{"id": "GGOEGAEL091316","name": "GGOEGAEL091316","title": "Google Crewneck Sweatshirt Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0913.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Crew+Sweater+Navy"} -{"id": "GGOEGHGA174599","name": "GGOEGHGA174599","title": "Google Gradient Green Sunglasses","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Gradient+Green+Sunglasses"} -{"id": "GGOEGAER149216","name": "GGOEGAER149216","title": "Google Kirkland Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1492.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Kirkland+Campus+Unisex+Tee"} -{"id": "GGOEGCBA139899","name": "GGOEGCBA139899","title": "Google Large Pet Leash (Blue/Green)","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA139899.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Large+Pet+Leash+Blue+Green"} -{"id": "GGOEGAEB165316","name": "GGOEGAEB165316","title": "Google Marine Layer Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1653.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Cotton"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Marine+Layer+Tee"} -{"id": "GGOEGBJA127699","name": "GGOEGBJA127699","title": "Google Mural Tote","brands": ["Google"],"categories": ["Bags"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "18"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGBJA127699.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Bags/Google+Mural+Tote"} -{"id": "GGOEGAEC165217","name": "GGOEGAEC165217","title": "Google Navy French Terry Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1652.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Navy+French+Terry+Zip+Hoodie"} -{"id": "GGOEGOAQ101299","name": "GGOEGOAQ101299","title": "Google Pen White","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.75"},"colorInfo": {"colorFamilies": ["White"],"colors": ["White"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGOAQ101299.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Metal","Recycled Plastic"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Office/Google+Pen+White"} -{"id": "GGOEGADC135016","name": "GGOEGADC135016","title": "Google Raincoat Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1350.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Raincoat+Navy"} -{"id": "GGCOAAPR155410","name": "GGCOAAPR155410","title": "Google TYCTWD Red Cap","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "13"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGAPR155410.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Red+Cap"} -{"id": "GGOEGAEH090616","name": "GGOEGAEH090616","title": "Google Tee Green","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0906.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Greenesign/Apparel/Google+Tee+Green"} -{"id": "GGOEGAXB113330","name": "GGOEGAXB113330","title": "Google Toddler FC Tee Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1133.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Toddler+FC+Tee+Charcoal"} -{"id": "GGOEGAXB113617","name": "GGOEGAXB113617","title": "Google Toddler FC Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1136.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Toddler+FC+Zip+Hoodie"} -{"id": "GGOEGAEC164718","name": "GGOEGAEC164718","title": "Google Tonal Blue Eco Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1647.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tonal+Blue+Eco+Tee"} -{"id": "GGOEGAED175018","name": "GGOEGAED175018","title": "Google Tonal Brick Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "28"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Tonal+Brick+Tee"} -{"id": "GGPRGALB100815","name": "GGPRGALB100815","title": "Google Women's Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGXXX1008.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Womens+Eco+Tee+Black"} -{"id": "GGOEGATJ137214","name": "GGOEGATJ137214","title": "Google Women's Tech Fleece Vest Charcoal","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1372.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Womens+Tech+Fleece+Vest+Charcoal"} -{"id": "GGPRACBA107014","name": "GGPRACBA107014","title": "I \u003c3 Android Kit","brands": ["Android"],"categories": ["Kit"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44.75"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRAXXX1070.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/I+Love+Android+Kit"} -{"id": "GGOEGAWH126846","name": "GGOEGAWH126846","title": "Stan and Friends 2019 Onesie","brands": ["Stan and Friends"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1268.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Stan+and+Friends+Onesie+Green"} -{"id": "GGOEGAYH126913","name": "GGOEGAYH126913","title": "Stan and Friends 2019 Youth Tee","brands": ["Stan and Friends"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1269.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Stan+and+Friends+Youth+Tee+Green"} -{"id": "GGCOGADC100816","name": "GGCOGADC100816","title": "#IamRemarkable Hoodie","brands": ["#IamRemarkable"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1008.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/IamRemarkable+Hoodie"} -{"id": "GGOEAAEC172017","name": "GGOEAAEC172017","title": "Android Embroidered Crewneck Sweater","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Embroidered+Crewneck+Sweater"} -{"id": "GGOEAHPL130910","name": "GGOEAHPL130910","title": "Android Iconic Hat Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAHPL130910.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Iconic+Hat+Green"} -{"id": "GGOEAAEH129616","name": "GGOEAAEH129616","title": "Android Pocket Tee Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "29"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1296.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Tee+Green"} -{"id": "GGOEAAYL130313","name": "GGOEAAYL130313","title": "Android Pocket Youth Tee Navy","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAXXX1303.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Pocket+Youth+Tee+Navy"} -{"id": "GGOEGCBA169899","name": "GGOEGCBA169899","title": "Google Austin Campus Patch Set","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA169899.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Campus+Collection/Google+Austin+Campus+Patch+Set"} -{"id": "GGOEGAXN127229","name": "GGOEGAXN127229","title": "Google Beekeepers 2019 Toddler Tee, Pink","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1272.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/ApparelGoogle+Beekeepers+Toddler+Tee+Pink"} -{"id": "GGOEGDWJ141799","name": "GGOEGDWJ141799","title": "Google Camp Mug Gray","brands": ["Google"],"categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "13"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Cool gray"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGDWJ141799.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Lifestyle/Google+Camp+Mug+Gray"} -{"id": "GGPRGCBA101299","name": "GGPRGCBA101299","title": "Google Cork Set","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20210405858/assets/items/images/GGPRGCBA101299.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Cork+Set"} -{"id": "GGOEGAED168115","name": "GGOEGAED168115","title": "Google Earth Day Eco Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1681.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Earth+Day+Eco+Tee"} -{"id": "GGOEGAEJ103917","name": "GGOEGAEJ103917","title": "Google F/C Longsleeve Ash","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1039.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+FC+Longsleeve+Ash"} -{"id": "GGOEGFSR022099","name": "GGOEGFSR022099","title": "Google Kick Ball","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "2"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGFSR022099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Lifestyle/Fun/Google+Kick+Ball.axd"} -{"id": "GGCOGCBA164499","name": "GGCOGCBA164499","title": "Google Knit Blanket","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "0"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGCBA164499.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Lifestyle/Google+Knit+Blanket"} -{"id": "GGOEGAEJ146213","name": "GGOEGAEJ146213","title": "Google LA Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1462.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+LA+Campus+Zip+Hoodie"} -{"id": "GGOEGACH161518","name": "GGOEGACH161518","title": "Google Land Sea French Terry Sweatshirt","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1609.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Land+and+Sea+French+Terry+Sweatshirt+LS"} -{"id": "GGCOGCBA161199","name": "GGCOGCBA161199","title": "Google Land Sea Tech Taco","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGCBA161199.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Land+and+Sea+Tech+Taco"} -{"id": "GGOEGAED161615","name": "GGOEGAED161615","title": "Google Land Sea Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGXXX1569.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Land+and+Sea+Unisex+Tee+LS"} -{"id": "GGOEMAEB164113","name": "GGOEMAEB164113","title": "Google Maps Pin Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "21"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEMXXX1641.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Maps+Pin+Tee"} -{"id": "GGOEGADH138118","name": "GGOEGADH138118","title": "Google Men's Softshell Moss","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "39"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1381.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Mens+Softshell+Moss"} -{"id": "GGOEGDHJ147999","name": "GGOEGDHJ147999","title": "Google PNW Campus Bottle","brands": ["Google"],"categories": ["Drinkware"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "20"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGDHJ147999.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Drinkware/Google+PNW+Campus+Bottle"} -{"id": "GGOEGOAJ101399","name": "GGOEGOAJ101399","title": "Google Pen Grey","brands": ["Google"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "1.75"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGOAJ101399.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Metal","Recycled Plastic"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Office/Google+pen+grey"} -{"id": "GGPRGADC107915","name": "GGPRGADC107915","title": "Google Raincoat Navy","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "44"},"colorInfo": {"colorFamilies": ["Navy"],"colors": ["Navy"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1350.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Raincoat+Navy"} -{"id": "GGOEGAAH136915","name": "GGOEGAAH136915","title": "Google Split Seam Tee Olive","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "26"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1369.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Split+Seam+Tee+Olive"} -{"id": "GGCOGAEC153813","name": "GGCOGAEC153813","title": "Google TYCTWD Blue Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1538.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/TYCTWD/Google+TYCTWD+Blue+Tee"} -{"id": "GGOEGAEB110018","name": "GGOEGAEB110018","title": "Google Tee F/C Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Ebony"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1100.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Tee+FC+Black"} -{"id": "GGOEGAAB118914","name": "GGOEGAAB118914","title": "Google Unisex Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1189.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Unisex+Eco+Tee+Black"} -{"id": "GGOEGAAB118916","name": "GGOEGAAB118916","title": "Google Unisex Eco Tee Black","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Outer Space","Jet"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1189.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Unisex+Eco+Tee+Black"} -{"id": "GGOEGAEJ178314","name": "GGOEGAEJ178314","title": "Google Unisex Essential Jacket","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1783.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Unisex+Essential+Jacket"} -{"id": "GGOEGAPJ178416","name": "GGOEGAPJ178416","title": "Google Women's Essential Jacket","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1784.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Womens+Essential+Jacket"} -{"id": "GGOEGCBD165799","name": "GGOEGCBD165799","title": "Google Wooden Yo-Yo","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "3"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBD165799.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Wooden+Yo+Yo"} -{"id": "GGOEGAYJ136014","name": "GGOEGAYJ136014","title": "Google Youth Hero Tee Grey","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "24"},"colorInfo": {"colorFamilies": ["Gray"],"colors": ["Light gray","Silver"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1360.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Youth+Hero+Tee+Grey"} -{"id": "GGOEYAEB120713","name": "GGOEYAEB120713","title": "YouTube Standards Zip Hoodie Black","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYXXX1207.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/YouTube+Standards+Zip+Hoodie+Black"} -{"id": "GGOEYAEB120715","name": "GGOEYAEB120715","title": "YouTube Standards Zip Hoodie Black","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"colorInfo": {"colorFamilies": ["Black"],"colors": ["Onyx","Outer Space","Jet"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEYXXX1207.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/YouTube+Standards+Zip+Hoodie+Black"} -{"id": "GGOEYALQ091914","name": "GGOEYALQ091914","title": "YouTube Women's Favorite Tee White","brands": ["YouTube"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"colorInfo": {"colorFamilies": ["White"],"colors": ["White"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX0919.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Youtube+Favorite+Tee+White"} -{"id": "GGOEGCKA151899","name": "GGOEGCKA151899","title": "Google 4in Decal","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "2"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCKA151899.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Stationery/Google+4in+Decal"} -{"id": "GGOEGAEQ162514","name": "GGOEGAEQ162514","title": "Google 5k Run 2020 Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "22"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1625.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/5k+run/Google+5K+Run+2020+Unisex+Tee"} -{"id": "GGOEGEBK094499","name": "GGOEGEBK094499","title": "Google Bot Natural","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "10"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGEBK094499.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Accessories/Google+Bot"} -{"id": "GGPRGCBA106399","name": "GGPRGCBA106399","title": "Google Campus Bike","brands": ["Google"],"categories": ["Accessories"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGCBA096099.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Google+Campus+Bike"} -{"id": "GGOEGAER141015","name": "GGOEGAER141015","title": "Google Chicago Campus Unisex Tee","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "25"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1410.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Chicago+Campus+Unisex+Tee"} -{"id": "GGOEGAEC141218","name": "GGOEGAEC141218","title": "Google Chicago Campus Zip Hoodie","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "38"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1412.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Chicago+Campus+Zip+Hoodie"} -{"id": "GGOECAEB165414","name": "GGOECAEB165414","title": "Google Cloud Carhartt Crew Sweatshirt","brands": ["Google Cloud"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "30"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOECXXX1654.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Cloud+Unisex+Carhartt+Crew+Sweatshirt"} -{"id": "GGOEGAEJ178516","name": "GGOEGAEJ178516","title": "Google Cloud Packable Lightweight Jacket","brands": ["Google Cloud"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "32"},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/noimage.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Google+Cloud+Packable+Lightweight+Jacket"} -{"id": "GGOEGADH134212","name": "GGOEGADH134212","title": "Google Crewneck Sweatshirt Green","brands": ["Google"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "35"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "OUT_OF_STOCK","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEGXXX1342.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2021.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Merino"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Casual"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Google+Crewneck+Sweatshirt+Green"} diff --git a/samples/interactive-tutorials/resources/products_some_invalid.json b/samples/interactive-tutorials/resources/products_some_invalid.json deleted file mode 100644 index f46dc761..00000000 --- a/samples/interactive-tutorials/resources/products_some_invalid.json +++ /dev/null @@ -1,3 +0,0 @@ -{"id": "GGCOGOAC101259","name": "GGCOGOAC101259","title": "#IamRemarkable Pen","brands": ["#IamRemarkable"],"categories": ["Office"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"colorInfo": {"colorFamilies": ["Blue"],"colors": ["Light blue","Blue","Dark blue"]},"availability": "INVALID_VALUE","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGCOGOAC101259.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Metal","Recycled Plastic"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Office/IamRemarkable+Pen"} -{"id": "GGPRAHPL107110","name": "GGPRAHPL107110","title": "Android Iconic Hat Green","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "16"},"colorInfo": {"colorFamilies": ["Green"],"colors": ["Olive","Grass green","Light green"]},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAHPL130910.jpg"}],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","uri": "https://shop.googlemerchandisestore.com/Google+Prize+Portal/Android+Iconic+Hat+Green"} -{"id": "GGOEAAKQ137410","name": "GGOEAAKQ137410","title": "Android Iconic Sock","brands": ["Android"],"categories": ["Apparel"],"priceInfo": {"cost": "12.0","currencyCode": "USD","originalPrice": "45.0","priceEffectiveTime": "2020-08-01T12:00:00+00:00","priceExpireTime": "2120-08-01T12:00:00+00:00","price": "17"},"availability": "IN_STOCK","availableQuantity": 50,"availableTime": "2021-10-11T12:00:00+00:00","images": [{"height": "300","width": "400","uri": "https://shop.googlemerchandisestore.com/store/20160512512/assets/items/images/GGOEAAKQ137410.jpg"}],"sizes": ["XS","S","M","L","XL"],"retrievableFields": "name,title,brands,categories,priceInfo,colorInfo,availability,images,attributes.material,attributes.ecofriendly,attributes.style,attributes.collection,uri","attributes":[ {"key":"collection", "value": {"indexable": "true","numbers": [2022.0]}},{"key":"material", "value": {"indexable": "true","searchable": "true","text": ["Polyester","Membrane"]}},{"key":"ecofriendly", "value": {"indexable": "false","searchable": "false","text": ["Low-impact fabrics","recycled fabrics","recycled packaging","plastic-free packaging","ethically made"]}},{"key":"style", "value": {"indexable": "true","searchable": "true","text": ["Sport","Functional"]}}],"uri": "https://shop.googlemerchandisestore.com/Google+Redesign/Apparel/Android+Iconic+Sock"} \ No newline at end of file diff --git a/samples/interactive-tutorials/resources/user_events.json b/samples/interactive-tutorials/resources/user_events.json deleted file mode 100644 index 87ee6d05..00000000 --- a/samples/interactive-tutorials/resources/user_events.json +++ /dev/null @@ -1,4 +0,0 @@ -{"eventType":"home-page-view","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00"} -{"eventType":"search","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00","searchQuery":"RockerJeans teenagers blue jeans"} -{"eventType":"search","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00","searchQuery":"SocksUnlimited teenagers black socks"} -{"eventType":"detail-page-view","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00","productDetails":{"product":{"id":"GGCOGAEC100616"},"quantity":3}} diff --git a/samples/interactive-tutorials/resources/user_events_some_invalid.json b/samples/interactive-tutorials/resources/user_events_some_invalid.json deleted file mode 100644 index 164d9f34..00000000 --- a/samples/interactive-tutorials/resources/user_events_some_invalid.json +++ /dev/null @@ -1,4 +0,0 @@ -{"eventType":"home-page-view","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00"} -{"eventType":"invalid","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00","searchQuery":"RockerJeans teenagers blue jeans"} -{"eventType":"search","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00","searchQuery":"SocksUnlimited teenagers black socks"} -{"eventType":"detail-page-view","visitorId":"bjbs_group1_visitor1","eventTime":"2022-02-23T10:27:42+00:00","productDetails":{"product":{"id":"GGCOGAEC100616"},"quantity":3}} diff --git a/samples/interactive-tutorials/search/noxfile.py b/samples/interactive-tutorials/search/noxfile.py deleted file mode 100644 index de104dbc..00000000 --- a/samples/interactive-tutorials/search/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# 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. - -from __future__ import print_function - -import glob -import os -from pathlib import Path -import sys -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/samples/interactive-tutorials/search/noxfile_config.py b/samples/interactive-tutorials/search/noxfile_config.py deleted file mode 100644 index eeab78b4..00000000 --- a/samples/interactive-tutorials/search/noxfile_config.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 2020 Google LLC -# -# 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. - -# Default TEST_CONFIG_OVERRIDE for python repos. - -# The source of truth: -# https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/noxfile_config.py - -TEST_CONFIG_OVERRIDE = { - # You can opt out from the test for specific Python versions. - "ignored_versions": ["2.7", "3.6"], - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {"BUCKET_NAME": "retail-interactive-tutorials"}, -} diff --git a/samples/interactive-tutorials/search/requirements-test.txt b/samples/interactive-tutorials/search/requirements-test.txt deleted file mode 100644 index fcf47a89..00000000 --- a/samples/interactive-tutorials/search/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest==7.4.0 -pytest-xdist==3.3.1 diff --git a/samples/interactive-tutorials/search/requirements.txt b/samples/interactive-tutorials/search/requirements.txt deleted file mode 100644 index 2c895971..00000000 --- a/samples/interactive-tutorials/search/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -google==3.0.0 -google-cloud-retail==1.16.2 -google-cloud-storage==2.10.0 -google-cloud-bigquery==3.11.4 \ No newline at end of file diff --git a/samples/interactive-tutorials/search/search_simple_query.py b/samples/interactive-tutorials/search/search_simple_query.py deleted file mode 100644 index 61725b8a..00000000 --- a/samples/interactive-tutorials/search/search_simple_query.py +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# - -import google.auth -from google.cloud.retail import SearchRequest, SearchServiceClient - -project_id = google.auth.default()[1] - - -# get search service request: -def get_search_request(query: str): - default_search_placement = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/placements/default_search" - ) - - search_request = SearchRequest() - search_request.placement = default_search_placement # Placement is used to identify the Serving Config name. - search_request.query = query - search_request.visitor_id = "123456" # A unique identifier to track visitors - search_request.page_size = 10 - - print("---search request:---") - print(search_request) - - return search_request - - -# call the Retail Search: -def search(): - # TRY DIFFERENT QUERY PHRASES HERE: - query_phrase = "Hoodie" - - search_request = get_search_request(query_phrase) - search_response = SearchServiceClient().search(search_request) - - print("---search response---") - if not search_response.results: - print("The search operation returned no matching results.") - else: - print(search_response) - return search_response - - -search() diff --git a/samples/interactive-tutorials/search/search_simple_query_test.py b/samples/interactive-tutorials/search/search_simple_query_test.py deleted file mode 100644 index f7f6277f..00000000 --- a/samples/interactive-tutorials/search/search_simple_query_test.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# -import re -import subprocess - -from search_simple_query import search - - -def test_search_simple_query_pass(): - output = str(subprocess.check_output("python search_simple_query.py", shell=True)) - - assert re.match(".*search request.*", output) - assert re.match(".*search response.*", output) - # check the response contains some products - assert re.match(".*results.*id.*", output) - - -def test_search_simple_query_response(): - response = search() - - assert len(response.results) == 10 - product_title = response.results[0].product.title - assert re.match(".*Hoodie.*", product_title) diff --git a/samples/interactive-tutorials/search/search_with_boost_spec.py b/samples/interactive-tutorials/search/search_with_boost_spec.py deleted file mode 100644 index 6b7789c9..00000000 --- a/samples/interactive-tutorials/search/search_with_boost_spec.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog, rerank the -# results boosting or burying the products that match defined condition. -# - -import google.auth -from google.cloud.retail import SearchRequest, SearchServiceClient - -project_id = google.auth.default()[1] - - -# get search service request: -def get_search_request(query: str, condition: str, boost_strength: float): - default_search_placement = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/placements/default_search" - ) - - condition_boost_spec = SearchRequest.BoostSpec.ConditionBoostSpec() - condition_boost_spec.condition = condition - condition_boost_spec.boost = boost_strength - - boost_spec = SearchRequest.BoostSpec() - boost_spec.condition_boost_specs = [condition_boost_spec] - - search_request = SearchRequest() - search_request.placement = default_search_placement # Placement is used to identify the Serving Config name. - search_request.query = query - search_request.visitor_id = "123456" # A unique identifier to track visitors - search_request.boost_spec = boost_spec - search_request.page_size = 10 - - print("---search request---") - print(search_request) - - return search_request - - -# call the Retail Search: -def search(): - # TRY DIFFERENT CONDITIONS HERE: - condition = '(colorFamilies: ANY("Blue"))' - boost = 0.0 - - search_request = get_search_request("Tee", condition, boost) - search_response = SearchServiceClient().search(search_request) - print("---search response---") - if not search_response.results: - print("The search operation returned no matching results.") - else: - print(search_response) - return search_response - - -search() diff --git a/samples/interactive-tutorials/search/search_with_boost_spec_test.py b/samples/interactive-tutorials/search/search_with_boost_spec_test.py deleted file mode 100644 index ce263f18..00000000 --- a/samples/interactive-tutorials/search/search_with_boost_spec_test.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# -import re -import subprocess - -from search_with_boost_spec import search - - -def test_search_with_boost_spec_pass(): - output = str( - subprocess.check_output("python search_with_boost_spec.py", shell=True) - ) - - assert re.match(".*search request.*", output) - assert re.match(".*search response.*", output) - # check the response contains some products - assert re.match(".*results.*id.*", output) - - -def test_search_with_boost_spec(): - response = search() - - assert len(response.results) == 10 - product_title = response.results[0].product.title - assert re.match(".*Tee.*", product_title) diff --git a/samples/interactive-tutorials/search/search_with_facet_spec.py b/samples/interactive-tutorials/search/search_with_facet_spec.py deleted file mode 100644 index 0088feb8..00000000 --- a/samples/interactive-tutorials/search/search_with_facet_spec.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog with facets. -# -import google.auth -from google.cloud.retail import SearchRequest, SearchServiceClient - -project_id = google.auth.default()[1] - - -# get search service request: -def get_search_request(query: str, facet_key_param: str): - default_search_placement = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/placements/default_search" - ) - # PUT THE INTERVALS HERE: - facet_key = SearchRequest.FacetSpec().FacetKey() - facet_key.key = facet_key_param - - facet_spec = SearchRequest.FacetSpec() - facet_spec.facet_key = facet_key - - search_request = SearchRequest() - search_request.placement = default_search_placement # Placement is used to identify the Serving Config name. - search_request.query = query - search_request.visitor_id = "123456" # A unique identifier to track visitors - search_request.facet_specs = [facet_spec] - search_request.page_size = 10 - - print("---search request---") - print(search_request) - - return search_request - - -# call the Retail Search: -def search(): - # TRY DIFFERENT FACETS HERE: - facet_key = "colorFamilies" - - search_request = get_search_request("Tee", facet_key) - search_response = SearchServiceClient().search(search_request) - print("---search response---") - if not search_response.results: - print("The search operation returned no matching results.") - else: - print(search_response) - print("---facets:---") - print(search_response.facets) - return search_response - - -search() diff --git a/samples/interactive-tutorials/search/search_with_facet_spec_test.py b/samples/interactive-tutorials/search/search_with_facet_spec_test.py deleted file mode 100644 index 0c30561e..00000000 --- a/samples/interactive-tutorials/search/search_with_facet_spec_test.py +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# -import re -import subprocess - -from search_with_facet_spec import search - - -def test_search_with_filtering_pass(): - output = str( - subprocess.check_output("python search_with_facet_spec.py", shell=True) - ) - - assert re.match(".*search request.*", output) - assert re.match(".*search response.*", output) - # check the response contains some products - assert re.match(".*results.*id.*", output) - assert re.match(".*facets.*?colorFamilies.*", output) - - -def test_search_with_filtering(): - response = search() - - assert len(response.results) == 10 - product_title = response.results[0].product.title - assert re.match(".*Tee.*", product_title) - assert response.facets[0].key == "colorFamilies" diff --git a/samples/interactive-tutorials/search/search_with_filtering.py b/samples/interactive-tutorials/search/search_with_filtering.py deleted file mode 100644 index 13b02e10..00000000 --- a/samples/interactive-tutorials/search/search_with_filtering.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog, filter the results by different product fields. -# - -import google.auth -from google.cloud.retail import SearchRequest, SearchServiceClient - -project_id = google.auth.default()[1] - - -# get search service request: -def get_search_request(query: str, _filter: str): - default_search_placement = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/placements/default_search" - ) - - search_request = SearchRequest() - search_request.placement = default_search_placement # Placement is used to identify the Serving Config name. - search_request.query = query - search_request.filter = _filter - search_request.page_size = 10 - search_request.visitor_id = "123456" # A unique identifier to track visitors - search_request.page_size = 10 - - print("---search request:---") - print(search_request) - - return search_request - - -# call the Retail Search: -def search(): - # TRY DIFFERENT FILTER EXPRESSIONS HERE: - filter_ = '(colorFamilies: ANY("Black"))' - - search_request = get_search_request("Tee", filter_) - search_response = SearchServiceClient().search(search_request) - print("---search response---") - if not search_response.results: - print("The search operation returned no matching results.") - else: - print(search_response) - return search_response - - -search() diff --git a/samples/interactive-tutorials/search/search_with_filtering_test.py b/samples/interactive-tutorials/search/search_with_filtering_test.py deleted file mode 100644 index 5a3a46f9..00000000 --- a/samples/interactive-tutorials/search/search_with_filtering_test.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# -import re -import subprocess - -from search_with_filtering import search - - -def test_search_with_filtering_pass(): - output = str(subprocess.check_output("python search_with_filtering.py", shell=True)) - - assert re.match(".*search request.*", output) - assert re.match(".*search response.*", output) - # check the response contains some products - assert re.match(".*results.*id.*", output) - - -def test_search_with_filtering(): - response = search() - - assert len(response.results) == 10 - product_title = response.results[0].product.title - assert re.match(".*Tee.*", product_title) - assert re.match(".*Black.*", product_title) - assert "Black" in response.results[0].product.color_info.color_families diff --git a/samples/interactive-tutorials/search/search_with_ordering.py b/samples/interactive-tutorials/search/search_with_ordering.py deleted file mode 100644 index 6e274345..00000000 --- a/samples/interactive-tutorials/search/search_with_ordering.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog, order the results by different product fields. -# - -import google.auth -from google.cloud.retail import SearchRequest, SearchServiceClient - -project_id = google.auth.default()[1] - - -# get search service request: -def get_search_request(query: str, order: str): - default_search_placement = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/placements/default_search" - ) - - search_request = SearchRequest() - search_request.placement = default_search_placement - search_request.query = query - search_request.order_by = order - search_request.visitor_id = "123456" # A unique identifier to track visitors - search_request.page_size = 10 - - print("---search request---") - print(search_request) - - return search_request - - -# call the Retail Search: -def search(): - # TRY DIFFERENT ORDERING EXPRESSIONS HERE: - order = "price desc" - - search_request = get_search_request("Hoodie", order) - search_response = SearchServiceClient().search(search_request) - - print("---search response---") - if not search_response.results: - print("The search operation returned no matching results.") - else: - print(search_response) - return search_response - - -search() diff --git a/samples/interactive-tutorials/search/search_with_ordering_test.py b/samples/interactive-tutorials/search/search_with_ordering_test.py deleted file mode 100644 index 3783d483..00000000 --- a/samples/interactive-tutorials/search/search_with_ordering_test.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# -import re -import subprocess - -from search_with_ordering import search - - -def test_search_with_ordering_pass(): - output = str(subprocess.check_output("python search_with_ordering.py", shell=True)) - - assert re.match(".*search request.*", output) - assert re.match(".*search response.*", output) - # check the response contains some products - assert re.match(".*results.*id.*", output) - - -def test_search_with_ordering(): - response = search() - - assert len(response.results) == 10 - assert response.results[0].product.price_info.price == 39 diff --git a/samples/interactive-tutorials/search/search_with_pagination.py b/samples/interactive-tutorials/search/search_with_pagination.py deleted file mode 100644 index 1b9709ed..00000000 --- a/samples/interactive-tutorials/search/search_with_pagination.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog, -# limit the number of the products per page and go to the next page using "next_page_token" -# or jump to chosen page using "offset". -# - -import google.auth -from google.cloud.retail import SearchRequest, SearchServiceClient - -project_id = google.auth.default()[1] - - -# get search service request: -def get_search_request(query: str, page_size: int, offset: int, next_page_token: str): - default_search_placement = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/placements/default_search" - ) - - search_request = SearchRequest() - search_request.placement = default_search_placement - search_request.visitor_id = "123456" # A unique identifier to track visitors - search_request.query = query - search_request.page_size = page_size - search_request.offset = offset - search_request.page_token = next_page_token - - print("---search request:---") - print(search_request) - - return search_request - - -# call the Retail Search: -def search(): - # TRY DIFFERENT PAGINATION PARAMETERS HERE: - page_size = 6 - offset = 0 - page_token = "" - - search_request_first_page = get_search_request( - "Hoodie", page_size, offset, page_token - ) - search_response_first_page = SearchServiceClient().search(search_request_first_page) - - print("---search response---") - if not search_response_first_page.results: - print("The search operation returned no matching results.") - else: - print(search_response_first_page) - - # PASTE CALL WITH NEXT PAGE TOKEN HERE: - - # PASTE CALL WITH OFFSET HERE: - - return search_response_first_page - - -search() diff --git a/samples/interactive-tutorials/search/search_with_pagination_test.py b/samples/interactive-tutorials/search/search_with_pagination_test.py deleted file mode 100644 index 3255313f..00000000 --- a/samples/interactive-tutorials/search/search_with_pagination_test.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# -import re -import subprocess - -from search_with_pagination import search - - -def test_search_with_pagination_pass(): - output = str( - subprocess.check_output("python search_with_pagination.py", shell=True) - ) - - assert re.match(".*search request.*", output) - assert re.match(".*search response.*", output) - # check the response contains some products - assert re.match(".*results.*id.*", output) - - -def test_search_with_pagination(): - response = search() - - product_title = response.results[0].product.title - assert re.match(".*Hoodie", product_title) - assert len(response.results) == 6 diff --git a/samples/interactive-tutorials/search/search_with_query_expansion_spec.py b/samples/interactive-tutorials/search/search_with_query_expansion_spec.py deleted file mode 100644 index 0cdfb5a8..00000000 --- a/samples/interactive-tutorials/search/search_with_query_expansion_spec.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog, -# enabling the query expansion feature to let the Google Retail Search build an automatic query expansion. -# - -import google.auth -from google.cloud.retail import SearchRequest, SearchServiceClient - -project_id = google.auth.default()[1] - - -# get search service request: -def get_search_request( - query: str, condition: SearchRequest.QueryExpansionSpec.Condition -): - default_search_placement = ( - "projects/" - + project_id - + "/locations/global/catalogs/default_catalog/placements/default_search" - ) - - query_expansion_spec = SearchRequest().QueryExpansionSpec() - query_expansion_spec.condition = condition - - search_request = SearchRequest() - search_request.placement = default_search_placement # Placement is used to identify the Serving Config name. - search_request.query = query - search_request.visitor_id = "123456" # A unique identifier to track visitors - search_request.query_expansion_spec = query_expansion_spec - search_request.page_size = 10 - - print("---search request:---") - print(search_request) - - return search_request - - -# call the Retail Search: -def search(): - # TRY DIFFERENT QUERY EXPANSION CONDITION HERE: - condition = SearchRequest.QueryExpansionSpec.Condition.AUTO - - search_request = get_search_request("Google Youth Hero Tee Grey", condition) - search_response = SearchServiceClient().search(search_request) - - print("---search response---") - if not search_response.results: - print("The search operation returned no matching results.") - else: - print(search_response) - return search_response - - -search() diff --git a/samples/interactive-tutorials/search/search_with_query_expansion_spec_test.py b/samples/interactive-tutorials/search/search_with_query_expansion_spec_test.py deleted file mode 100644 index bd2af583..00000000 --- a/samples/interactive-tutorials/search/search_with_query_expansion_spec_test.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -# Call Retail API to search for a products in a catalog using only search query. -# -import re -import subprocess - -from search_with_query_expansion_spec import search - - -def test_search_with_query_expansion_spec_pass(): - output = str( - subprocess.check_output( - "python search_with_query_expansion_spec.py", shell=True - ) - ) - - assert re.match(".*search request.*", output) - assert re.match(".*search response.*", output) - # check the response contains some products - assert re.match(".*results.*id.*", output) - - -def test_search_with_query_expansion_spec(): - response = search() - - assert response.query_expansion_info.expanded_query is True diff --git a/samples/interactive-tutorials/test_resources_recovery/create_test_resources.py b/samples/interactive-tutorials/test_resources_recovery/create_test_resources.py deleted file mode 100644 index 756bb4fe..00000000 --- a/samples/interactive-tutorials/test_resources_recovery/create_test_resources.py +++ /dev/null @@ -1,202 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import os -import re -import shlex -import subprocess -import time - -import google.auth -from google.cloud import storage -from google.cloud.retail import GcsSource, ImportErrorsConfig, \ - ImportProductsRequest, ProductInputConfig -from google.cloud.retail import ProductServiceClient -from google.cloud.storage.bucket import Bucket - -products_bucket_name = os.environ['BUCKET_NAME'] -events_bucket_name = os.environ['EVENTS_BUCKET_NAME'] -project_id = google.auth.default()[1] - -product_resource_file = "../resources/products.json" -events_source_file = "../resources/user_events.json" - -product_dataset = "products" -product_table = "products" -product_schema = "../resources/product_schema.json" -events_dataset = "user_events" -events_table = "events" -events_schema = "../resources/events_schema.json" - -object_name = re.search('resources/(.*?)$', product_resource_file).group(1) -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog/branches/default_branch" - -storage_client = storage.Client() - - -def create_bucket(bucket_name: str) -> Bucket: - """Create a new bucket in Cloud Storage""" - print("Creating new bucket:" + bucket_name) - bucket_exists = check_if_bucket_exists(bucket_name) - if bucket_exists: - print(f"Bucket {bucket_name} already exists") - return storage_client.bucket(bucket_name) - else: - bucket = storage_client.bucket(bucket_name) - bucket.storage_class = "STANDARD" - new_bucket = storage_client.create_bucket(bucket, location="us") - print( - f"Created bucket {new_bucket.name} in {new_bucket.location} with storage class {new_bucket.storage_class}" - ) - return new_bucket - - -def check_if_bucket_exists(new_bucket_name): - """Check if bucket is already exists""" - bucket_exists = False - buckets = storage_client.list_buckets() - for bucket in buckets: - if bucket.name == new_bucket_name: - bucket_exists = True - break - return bucket_exists - - -def upload_data_to_bucket(bucket: Bucket): - """Upload data to a GCS bucket""" - blob = bucket.blob(object_name) - blob.upload_from_filename(product_resource_file) - print(f"Data from {product_resource_file} has being uploaded to {bucket.name}") - - -def get_import_products_gcs_request(): - """Get import products from gcs request""" - gcs_bucket = f"gs://{products_bucket_name}" - gcs_errors_bucket = f"{gcs_bucket}/error" - - gcs_source = GcsSource() - gcs_source.input_uris = [f"{gcs_bucket}/{object_name}"] - - input_config = ProductInputConfig() - input_config.gcs_source = gcs_source - - errors_config = ImportErrorsConfig() - errors_config.gcs_prefix = gcs_errors_bucket - - import_request = ImportProductsRequest() - import_request.parent = default_catalog - import_request.reconciliation_mode = ImportProductsRequest.ReconciliationMode.INCREMENTAL - import_request.input_config = input_config - import_request.errors_config = errors_config - - print("---import products from google cloud source request---") - print(import_request) - - return import_request - - -def import_products_from_gcs(): - """Call the Retail API to import products""" - import_gcs_request = get_import_products_gcs_request() - gcs_operation = ProductServiceClient().import_products( - import_gcs_request) - print( - f"Import operation is started: {gcs_operation.operation.name}") - - while not gcs_operation.done(): - print("Please wait till operation is completed") - time.sleep(30) - print("Import products operation is completed") - - if gcs_operation.metadata is not None: - print("Number of successfully imported products") - print(gcs_operation.metadata.success_count) - print("Number of failures during the importing") - print(gcs_operation.metadata.failure_count) - else: - print("Operation.metadata is empty") - - print( - "Wait 2 -5 minutes till products become indexed in the catalog,\ -after that they will be available for search") - - -def create_bq_dataset(dataset_name): - """Create a BigQuery dataset""" - print(f"Creating dataset {dataset_name}") - try: - list_bq_dataset(project_id, dataset_name) - print(f"dataset {dataset_name} already exists") - except subprocess.CalledProcessError: - create_dataset_command = f'bq --location=US mk -d --default_table_expiration 3600 --description "This is my dataset." {project_id}:{dataset_name}' - subprocess.check_output(shlex.split(create_dataset_command)) - print("dataset is created") - - -def list_bq_dataset(project_id: str, dataset_name: str): - """List BigQuery dataset in the project""" - list_dataset_command = f"bq show {project_id}:{dataset_name}" - dataset_name = subprocess.check_output(shlex.split(list_dataset_command)) - return str(dataset_name) - - -def create_bq_table(dataset, table_name, schema): - """Create a BigQuery table""" - print(f"Creating BigQuery table {table_name}") - if table_name not in list_bq_tables(dataset): - create_table_command = f"bq mk --table {project_id}:{dataset}.{table_name} {schema}" - output = subprocess.check_output(shlex.split(create_table_command)) - print(output) - print("table is created") - else: - print(f"table {table_name} already exists") - - -def list_bq_tables(dataset): - """List BigQuery tables in the dataset""" - list_tables_command = f"bq ls {project_id}:{dataset}" - tables = subprocess.check_output(shlex.split(list_tables_command)) - return str(tables) - - -def upload_data_to_bq_table(dataset, table_name, source, schema): - """Upload data to the table from specified source file""" - print(f"Uploading data from {source} to the table {dataset}.{table_name}") - upload_data_command = f"bq load --source_format=NEWLINE_DELIMITED_JSON {project_id}:{dataset}.{table_name} {source} {schema}" - output = subprocess.check_output(shlex.split(upload_data_command)) - print(output) - - -# Create a GCS bucket with products.json file -created_products_bucket = create_bucket(products_bucket_name) -upload_data_to_bucket(created_products_bucket) - -# Create a GCS bucket with user_events.json file -created_events_bucket = create_bucket(events_bucket_name) -upload_data_to_bucket(created_events_bucket) - -# Import prodcuts from the GCS bucket to the Retail catalog -import_products_from_gcs() - -# Create a BigQuery table with products -create_bq_dataset(product_dataset) -create_bq_table(product_dataset, product_table, product_schema) -upload_data_to_bq_table(product_dataset, product_table, - product_resource_file, product_schema) - -# Create a BigQuery table with user events -create_bq_dataset(events_dataset) -create_bq_table(events_dataset, events_table, events_schema) -upload_data_to_bq_table(events_dataset, events_table, events_source_file, - events_schema) diff --git a/samples/interactive-tutorials/test_resources_recovery/remove_test_resources.py b/samples/interactive-tutorials/test_resources_recovery/remove_test_resources.py deleted file mode 100644 index 63e6d64f..00000000 --- a/samples/interactive-tutorials/test_resources_recovery/remove_test_resources.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -import os -import shlex -import subprocess - -from google.api_core.exceptions import NotFound, PermissionDenied -import google.auth -from google.cloud import storage -from google.cloud.retail import DeleteProductRequest, ListProductsRequest, \ - ProductServiceClient -from google.cloud.storage.bucket import Bucket - - -project_id = google.auth.default()[1] -product_bucket_name = os.environ['BUCKET_NAME'] -events_bucket_name = os.environ['EVENTS_BUCKET_NAME'] - -product_dataset = "products" -events_dataset = "user_events" - -default_catalog = f"projects/{project_id}/locations/global/catalogs/default_catalog/branches/default_branch" - -storage_client = storage.Client() - - -def delete_bucket(bucket_name): - """Delete bucket""" - try: - bucket = storage_client.get_bucket(bucket_name) - except NotFound: - print(f"Bucket {bucket_name} does not exists") - else: - delete_object_from_bucket(bucket) - bucket.delete() - print(f"bucket {bucket_name} is deleted") - - -def delete_object_from_bucket(bucket: Bucket): - """Delete object from bucket""" - blobs = bucket.list_blobs() - for blob in blobs: - blob.delete() - print(f"all objects are deleted from GCS bucket {bucket.name}") - - -def delete_all_products(): - """Delete all products in the catalog""" - print("Deleting all products, please wait") - product_client = ProductServiceClient() - list_request = ListProductsRequest() - list_request.parent = default_catalog - products = product_client.list_products(list_request) - delete_count = 0 - for product in products: - delete_request = DeleteProductRequest() - delete_request.name = product.name - try: - product_client.delete_product(delete_request) - delete_count += 1 - except PermissionDenied: - print( - "Ignore PermissionDenied in case the product does not exist at time of deletion") - print(f"{delete_count} products were deleted from {default_catalog}") - - -def delete_bq_dataset_with_tables(dataset): - """Delete a BigQuery dataset with all tables""" - delete_dataset_command = f"bq rm -r -d -f {dataset}" - output = subprocess.check_output(shlex.split(delete_dataset_command)) - print(output) - - -delete_bucket(product_bucket_name) -delete_bucket(events_bucket_name) -delete_all_products() -delete_bq_dataset_with_tables(product_dataset) -delete_bq_dataset_with_tables(events_dataset) diff --git a/samples/interactive-tutorials/user_environment_setup.sh b/samples/interactive-tutorials/user_environment_setup.sh deleted file mode 100644 index 95138d54..00000000 --- a/samples/interactive-tutorials/user_environment_setup.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash - -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -success() { - echo "=========================================" - echo "The Google Cloud setup is completed." - echo "Please proceed with the Tutorial steps" - echo "=========================================" - exit 0 -} - -failure() { - echo "=========================================" - echo "The Google Cloud setup was not completed." - echo "Please fix the errors above!" - echo "=========================================" - exit 1 -} - -# catch any error that happened during execution -trap 'failure' ERR - -# set the Google Cloud Project ID -project_id=$1 -echo "Project ID: $project_id" -gcloud config set project "$project_id" - -email=$(gcloud auth list --filter="status:ACTIVE account:$project_id.iam.gserviceaccount.com" --format="value(account)") -echo $email - -# Check if user has service account active -if [ -z "$email" ] -then - # Create a new service account - timestamp=$(date +%s) - service_account_id="service-acc-$timestamp" - echo "Service Account: $service_account_id" - gcloud iam service-accounts create "$service_account_id" -else - service_account_id="${email%@*}" - # Log out of service account - gcloud auth revoke 2>/dev/null -fi -echo "$service_account_id" - - -editor=$(gcloud projects get-iam-policy $project_id \ ---flatten="bindings[].members" \ ---format='table(bindings.role)' \ ---filter="bindings.members:$service_account_id ROLE=roles/editor") - -retail_admin=$(gcloud projects get-iam-policy $project_id \ ---flatten="bindings[].members" \ ---format='table(bindings.role)' \ ---filter="bindings.members:$service_account_id ROLE=roles/retail.admin") - - -# Check if any of the needed roles is missing -if [ -z "$editor" ] || [ -z "$retail_admin" ] -then - # Assign necessary roles to your new service account. - for role in {retail.admin,editor} - do - gcloud projects add-iam-policy-binding "$project_id" --member="serviceAccount:$service_account_id@$project_id.iam.gserviceaccount.com" --role=roles/"${role}" - done - echo "Wait ~60 seconds to be sure the appropriate roles have been assigned to your service account" - sleep 60 -fi - -# Upload your service account key file. -service_acc_email="$service_account_id@$project_id.iam.gserviceaccount.com" -gcloud iam service-accounts keys create ~/key.json --iam-account "$service_acc_email" - -# Activate the service account using the key. -gcloud auth activate-service-account --key-file ~/key.json - -'success' diff --git a/samples/interactive-tutorials/user_import_data_to_catalog.sh b/samples/interactive-tutorials/user_import_data_to_catalog.sh deleted file mode 100644 index b4d85217..00000000 --- a/samples/interactive-tutorials/user_import_data_to_catalog.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# Copyright 2022 Google Inc. All Rights Reserved. -# -# 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. - -{ - # Create a GCS bucket and upload the product data to the bucket - output=$(python ~/cloudshell_open/python-retail/samples/interactive-tutorials/product/setup_product/products_create_gcs_bucket.py) - - # Get the bucket name and store it in the env variable BUCKET_NAME - temp="${output#*The gcs bucket }" - bucket_name="${temp% was created*}" - export BUCKET_NAME=$bucket_name - - # Import products to the Retail catalog - python ~/cloudshell_open/python-retail/samples/interactive-tutorials/product/import_products_gcs.py -} && { - # Print success message - echo "=====================================" - echo "Your Retail catalog is ready to use!" - echo "=====================================" -} || { - # Print error message - echo "=====================================" - echo "Your Retail catalog wasn't created! Please fix the errors above!" - echo "=====================================" -}