Le flux Media Actions est un objet JSON qui contient un ensemble d'entités. Une entité est un objet schema.org qui représente un élément de votre catalogue: un épisode de série TV, une série TV, un film, une chanson, un album, etc.
![](https://developers.google.cn/actions/media/images/image-media-actions-29.jpg?authuser=5&hl=fr)
Structure du flux
Les actions de visionnage et d'écoute ont des structures de flux différentes.
Les actions de visionnage présentent la hiérarchie suivante: |
Les actions d'écoute présentent la hiérarchie suivante: |
Enveloppe du flux de données
Une enveloppe de flux de données est l'objet de premier niveau dans le flux Media Actions. L'objet contient un tableau d'objets de balisage de contenu (entités) qui représentent l'intégralité du contenu de votre catalogue.
Une enveloppe de flux de données accepte les propriétés suivantes:
Propriété | Type | Description |
---|---|---|
@context |
URL | Obligatoire : défini sur http://schema.org |
@type |
Texte | Obligatoire : définissez la valeur sur DataFeed . |
dateModified |
Date et heure | Obligatoire : date et heure de la dernière modification du flux, au format ISO 8601 (fuseau horaire compris). |
dataFeedElement |
Thing | Obligatoire : entités de votre catalogue multimédia. |
Modèle d'enveloppe de flux de données
{
"@context": "http://schema.org",
"@type": "DataFeed",
"dateModified": "2018-07-20T00:44:51Z",
"dataFeedElement": [
{ <CONTENT MARKUP OBJECT 01> },
{ <CONTENT MARKUP OBJECT 02> },
{ <CONTENT MARKUP OBJECT 03> },
...
]
}
Balisage de contenu
Un objet de balisage de contenu représente une seule entité de votre catalogue: un film, un épisode de série TV, une série TV, un titre, un album, une station de radio, etc. Cet objet contient l'identifiant et l'URL canonique du contenu, et permet de décrire le contenu via des métadonnées.
Modèle de balisage de contenu
Un objet de balisage de contenu peut comporter un tableau d'objets de balisage Action, ce qui permet d'associer le contenu à plusieurs objets de balisage Action. Par exemple, le contenu peut avoir un objet de balisage "Action" différent pour chaque région.
{
"@context": ["http://schema.org", {"@language": "en"}],
"@type": "Movie",
"@id": "http://www.example.com/my_favorite_movie",
"url": "http://www.example.com/my_favorite_movie",
"name": "My Favorite Movie",
"potentialAction": [
{ <ACTION MARKUP OBJECT 01> },
{ <ACTION MARKUP OBJECT 02> }
],
...
}
Balisage d'action
Un objet de balisage Action décrit le lien profond qui redirige les utilisateurs vers le contenu, ainsi que le niveau d'accès requis pour celui-ci. L'objet est une propriété (potentialAction
) d'un objet de balisage de contenu.
Il existe deux façons de spécifier les restrictions d'accès:
- Pour les actions de visionnage, utilisez un Objet de spécification d'accès aux actions.
- Pour les actions d'écoute, utilisez un objet d'offre.
Modèle de balisage d'action
Si le contenu comporte plusieurs liens profonds, un objet de balisage Action inclut plusieurs objets cibles. Par exemple, le lien profond du contenu pour iOS peut être différent du lien profond Android. De plus, s'il existe des restrictions d'accès différentes selon les régions et les périodes, un objet de balisage Action peut avoir plusieurs objets de spécification d'accès Action ou des objets d'offre, comme indiqué dans les modèles ci-dessous.
Modèle d'objet de balisage d'action pour les actions de visionnage:
"potentialAction": {
"@type": "WatchAction",
"target": [
{ <TARGET OBJECT 01> },
{ <TARGET OBJECT 02> }
],
"actionAccessibilityRequirement": [
{ <ACTION ACCESSIBILITY OBJECT 01> },
{ <ACTION ACCESSIBILITY OBJECT 02> }
]
}
Modèle d'objet de balisage d'action pour les actions d'écoute:
"potentialAction": {
"@type": "ListenAction",
"target": [
{ <TARGET OBJECT 01> },
{ <TARGET OBJECT 02> }
],
"expectsAcceptanceOf": [
{ <OFFER OBJECT 01> },
{ <OFFER OBJECT 02> }
]
}
Cible
Un objet cible fournit le mappage d'un lien profond vers différentes plates-formes Google. L'objet est une propriété (target
) d'un objet de balisage Action.
Exemple de cible
Si le contenu comporte plusieurs liens profonds en fonction des plates-formes, créez plusieurs objets cibles pour fournir des mappages différents. Par exemple, le lien profond du contenu pour Chromecast peut être différent de celui des autres plates-formes des liens profonds, comme illustré dans l'exemple ci-dessous.
Exemple d'objet cible (de base):
"target": {
"@type": "EntryPoint",
"urlTemplate": "http://www.example.com/my_favorite_movie?autoplay=true",
"actionPlatform": [
"http://schema.org/DesktopWebPlatform",
"http://schema.org/MobileWebPlatform",
"http://schema.org/AndroidPlatform",
"http://schema.org/AndroidTVPlatform",
"http://schema.org/IOSPlatform",
"http://schema.googleapis.com/GoogleVideoCast"
]
}
Exemple d'objet cible avec deux liens profonds:
"target": [
{
"@type": "EntryPoint",
"urlTemplate": "http://www.example.com/my_favorite_movie?autoplay=true",
"actionPlatform": [
"http://schema.org/DesktopWebPlatform",
"http://schema.org/MobileWebPlatform",
"http://schema.org/AndroidPlatform",
"http://schema.org/AndroidTVPlatform",
"http://schema.org/IOSPlatform"
]
},
{
"@type": "EntryPoint",
"urlTemplate": "http://www.example.com/cast/my_favorite_movie?autoplay=true",
"actionPlatform": [
"http://schema.googleapis.com/GoogleVideoCast"
]
}
]
Spécification d'accès aux actions
Un objet de spécification d'accès aux actions décrit les conditions d'accès requises pour
en fonction de la région et de la période. L'objet est une propriété,
actionAccessibilityRequirement
, d'un
Objet de balisage d'action.
Le category
de l'objet peut être l'un des éléments suivants:
nologinrequired
free
subscription
Pour décrire les détails de l'abonnement, créez un Objet d'abonnement multimédia : Si le contenu nécessite un achat supplémentaire pour les abonnés, utilisez objet Offer pour spécifier le prix.
externalsubscription
Pour décrire les détails de l'abonnement, créez un Objet d'abonnement multimédia : Si le contenu nécessite un achat supplémentaire pour les abonnés, utilisez objet Offer pour spécifier le prix.
rental
Utilisez un objet Offer pour spécifier le prix.
purchase
Utilisez un objet Offer pour spécifier le prix.
Abonnement à un média
Un objet d'abonnement multimédia décrit les détails de l'abonnement requis.
pour le contenu. L'objet est une propriété, requiresSubscription
, d'une
Objet de spécification d'accès aux actions. C'est
obligatoire si actionAccessibilityRequirement.category
est subscription
ou
externalSubscription
et votre offre d'abonnement comprend plusieurs
des packages ou des niveaux, ou propose une prise en charge complémentaire. N'incluez pas cet attribut si votre
est à un niveau et donne accès à l'ensemble du contenu de votre catalogue.
Exemple d'abonnement multimédia
Exemple d'objet d'abonnement multimédia:
"requiresSubscription": {
"@type": "MediaSubscription",
"@id": "http://www.example.com/premium_subscription",
"name": "Example Premium",
"sameAs": "http://www.example.com/premium_subscription"
}
Offre
Un objet d'offre décrit le prix associé au contenu. L'objet est une propriété (expectsAcceptanceOf
) des objets suivants:
- Pour les actions de visionnage, Objet de spécification d'accès aux actions.
- Pour les actions d'écoute, il s'agit d'un objet de balisage Action.
Exemple d'offre
Les actions de surveillance spécifient la propriété expectsAcceptanceOf
dans
Objet de spécification d'accès aux actions:
"potentialAction":{
"@type":"WatchAction",
"target":{
"@type":"EntryPoint",
"urlTemplate":"http://www.example.com/my_favorite_movie?autoplay=true",
"actionPlatform":[ "http://schema.org/DesktopWebPlatform" ]
},
"actionAccessibilityRequirement": {
"@type": "ActionAccessSpecification",
"category": "purchase",
"availabilityStarts": "2019-01-01T00:00Z",
"availabilityEnds": "2019-12-31T00:00Z",
"eligibleRegion": {
"@type": "Country",
"name": "US"
},
"expectsAcceptanceOf": {
"@type": "Offer",
"price": 7.99,
"priceCurrency": "USD",
"seller": {
"@type": "Organization",
"name": "My example seller"
}
}
}
}
Les actions d'écoute spécifient la propriété expectsAcceptanceOf
directement dans l'objet de balisage d'action:
"potentialAction":{
"@type":"ListenAction",
"target":{
"@type":"EntryPoint",
"urlTemplate":"http://www.example.com/playlist/top_pop_songs?autoplay=true",
"actionPlatform":[ "http://schema.org/DesktopWebPlatform" ]
},
"expectsAcceptanceOf":{
"@type": "Offer",
"eligibleRegion": {
"@type":"Country",
"name":"US"
},
"category": "subscription",
"name": "Example Music",
"price": 9.99,
"priceCurrency": "USD",
"seller": {
"@type": "Organization",
"name": "My example seller",
"sameAs": "http://www.example.com"
}
}
}
Image
Un objet image décrit l'image associée au contenu.
Les exigences concernant l'image sont les suivantes:
- Pour les actions de visionnage, fournissez une image haute résolution (140 x 210 pixels minimum) au format 2:3.
- L'image doit être au format
.jpg
ou.png
.
- L'image doit être au format
- Pour les actions d'écoute, fournissez une image haute résolution (300 x 300 pixels minimum) au format 1x1.
- Nous vous recommandons une taille d'au moins 600 x 600 pixels.
- L'image doit être au format
.jpg
,.png
ou.gif
.
- L'URL de l'image doit être explorable et indexable.
- Vous devez disposer des droits nécessaires pour utiliser l'image et autoriser son affichage sur les appareils et les propriétés Google.
- L'image ne doit pas contenir les éléments suivants:
- Image floue, pixélisée, pivotée ou de mauvaise qualité.
- Photos non autorisées ou issues d'une banque de photos
- Nudité.
- Contenu illégal.
- Lorsque vous modifiez
MusicPlaylist
, modifiez son image pour refléter le nouveau contenu.
Exemple d'image
"image": {
"@type": "ImageObject",
"contentUrl" : "http://www.example.com/artist/my_favorite_artist/1x1/photo1.jpg",
"dateModified" : "2019-01-05T22:11:33+00:00",
"regionsAllowed" : ["US","UK","MX"]
}
Exemples de flux
Les exemples suivants montrent la différence de structure de flux entre Actions de visionnage et d'écoute
Exemple d'actions de visionnage
{
"@context": "http://schema.org",
"@type": "DataFeed",
"dateModified": "2018-07-20T00:44:51Z",
"dataFeedElement": [
{
"@context": ["http://schema.org", {"@language": "en"}],
"@type": "Movie",
"@id": "http://www.example.com/my_favorite_movie",
"url": "http://www.example.com/my_favorite_movie",
"name": "My Favorite Movie",
"potentialAction": {
"@type": "WatchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "http://www.example.com/my_favorite_movie?autoplay=true",
"inLanguage": "en",
"actionPlatform": [
"http://schema.org/DesktopWebPlatform",
"http://schema.org/MobileWebPlatform",
"http://schema.org/AndroidPlatform",
"http://schema.org/AndroidTVPlatform",
"http://schema.org/IOSPlatform",
"http://schema.googleapis.com/GoogleVideoCast"
]
},
"actionAccessibilityRequirement": {
"@type": "ActionAccessSpecification",
"category": "subscription",
"availabilityStarts": "2018-07-21T10:35:29Z",
"availabilityEnds": "2019-10-21T10:35:29Z",
"eligibleRegion": [
{
"@type": "Country",
"name": "US"
},
{
"@type": "Country",
"name": "CA"
}
],
}
},
"sameAs": "https://en.wikipedia.org/wiki/my_favorite_movie",
"releasedEvent": {
"@type": "PublicationEvent",
"startDate": "2008-01-20",
"location": {
"@type": "Country",
"name": "US"
}
},
"description": "This is my favorite movie.",
"actor": [
{
"@type": "Person",
"name": "John Doe",
"sameAs": "https://en.wikipedia.org/wiki/John_Doe"
},
{
"@type": "Person",
"name": "Jane Doe",
"sameAs": "https://en.wikipedia.org/wiki/Jane_Doe"
}
],
"identifier": [
{
"@type": "PropertyValue",
"propertyID": "IMDB_ID",
"value": "tt0123456"
}
]
}
]
}
Exemple d'actions d'écoute
{
"@context": "http://schema.org",
"@type": "DataFeed",
"dateModified": "2018-07-20T00:44:51Z",
"dataFeedElement": [
{
"@context":"http://schema.googleapis.com/",
"@type":"MusicGroup",
"@id":"http://www.example.com/artist/my_favorite_artist/",
"url":"http://www.example.com/artist/my_favorite_artist/",
"name":"My Favorite Artist",
"sameAs":"https://en.wikipedia.org/wiki/my_favorite_artist",
"description":"This is my favorite pop music artist.",
"potentialAction": {
"@type":"ListenAction",
"target": {
"@type":"EntryPoint",
"urlTemplate":"http://www.example.com/artist/my_favorite_artist?autoplay=true",
"actionPlatform":[
"http://schema.org/DesktopWebPlatform",
"http://schema.org/IOSPlatform",
"http://schema.org/AndroidPlatform",
"http://schema.org/AndroidTVPlatform",
"http://schema.googleapis.com/GoogleAudioCast",
"http://schema.googleapis.com/GoogleVideoCast"
]
},
"expectsAcceptanceOf":{
"@type":"Offer",
"category":"subscription",
"eligibleRegion": {
"@type":"Country",
"name":"US"
},
"price": 8.99,
"priceCurrency": "USD"
}
},
"subjectOf": {
"@type":"MusicPlaylist",
"@id":"http://www.example.com/artist_mix/my_favorite_artist/",
"url":"http://www.example.com/artist_mix/my_favorite_artist/",
"name":"My Favorite Artist Mix",
"description":"A mix of music similar to My Favorite Artist",
"potentialAction":{
"@type":"ListenAction",
"target": {
"@type":"EntryPoint",
"urlTemplate":"http://www.example.com/artist_mix/my_favorite_artist?autoplay=true",
"actionPlatform":[
"http://schema.org/DesktopWebPlatform",
"http://schema.org/IOSPlatform",
"http://schema.org/AndroidPlatform",
"http://schema.org/AndroidTVPlatform",
"http://schema.googleapis.com/GoogleAudioCast",
"http://schema.googleapis.com/GoogleVideoCast"
]
},
"expectsAcceptanceOf":{
"@type":"Offer",
"category":"free",
"eligibleRegion": {
"@type":"Country",
"name":"US"
}
}
}
}
}
]
}