必須フィールドと推奨フィールド
以下に、記述子ファイルとイベントフィードにそれぞれ必要なフィールドと推奨されるフィールドを示します。言及されていないフィールドはすべて省略可能です。
記述子ファイル
フィールド | 必須 / 推奨 | メモ |
---|---|---|
generation_timestamp |
必須 | |
name |
必須 | event.feeddata.v1 に設定する必要があります。 |
data_file |
必須 |
イベント フィード
フィールド | 会場モジュール | アーティスト / スポーツ モジュール | メモ |
---|---|---|---|
EventFeed.data |
必須 | 必須 | 空のリストにすると、すべてのデータをワイプできます。 |
Event.id |
必須 | 必須 | |
Event.description |
推奨 | 推奨 | |
Event.time_info |
必須 | 必須 | |
Event.time_info.start_seconds |
必須 | 必須 | |
Event.venue |
必須 | 必須 | |
Event.venue.id |
必須 | 必須 | |
Event.venue.location |
必須 | 必須 | ロケーションを指定するには、次のいずれかを入力する必要があります。Event.venue.location.place_id Event.venue.location.place_info Event.venue.location.business_profile_id |
Event.related_entities |
推奨 | 必須 | |
Event.tickets |
チケットが利用可能な場合に必須 | チケットが利用可能な場合に必須 | |
Event.related_media |
推奨 | 推奨 | |
Event.url |
必須 | 必須 | |
Event.event_creator |
ユーザー作成コンテンツの場合に必須 | ユーザー作成コンテンツの場合に必須 | |
Entity.id |
推奨 | 推奨 | |
Entity.name |
必須 | 必須 | |
Entity.official_website_url |
推奨 | 推奨 | |
Entity.url |
推奨 | 推奨 | |
Entity.musicbrainz_id |
音楽アーティストにおすすめ | 音楽アーティストにおすすめ | |
Entity.entity_type |
省略可 | 推奨 | |
Entity.performer_role |
省略可 | 推奨 | |
Ticket.id |
必須 | 必須 | |
Ticket.title |
推奨 | 推奨 | |
Ticket.description |
推奨 | 推奨 | |
Ticket.referral_urls |
必須 | 必須 | 指定する URL は、http:// を含むフルパスである必要があります。TinyURL などのリダイレクト サービスは、安全上の理由から使用できません。 |
Ticket.price |
推奨 | 推奨 | 料金を送信する場合、チケットの料金に手数料が含まれていない場合は、手数料の内訳が必要です。 |
Ticket.availability_info |
推奨 | 推奨 | 時刻は UNIX タイムスタンプであるため、イベント時刻は同等の UTC 時刻に変換する必要があります。 |
Ticket.inventory_type |
推奨 | 推奨 |
記述子ファイルの仕様
記述子ファイルは、アップロードするフィードタイプをシステムに通知するためにアップロードされます。これにより、フィードが正しく検証され、処理されます。記述子ファイルはフィード コンテンツの前にアップロードする必要があります。また、次の命名要件を満たしている必要があります。
- 記述子ファイルには、ファイル拡張子 .filesetdesc.json を使用する必要があります。
- 各記述子のファイル名は一意である必要があり、アップロード間で再利用することはできません。ファイル名には、生成タイムスタンプとフィード名を含めることをおすすめします。
- 例: event.feeddata.v1_1524606581.filesetdesc.json
各記述子ファイルには、関連するフィード名の最新フィード内のすべてのデータファイルを一覧表示する必要があります。
.proto
message FilesetDescriptor {
// The timestamp at which this feed was generated, in Unix time format
// (seconds since the epoch). (required)
int64 generation_timestamp = 1;
// Identifies the name of this feed. (required)
string name = 2;
// Paths (relative to the dropbox root) specifying data files included in this
// feed. (required)
repeated string data_file = 3;
}
例
{
"generation_timestamp": 1524606581,
"name": "event.feeddata.v1",
"data_file": [
"file1_1524606581_1.json",
"file2_1524606581_2.json"
]
}
JSON フィード仕様
JSON フィード仕様では、パートナーが使用するイベントフィードのコンテンツの形式を定義します。
EventFeed の定義
.proto
message EventFeed {
// List of the events.
repeated Event data = 1;
}
例
{
"data": [
{
"id": "123456-abc",
"title": {
"localized_texts": [
{
"text": "Summer Concert Series",
"language_code": "en-US"
},
{
"text": "Serie de conciertos de verano",
"language_code": "es-ES"
}
]
},
"description": {
"localized_texts": [
{
"text": "<h1>Summer Concert Series</h1><p>Join us for our annual summer concert series featuring a variety of local artists.</p>",
"language_code": "en-US"
}
]
},
"time_info": {
"start_seconds": 1695686400,
"end_seconds": 1695700800,
"door_open_seconds": 1695684600
},
"venue": {
"id": "example_1",
"location": {
"place_info": {
"name": "A place",
"structured_address": {
"country_code": "US",
"postal_code": "94043",
"locality": "Mountain View",
"street_address": "1600 Amphitheatre Pkwy"
}
}
}
},
"related_entities": [
{
"id": "7890",
"name": {
"text": "The Music Band",
"language_code": "en-US"
},
"entity_type": "ENTITY_TYPE_PERFORMER_MUSICIAN",
"performer_role": "PERFORMER_ROLE_HEADLINER"
}
],
"event_types": ["EVENT_TYPE_CONCERT"],
"tickets": [
{
"id": "general-admission",
"title": {
"localized_texts": [
{
"text": "General Admission",
"language_code": "en-US"
}
]
},
"inventory_type": "INVENTORY_TYPE_PRIMARY",
"seller_info": {
"name": {
"localized_texts": [
{
"text": "Example Seller",
"language_code": "en-US"
}
]
},
"logo_url": "https://www.example.com/images/fav-icon.png"
},
"referral_urls": [
{
"link": {
"url": "https://www.example.com/tickets/123456-abc/general-admission"
},
"surface": "SURFACE_SEARCH"
}
],
"price": {
"value": {
"currency_code": "USD",
"units": 25,
"nanos": 190000000
},
"per_ticket_fee": {
"currency_code": "USD",
"units": 0
},
"per_ticket_tax": {
"currency_code": "USD",
"units": 0
},
"price_display_type": "PRICE_DISPLAY_TYPE_ALL_IN"
},
"availability_info": {
"spots_available": 100
}
}
],
"related_media": [
{
"url": "https://www.example.com/images/summer-concert-series.jpg",
"type": "MEDIA_TYPE_PHOTO"
}
],
"event_url": {
"url": "https://www.example.com/events/123456-abc",
"localized_url": {
"localized_texts": [
{
"text": "https://www.example.com/events/123456-abc?hl=en-US",
"language_code": "en-US"
},
{
"text": "https://www.example.com/events/123456-abc?hl=es-ES",
"language_code": "es-ES"
}
]
}
}
},
{
"id": "987654-xyz",
"title": {
"localized_texts": [
{
"text": "Music Festival",
"language_code": "en-US"
}
]
},
"description": {
"localized_texts": [
{
"text": "<h2>Music Festival</h2><p>Come and experience a weekend of live music, food, and fun at our annual music festival.</p>",
"language_code": "en-US"
}
]
},
"time_info": {
"start_seconds": 1696118400,
"end_seconds": 1696132800
},
"venue": {
"id": "example_2",
"location": {
"place_id": "ChIJZQ9p9bUuEmsRRo6LwtmQvXU"
}
},
"related_entities": [
{
"id": "4567",
"name": {
"text": "Pop Superstar",
"language_code": "en-US"
},
"entity_type": "ENTITY_TYPE_PERFORMER_MUSICIAN"
}
],
"event_types": ["EVENT_TYPE_CONCERT"],
"tickets": [
{
"id": "single-day-pass",
"title": {
"localized_texts": [
{
"text": "Single Day Pass",
"language_code": "en-US"
}
]
},
"inventory_type": "INVENTORY_TYPE_PRIMARY",
"referral_urls": [
{
"link": {
"url": "https://www.example.com/tickets/987654-xyz/single-day-pass"
}
}
],
"price": {
"value": {
"currency_code": "USD",
"units": 99,
"nanos": 990000000
},
"per_ticket_fee": {
"currency_code": "USD",
"units": 5,
"nanos": 990000000
},
"per_ticket_tax": {
"currency_code": "USD",
"units": 1,
"nanos": 750000000
},
"price_display_type": "PRICE_DISPLAY_TYPE_BASE"
},
"availability_info": {
"spots_available": 500
}
}
],
"event_url": {
"url": "https://www.example.com/events/987654-xyz"
}
},
{
"id": "987654-1234567",
"title": {
"localized_texts": [
{
"text": "Team Red vs Team Blue",
"language_code": "en-US"
}
]
},
"description": {
"localized_texts": [
{
"text": "<h2>Sports match between two teams.</p>",
"language_code": "en-US"
}
]
},
"time_info": {
"start_seconds": 1696118400,
"end_seconds": 1696132800
},
"venue": {
"id": "example_3",
"location": {
"place_id": "ChIJZQ9p9bUuEmsRRo6LwtmQvXU"
}
},
"related_entities": [
{
"id": "4567",
"name": {
"text": "Team Red",
"language_code": "en-US"
},
"official_website_url": "https://www.example.com/team-red",
"entity_type": "ENTITY_TYPE_PERFORMER_SPORTS_TEAM",
"performer_role": "PERFORMER_ROLE_HOME_TEAM"
},
{
"id": "4568",
"name": {
"text": "Team Blue",
"language_code": "en-US"
},
"official_website_url": "https://www.example.com/team-blue",
"entity_type": "ENTITY_TYPE_PERFORMER_SPORTS_TEAM",
"performer_role": "PERFORMER_ROLE_AWAY_TEAM"
}
],
"event_types": ["EVENT_TYPE_SPORTS"],
"tickets": [
{
"id": "single-match-pass",
"title": {
"localized_texts": [
{
"text": "Single Match Pass",
"language_code": "en-US"
}
]
},
"inventory_type": "INVENTORY_TYPE_PRIMARY",
"referral_urls": [
{
"link": {
"url": "https://www.example.com/tickets/987654-xyz/single-day-pass"
}
}
],
"price": {
"value": {
"currency_code": "USD",
"units": 99,
"nanos": 990000000
},
"per_ticket_fee": {
"currency_code": "USD",
"units": 5,
"nanos": 990000000
},
"per_ticket_tax": {
"currency_code": "USD",
"units": 1,
"nanos": 750000000
},
"price_display_type": "PRICE_DISPLAY_TYPE_BASE"
},
"availability_info": {
"spots_available": 500
}
}
],
"event_url": {
"url": "https://www.example.com/events/987654-xyz"
}
}
]
}
イベントの定義
.proto
// Represents a single event.
message Event {
// Unique across the feed.
// Max length: 255. Allowed characters are alphanumeric, _, and -.
// Required.
string id = 1
;
// The title of the event in plain text.
// "und" (undefined) language code should be used as a fallback.
// Recommended to not exceed length of 50 in any language.
// Max length: 150.
// Required.
LocalizedTextSet title = 2
;
// The description of the event. Limited formatting options are allowed in the
// HTML format. Supported tags:
// * h1-h5
// * ul, ol, li
// * strong, italic, em
// * p, br
// Other tags are not supported and will be removed. CSS, tables, style
// property, `a` links are not supported. Images are not allowed, use the
// related_media field instead.
// Recommended to not exceed length of 10000 in any language.
// Max length: 16000.
// Recommended.
LocalizedTextSet description = 3
;
// Detailed timing information for the event.
// Required.
TimeInfo time_info = 4
;
// The physical location where the event is held.
// Required.
Location venue = 5
;
// List of the performing or related entities in the Event. These are meant to
// reflect the artist/team/group/etc that a person might see on the ticket or
// broader concepts (e.g. concert tours, festivals).
// Max number of entities: 100.
// Strongly recommended.
repeated Entity related_entities = 6
;
enum EventType {
// Not specified. Do not use.
EVENT_TYPE_UNSPECIFIED = 0;
EVENT_TYPE_CONCERT = 1;
EVENT_TYPE_SPORTS = 2;
EVENT_TYPE_THEATER = 3;
EVENT_TYPE_WORKSHOP = 4;
EVENT_TYPE_CONVENTION = 5;
EVENT_TYPE_TOUR = 6;
EVENT_TYPE_SHOW = 7;
EVENT_TYPE_FAIR = 8;
EVENT_TYPE_FESTIVAL = 9;
EVENT_TYPE_EXPO = 10;
}
// A list of event types that best describe the event.
// Max number of types: 5.
// Optional.
repeated EventType event_types = 14
;
// Tickets available for this event.
// Max number of tickets: 20.
// Required.
repeated Ticket tickets = 8
;
// Related media such as photos or videos.
// Max number of media: 30.
// Recommended.
repeated Media related_media = 9
;
// Provider brand name. This should be the brand that is owned by the partner.
// If partner is acting as an aggregator and the brand is not owned by them,
// they should instead set the ticket's `seller_info` field.
// "und" (undefined) language code should be used as a fallback.
// Max length: 50.
// Optional.
LocalizedTextSet brand_name = 10
;
// Landing page URL for this event. The page should include a button to start
// the booking/checkout flow.
// Do not use link.mobile_url or link.localized_mobile_url.
// Required.
DeepLink event_url = 11
;
enum PartnerRole {
PARTNER_ROLE_UNSPECIFIED = 0;
PARTNER_ROLE_OFFICIAL_SELLER = 1;
PARTNER_ROLE_AGGREGATOR = 2;
}
// Indicates the role of the partner listing the event tickets.
// Optional.
PartnerRole partner_role = 12;
// Information about the creator of the event. Only relevant for platforms
// that include user-generated content events.
message EventCreator {
// Name of the event creator.
// Max length: 100.
// Required.
string name = 1
;
}
// Information about the creator of the event. Should be used only for
// partners that include user-generated content events.
// Optional
EventCreator event_creator = 13;
}
例
{
"id": "123456-abc",
"title": {
"localized_texts": [
{
"text": "Summer Concert Series",
"language_code": "en-US"
},
{
"text": "Serie de conciertos de verano",
"language_code": "es-ES"
}
]
},
"description": {
"localized_texts": [
{
"text": "<h1>Summer Concert Series</h1><p>Join us for our annual summer concert series featuring a variety of local artists.</p>",
"language_code": "en-US"
}
]
},
"time_info": {
"start_seconds": 1695686400,
"end_seconds": 1695700800,
"door_open_seconds": 1695684600
},
"venue": {
"id": "example_1",
"location": {
"place_info": {
"name": "A place",
"structured_address": {
"country_code": "US",
"postal_code": "94043",
"locality": "Mountain View",
"street_address": "1600 Amphitheatre Pkwy"
}
}
}
},
"related_entities": [
{
"id": "7890",
"name": {
"text": "The Music Band",
"language_code": "en-US"
},
"entity_type": "ENTITY_TYPE_PERFORMER_MUSICIAN",
"performer_role": "PERFORMER_ROLE_HEADLINER"
}
],
"event_types": ["EVENT_TYPE_CONCERT"],
"tickets": [
{
"id": "general-admission",
"title": {
"localized_texts": [
{
"text": "General Admission",
"language_code": "en-US"
}
]
},
"referral_urls": [
{
"link": {
"url": "https://www.example.com/tickets/123456-abc/general-admission",
},
"surface": "SURFACE_SEARCH"
}
],
"price": {
"price": {
"currency_code": "USD",
"units": 25,
"nanos": 190000000
}
},
"availability_info": {
"spots_available": 100
},
"inventory_type": "INVENTORY_TYPE_PRIMARY"
}
],
"related_media": [
{
"url": "https://www.example.com/images/summer-concert-series.jpg",
"type": "MEDIA_TYPE_PHOTO"
}
],
"event_url": {
"url": "https://www.example.com/events/123456-abc",
"localized_url": {
"localized_texts": [
{
"text": "https://www.example.com/events/123456-abc",
"language_code": "en-US"
},
{
"text": "https://www.example.com/events/123456-abc",
"language_code": "es-ES"
}
]
}
}
}
エンティティの定義
.proto
// Reference to one of the performing entities in the Event. These are meant to
// reflect the artist/team/group/etc that a person might see on the ticket or
// broader concepts (e.g. concert tours, festivals).
message Entity {
// Unique identifier of the entity in the partner's database.
// Max length: 255. Allowed characters are alphanumeric, _, and -.
// Recommended.
string id = 1
;
// The name of the entity in plain text.
// Recommended to not exceed length of 50.
// Max length: 150.
// Required.
google.type.LocalizedText name = 2
;
// The official website URL of the entity.
// Max length: 2000.
// Recommended.
string official_website_url = 3
;
// Url of the webpage that unambiguously describes the entity.
// This is the webpage on the partner's website for the entity if any; for
// other public URLs of the entity, use related_urls.
// Max length: 2000.
// Recommended.
string url = 4
;
// Other urls that might identify the entity.
// Max length: 2000. Max number of links: 10.
// Optional.
repeated string related_urls = 5
;
// ID as used by MusicBrainz.
// Fixed length: 36. Allowed characters are hexadecimal (0-9, a-f) and -.
// Optional.
string musicbrainz_id = 6
;
// The YouTube channel id.
// If provided may be used as an additional input for entity matching.
// Channel ids start with characters `UC` followed by a variable number of
// additional characters. Allowed characters are alphanumeric, _, and -.
// Optional.
string youtube_channel_id = 9
;
// The type of the entity.
enum EntityType {
// Not specified. Do not use.
ENTITY_TYPE_UNSPECIFIED = 0;
// The entity represents the music artist or a band performing at a
// concert or a show.
ENTITY_TYPE_PERFORMER_MUSICIAN = 1;
// The entity represents the comedian artist or group of comedians.
ENTITY_TYPE_PERFORMER_COMEDIAN = 2;
// The entity represents the magician artist or group of magicians.
ENTITY_TYPE_PERFORMER_MAGICIAN = 3;
// The entity represents the online personality (e.g. youtuber, instagramer,
// podcaster).
ENTITY_TYPE_PERFORMER_ONLINE_PERSONALITY = 4;
// The entity represents a sports player.
ENTITY_TYPE_PERFORMER_SPORTS_PLAYER = 5;
// The entity represents a sports team.
ENTITY_TYPE_PERFORMER_SPORTS_TEAM = 6;
// The entity represent a show. It can refer to a series of events (e.g.
// 'The Lion King' at West End) or a larger event where the event belongs to
// (e.g. 'Coachella').
ENTITY_TYPE_SHOW = 7;
// The entity represents a concert tour (e.g. 'The Mathematics Tour' of Ed
// Sheeran).
ENTITY_TYPE_CONCERT_TOUR = 8;
// The entity represents a sports event that this event is part of (e.g.
// 'Olympics 2024' or 'FIFA World Cup')
ENTITY_TYPE_SPORTS_TOURNAMENT = 9;
}
// The type of the entity.
// Optional.
EntityType entity_type = 8
;
// The role of the performer in the event.
enum PerformerRole {
// Not specified. Do not use.
PERFORMER_ROLE_UNSPECIFIED = 0;
// The performer represents a headliner or leading performer at the event.
PERFORMER_ROLE_HEADLINER = 1;
// The performer represents a supporting performer at the event.
PERFORMER_ROLE_SUPPORTER = 2;
// The performer represents the home team at the (sports) event. Only
// applicable when PerformerType is PERFORMER_TYPE_SPORTS_TEAM.
PERFORMER_ROLE_HOME_TEAM = 3;
// The performer represents the home team at the (sports) event. Only
// applicable when PerformerType is PERFORMER_TYPE_SPORTS_TEAM.
PERFORMER_ROLE_AWAY_TEAM = 4;
}
// The role of the performer in the event. Should be used only when the entity
// refers to a person or a group of people (i.e. entity type starts with
// "ENTITY_TYPE_PERFORMER_*").
// Optional.
PerformerRole performer_role = 7
;
}
例
{
"id": "7890",
"name": {
"text": "The Music Band",
"language_code": "en-US"
},
"entity_type": "ENTITY_TYPE_PERFORMER_MUSICIAN",
"performer_role": "PERFORMER_ROLE_HEADLINER"
}
チケットの定義
.proto
// Ticket available for the Event.
message Ticket {
// Ticket ID. Must be unique within the event.
// Max length: 255. Allowed characters are alphanumeric, _, and -.
// Required.
string id = 1
;
// The title of the ticket in plain text, e.g. "Category 1 ticket".
//
// If there is only a single ticket, the ticket title may be the same as the
// event title. If multiple tickets are present, the title must be
// unique to the ticket.
// Recommended to not exceed length of 50 in any language.
// Max length: 150.
// Recommended.
LocalizedTextSet title = 2
;
// The description of the ticket. Limited formatting options are allowed in
// the HTML format, see event description field for more details.
// Recommended to not exceed length of 10000 in any language.
// Max length: 16000.
// Recommended.
LocalizedTextSet description = 3
;
// Additional information about the seller of this ticket. In certain cases
// the seller may differ from the provider of the event (e.g. in cases of
// aggregators providing tickets for sellers they have aggregated).
// Optional.
SellerInfo seller_info = 9;
// URL for this ticket. The page should include a button to start the
// booking/checkout flow.
// Required.
repeated ReferralLink referral_urls = 4
;
// Lowest base adult general-accessible ticket price.
// Recommended.
Price price = 5;
// Information about the availability of the ticket.
// Recommended.
AvailabilityInfo availability_info = 6;
// Cancellation policy for this ticket.
// Optional.
CancellationPolicy cancellation_policy = 7;
// Predetermined inventory type of a single ticket of this type.
enum InventoryType {
// The inventory type is unspecified.
INVENTORY_TYPE_UNSPECIFIED = 0;
// Primary inventory.
INVENTORY_TYPE_PRIMARY = 1;
// Verified resale inventory.
INVENTORY_TYPE_VERIFIED_RESALE = 2;
// Resale inventory.
INVENTORY_TYPE_RESALE = 3;
// Aggregator inventory.
INVENTORY_TYPE_AGGREGATOR = 4;
}
// Predetermined inventory type of a single ticket of this type.
// Optional.
InventoryType inventory_type = 8;
}
例
{
"id": "general-admission",
"title": {
"localized_texts": [
{
"text": "General Admission",
"language_code": "en-US"
}
]
},
"referral_urls": [{
"link": {
"url": "https://www.example.com/tickets/123456-abc/general-admission",
},
"surface": "SURFACE_SEARCH"
}],
"price": {
"price": {
"currency_code": "USD",
"units": 25,
"nanos": 190000000
}
},
"availability_info": {
"spots_available": 100
},
"inventory_type": "INVENTORY_TYPE_PRIMARY"
}
SellerInfo の定義
.proto
// Additional information about the seller of a ticket.
message SellerInfo {
// The name of the ticket seller. This may differ from the name of the event
// provider in certain cases, e.g. aggregators providing tickets for sellers
// that they have aggregated.
// Max length: 150.
// Optional.
LocalizedTextSet name = 1
;
例
{
"name": {
"localized_texts": [
{
"text": "Example Seller",
"language_code": "en-US"
}
]
},
"logo_url": "https://www.example.com/images/fav-icon.png"
}
ReferralLink の定義
.proto
// Referral link.
message ReferralLink {
// Landing page URL. The page should include a button to start the
// booking/checkout flow.
// Do not use link.mobile_url or link.localized_mobile_url.
// Required.
DeepLink link = 1
;
// Predetermined event surface associated with a action link.
enum Surface {
// The surface is unspecified.
SURFACE_UNSPECIFIED = 0;
// The action link is booking a event ticket in Search.
SURFACE_SEARCH = 1;
// The action link is booking a event ticket in YouTube.
SURFACE_YOUTUBE = 2;
// The action link is clicking on an ad for the event.
SURFACE_ADS = 3;
}
// Predetermined event surface associated with a link.
// Optional.
Surface surface = 2;
}
例
{
"link": {
"url": "https://www.example.com/tickets/123456-abc/general-admission",
},
"surface": "SURFACE_SEARCH"
}
価格の定義
.proto
// Information about the price.
message Price {
// Price value, must match the final price on the checkout page. Currency will
// be converted to the user currency on rendering.
// Required when is_free is false.
google.type.Money value = 1
;
// Admission or ticket is free. Must be set to true for zero-price options.
// Optional, default is false.
bool is_free = 2;
// Booking fees included in the final price.
// Optional.
google.type.Money per_ticket_fee = 3
;
// Taxes included in the final price.
// Optional.
google.type.Money per_ticket_tax = 4
;
// Indicates the price format displayed on the landing page.
//
// This field allows Google surfaces to show the same price format as used by
// the landing page. Consistent price formats improve conversion rate and
// reduce confusion.
enum PriceDisplayType {
// The price display type is unspecified. Google will determine which
// format to show.
PRICE_DISPLAY_TYPE_UNSPECIFIED = 0;
// The price shown on the landing page is the base price.
PRICE_DISPLAY_TYPE_BASE = 1;
// The price shown on the landing page includes all fees and taxes.
PRICE_DISPLAY_TYPE_ALL_IN = 2;
}
// Predetermined display type of a single option price.
PriceDisplayType price_display_type = 5;
}
例
// price with fees and taxes and landing page is showing base price with fees separate
{
"value": {
"currency_code": "USD",
"units": 25,
"nanos": 190000000
},
"per_ticket_fee": {
"currency_code": "USD",
"units": 5,
"nanos": 990000000
},
"per_ticket_tax": {
"currency_code": "USD",
"units": 1,
"nanos": 750000000
},
"price_display_type": "PRICE_DISPLAY_TYPE_BASE"
}
// price including fees and taxes as all in price
{
"value": {
"currency_code": "USD",
"units": 25,
"nanos": 190000000
},
"per_ticket_fee": {
"currency_code": "USD",
"units": 0
},
"per_ticket_tax": {
"currency_code": "USD",
"units": 0
},
"price_display_type": "PRICE_DISPLAY_TYPE_ALL_IN"
}
// Free ticket
{
is_free: true
}
LocalizedTextSet の定義
.proto
// Values of the localized fields.
message LocalizedTextSet {
// Per-locale LocalizedText values.
// Maximum repeatedness: 50
// At least one value is required
// "und" (undefined) language code should be used as a fallback.
repeated google.type.LocalizedText localized_texts = 1
;
}
例
{
localized_texts: [{
"language_code": "en",
"text": "Sunrise tour"
}]
}
TimeInfo の定義
.proto
// Time information about a time slot for a service or event.
message TimeInfo {
// Event start time - seconds since epoch UTC.
// Required
int64 start_seconds =
1
;
// Set to true if the start sec has not been decided.
// The start_sec in this case must be set to the earliest potential time.
bool start_to_be_decided = 2;
// Event end time - seconds since epoch UTC.
// If provided must be not earlier than start_seconds.
// Optional.
int64 end_seconds =
3
;
// Door opening time -in seconds since the epoch UTC.
// If provided must be not later than start_seconds.
// Optional.
int64 door_open_seconds =
4
;
}
例
{
"start_seconds": 1695686400,
"end_seconds": 1695700800,
"door_open_seconds": 1695684600
}
メディアの定義
.proto
message Media {
// URL of this media source. Google will crawl the media hosted at this URL.
// Max length: 2000.
// Required.
string url = 1
;
enum MediaType {
// Don't use, for backwards compatibility only.
MEDIA_TYPE_UNSPECIFIED = 0;
// Indicates the media provided by the url is a photo.
MEDIA_TYPE_PHOTO = 1;
}
// Type of this media source.
// Required.
MediaType type = 2
;
// Attribution information about the source of the media. Note that if
// the attribution is required to display with the media to give credit to
// photographer or agency, this field must be set.
// Recommended to not exceed length of 1000 in any language.
// Max length: 2000.
// Optional.
LocalizedTextSet attribution = 3
;
}
例
{
"url": "http://www.test.com/photo2.jpg",
"type": "MEDIA_TYPE_PHOTO",
"attribution": {
"localized_texts": [
{
"language_code": "en",
"text": "Test Event Photo"
}
]
}
}
ディープリンクの定義
.proto
// Deep link definition. Can include value parameters that will be expanded on
// serve time.
message DeepLink {
// Landing page URL template for desktop. If both `url` and `localized_url`
// are provided, the former is used as a fallback in case
// no URL matches the user’s locale.
// Max length: 2000.
// Either `url` or `localized_url` is required.
string url = 1
;
// Localized landing page URL template for desktop. If both `url` and
// `localized_url` are provided, the former is used as a fallback in case
// no URL matches the user’s locale.
// Max length: 2000.
// Max number of locales: 50.
// Either `url` or `localized_url` is required.
LocalizedTextSet localized_url = 3
;
}
例
// Example 1: single landing page URL.
{
"url": "https://www.test.com/test-event/"
}
// Example 2: localized landing page URL with fallback
{
"url": "https://www.test.com/test-event/"
"localized_url": {
"localized_texts": [{
"language_code": "de",
"text": "https://www.test.com.de/test-event/"
}, {
"language_code": "es-MX",
"text": "https://www.test.com.mx/test-event/"
}, {
"language_code": "zh-HK",
"text": "https://www.test.com.cn/test-event/"
}]
}
}
AvailabilityInfo の定義
.proto
// Availability information of a time slot or ticket for a service or event.
message AvailabilityInfo {
// On sale start time - seconds since epoch UTC
// Optional.
int64 onsale_start_seconds = 1 [(googlesql.format) = TIMESTAMP_SECONDS];
// On sale end time - seconds since epoch UTC
// Optional.
int64 onsale_end_seconds = 2 [(googlesql.format) = TIMESTAMP_SECONDS];
// The total number of tickets (or spots) that were originally available for
// this availability.
// Optional.
int32 spots_total = 3;
// The current number of tickets (or spots) still available for purchase for
// this availability.
// Required.
int32 spots_available = 4
;
}
例
"availability_info": {
"spots_available": 500
}
CancellationPolicy の定義
.proto
// Cancellation policy for a product.
message CancellationPolicy {
// Defines a single refund condition. Multiple refund conditions could be
// used together to describe "refund steps" as various durations before the
// service start time.
message RefundCondition {
// Duration in seconds before the start time, until when the customer can
// receive a refund for part of the service's cost specified in
// `refund_percent`.
// When unset or set to 0 the service can be cancelled at any time.
// Optional.
uint32 min_duration_before_start_time_sec = 1;
// The percent that can be refunded, as long as the service booking is
// cancelled at least `min_duration_before_start_time` before the service
// start time, in the range of [0, 100].
// When unset or set to 0, the service is not refundable. When set to 100
// this service is fully refundable.
// Optional.
uint32 refund_percent = 2
;
// A flat fee deducted on refund. Could be used separately, or in
// combination with the refund_percent above. In the latter case, refund
// percent applies first, then the fee is deducted.
// Optional.
google.type.Money refund_fee = 3
;
}
// Zero or more refund conditions applicable to the policy.
// Max number of refund conditions: 10.
repeated RefundCondition refund_conditions = 1
;
}
例
{
"refund_conditions": [
{
"min_duration_before_start_time_sec": 86400,
"refund_percent": 100
}]
}
ロケーションの定義
.proto
message Location {
// At least one of (location, description) must be set, and we highly
// recommend populating location wherever possible.
//
// To emphasize, both fields can be populated together, e.g. you can set
// Central Park New York for the location and "In front of the 72 Street
// Station" for the description.
GeoLocation location = 1
;
// Additional description in human-readable form, e.g.
// "On the left side of the fountain on the Palace square".
// At least one of (location, description) must be set.
// Recommended to not exceed length of 1000 in any language. Max length: 2000.
LocalizedTextSet description = 2
;
// Unique id in the partner database identifying the location.
// Max length: 255. Allowed characters are alphanumeric, _, and -.
// Required for Events integration.
// Optional for Things to do integration.
string id = 3
;
}
例
{
"id": "venue_id",
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
}
}
GeoLocation の定義
.proto
message GeoLocation {
// Required (exactly one variant from oneof).
oneof value {
// Place ID as defined by the Places API:
// https://developers.google.com/places/web-service/place-id
//
// Uniquely identifies a POI on Google.
// It can be sourced using the Places API endpoints, for instance Place
// Search or Place Autocomplete, or manually using the Find Location Matches
// tool in Things to Do Center.
// Max length: 64.
string place_id = 1
;
// Legacy single-line address.
// Components are expected to be comma-separated, with the first component
// being the place name as it is displayed on Google.
// For higher matching accuracy, use the street address shown on Google for
// the place.
//
// Examples:
// - "Colosseum, Piazza del Colosseo, 1, 00184 Roma RM, Italy"
// - "The British Museum, Great Russell St, London WC1B 3DG, United Kingdom"
// Max length: 200.
//
// Deprecated: use `place_info` for higher matching accuracy, which provides
// a separate field for the place name and supports both structured and
// unstructured address formats.
string address = 3 [
deprecated = true
];
// Structured place information.
PlaceInfo place_info = 4;
// Business Profile ID, as found in the Google Business Profile settings
// page. Use this field when sourcing locations directly from the place
// owner, who has access to the Google Business Profile for the place and
// can provide such ID.
uint64 business_profile_id = 5
;
// Geographic coordinates.
// This field can only be used to determine a city or geographical region,
// as it is too ambiguous to identify a specific place or businesses.
// Use `place_info` instead to match to a specific place by name and
// coordinates.
google.type.LatLng lat_lng = 2
;
}
}
例
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
"place_info": {
"name": "Eiffel Tower",
"unstructured_address": "5 Av. Anatole France, 75007 Paris, France"
}
"business_profile_id": 11458995034835395294
"lat_lng": {
"latitude": -25.3511774,
"longitude": 131.0326859
}
PlaceInfo の定義
.proto
message PlaceInfo {
// Place or business name.
// For higher matching accuracy, this should be the same as the name shown on
// Google for the place. For places with a claimed Google Business Profile,
// this should be the same as the business name configured in the business
// profile.
// Max length: 100.
// Required.
string name = 1
;
// Phone number, including the international prefix.
// For higher matching accuracy, this should be the same as the phone number
// shown on Google for the place.
// It can include commonly used separator characters.
// Examples: "+1 212-363-3200", "+91 562 222 7261".
// Max length: 30.
// Optional.
string phone_number = 2
;
// Website URL shown on Google for the place, preferably the URL linked from
// the business listing in Google Maps or Search for the place.
// Max length: 1000.
// Optional.
string website_url = 3
;
// Geographic coordinates of the place.
// If left empty, Google will infer the coordinates from the address.
// Optional, but either `coordinates` or one of `address_type` must be
// provided.
google.type.LatLng coordinates = 4
;
// Optional, but either `coordinates` or one of `address_type` must be
// provided.
oneof address_type {
// Structured address.
// Prefer this format whenever possible for higher matching accuracy.
StructuredAddress structured_address = 5
;
// Unstructured address.
// It should not include the place or business name, which must instead be
// provided separately using the `name` field.
//
// Examples:
// - `name`: "Colosseum", `unstructured_address`: "Piazza del Colosseo, 1,
// 00184 Roma RM, Italy".
// - `name`: "The British Museum", `unstructured_address`: "Great Russell
// St, London WC1B 3DG, United Kingdom".
//
// Max length: 400.
string unstructured_address = 6
;
}
}
例
"place_info": {
"name": "Colosseum",
"phone_number": "+39 063 99 67 700",
"website_url": "https://colosseo.it/",
"coordinates": {
"latitude": 41.8902102,
"longitude": 12.4922309
},
"structured_address" {
"street_address": "Piazza del Colosseo, 1",
"locality": "Roma",
"administrative_area": "RM",
"postal_code": "00184",
"country_code": "IT"
}
}
"place_info": {
"name": "Eiffel Tower",
"unstructured_address": "5 Av. Anatole France, 75007 Paris, France"
}
"place_info": {
"name": "Mutitjulu Waterhole",
"coordinates": {
"latitude": -25.3511774,
"longitude": 131.0326859
}
}
StructuredAddress の定義
.proto
message StructuredAddress {
// Street address, including house number and any other component that cannot
// be provided using the more specific fields defined below. It should not
// include the place or business name, which must instead be provided
// separately using the `name` field under `PlaceInfo`. It should also not
// include postal code, locality or country as those should be provided using
// the corresponding fields below.
//
// Examples:
// - "Piazza del Colosseo, 1" for the Colosseum.
// - "Great Russell St" for The British Museum.
// - "Champ de Mars, 5 Av. Anatole France" for the Eiffel Tower.
//
// Max length: 200.
// Required.
string street_address = 1
;
// Locality, generally referring to the city/town portion of an address.
// Examples: "New York", "Rome", "London", "Tokyo".
// In regions of the world where localities are not well defined or do not fit
// into this structure well, leave empty.
// Max length: 80.
// Optional.
string locality = 2
;
// Highest administrative subdivision used for postal addresses of the
// specific country or region. This can be a state, a region, a province, an
// oblast, a prefecture, etc.
// It can be an abbreviation or a full name, depending on how the region is
// usually represented in the postal addresses of the specific country. For
// example, "CA" or "California" for US addresses, "RM" for Rome province in
// Italy.
// Many countries don't use an administrative area in postal addresses. For
// instance, this field should not be used for addresses in Switzerland.
// Max length: 80.
// Optional.
string administrative_area = 3
;
// The postal code or zip code.
// Examples: "75007", "WC1B 3DG", etc.
// Required if the country supports postal codes, otherwise it should be left
// empty.
// Max length: 30.
// Optional.
string postal_code = 4
;
// Country code, as defined by Unicode's "CLDR", itself based on the ISO 3166
// alpha-2 standard. See
// https://unicode.org/cldr/charts/latest/supplemental/territory_containment_un_m_49.html.
//
// Examples: "US" for the United States, "FR" for France, "GB" for the United
// Kingdom, etc.
// Max length: 2.
// Required.
string country_code = 5
;
}
例
{
"structured_address" {
"street_address": "Piazza del Colosseo, 1",
"locality": "Roma",
"administrative_area": "RM",
"postal_code": "00184",
"country_code": "IT"
}
}
google.type.Money の定義
.proto
// Represents an amount of money with its currency type.
message google.type.Money {
// The three-letter currency code defined in ISO 4217.
string currency_code = 1;
// The whole units of the amount.
// For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
int64 units = 2;
// Number of nano (10^-9) units of the amount.
// The value must be between -999,999,999 and +999,999,999 inclusive.
// If `units` is positive, `nanos` must be positive or zero.
// If `units` is zero, `nanos` can be positive, zero, or negative.
// If `units` is negative, `nanos` must be negative or zero.
// For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
int32 nanos = 3;
}
例
// represents EUR: 20.75
{
"currency_code": "EUR",
"units": 20,
"nanos": 750000000
}
google.type.LatLng の定義
.proto
// An object that represents a latitude/longitude pair. This is expressed as a
// pair of doubles to represent degrees latitude and degrees longitude. Unless
// specified otherwise, this must conform to the
// <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
// standard</a>. Values must be within normalized ranges.
message google.type.LatLng {
// The latitude in degrees. It must be in the range [-90.0, +90.0].
double latitude = 1;
// The longitude in degrees. It must be in the range [-180.0, +180.0].
double longitude = 2;
}
例
{
"latitude": 41.8902102,
"longitude": 12.4922309
}
google.type.LocalizedText の定義
.proto
message google.type.LocalizedText {
// Localized string in the language corresponding to `language_code`.
string text = 1;
// The text's BCP-47 language code, such as "en-US" or "sr-Latn".
//
// For more information, see
// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
string language_code = 2;
}
例
{
"text": "Sample English Text",
"language_code": "en-US"
}