Présentation de la structure des flux

Le flux "Actions multimédias" est un objet JSON qui contient une collection 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.

Figure 1. Structures de flux des actions liées au visionnage et à l'écoute

Structure du flux

Les flux d'actions de visionnage et d'écoute ont des structures différentes.

Les actions liées au visionnage sont hiérarchisées comme suit:
Les actions d'écoute sont hiérarchisées comme suit:

Enveloppe du flux de données

Une enveloppe de flux de données est l'objet de niveau supérieur du flux d'actions multimédias. L'objet contient un tableau d'objets de balisage de contenu (entités) qui représentent l'ensemble du contenu de votre catalogue.

Une enveloppe de flux de données est compatible avec les propriétés suivantes:

Propriété Type Description
@context URL Obligatoire : défini sur http://schema.org
@type Texte Obligatoire : définissez sur DataFeed.
dateModified Date et heure Obligatoire : date et heure de la dernière modification du flux, au format ISO 8601 (y compris le fuseau horaire).
dataFeedElement Thing Obligatoire : les 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 du 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, une chanson, un album, une station de radio, etc. L'objet contient l'identifiant et l'URL canonique du contenu, et permet de le décrire à l'aide de metadata.

Modèle de balisage de contenu

Un objet de balisage de contenu peut contenir un tableau d'objets de balisage d'action, ce qui permet d'associer le contenu à plusieurs objets de balisage d'action. Par exemple, le contenu peut avoir un objet de balisage d'action différent par 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 d'action décrit le lien profond qui redirige les utilisateurs vers le contenu et le niveau d'accès requis pour ce contenu. L'objet est une propriété (potentialAction) d'un objet de balisage de contenu.

Vous pouvez spécifier les restrictions d'accès de deux façons:

Modèle de balisage d'action

Si le contenu comporte plusieurs liens profonds, un objet de balisage d'action inclut plusieurs objets cibles. Par exemple, le lien profond du contenu pour iOS peut être différent du lien profond pour Android. De plus, si des restrictions d'accès différentes s'appliquent en fonction des régions et des périodes, un objet de balisage d'action peut comporter plusieurs objets de spécification d'accès d'action ou objets d'offre, comme illustré 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 liées à l'écoute:

"potentialAction": {
  "@type": "ListenAction",
  "target": [
    { <TARGET OBJECT 01> },
    { <TARGET OBJECT 02> }
  ],
  "expectsAcceptanceOf": [
    { <OFFER OBJECT 01> },
    { <OFFER OBJECT 02> }
  ]
}

Cible

Un objet cible permet de mapper un lien profond sur différentes plates-formes Google. L'objet est une propriété (target) d'un objet de balisage d'action.

Exemple de cible

Si le contenu comporte plusieurs liens profonds en fonction des plates-formes, créez plusieurs objets cibles pour fournir différents mappages. Par exemple, le lien profond du contenu pour Chromecast peut être différent de celui des autres plates-formes, comme illustré dans l'exemple ci-dessous.

Exemple d'objet cible (basique):

"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 à une action décrit les exigences d'accès au contenu 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.

L'category de l'objet peut être l'une des valeurs suivantes:

  • 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 un 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 un 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 multimé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'un objet de spécification d'accès à l'action. Cette valeur est obligatoire si actionAccessibilityRequirement.category est subscription ou externalSubscription, et si votre offre d'abonnement inclut plusieurs packages ou niveaux, ou est compatible avec les modules complémentaires. N'incluez pas cette information si votre abonnement est à un seul 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 "offre" décrit le prix associé à un contenu. L'objet est une propriété (expectsAcceptanceOf) des objets suivants:

Exemple d'offre

Les actions de visionnage spécifient la propriété expectsAcceptanceOf dans l'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.

Voici les exigences concernant l'image:

  • 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.
  • Pour les actions d'écoute, fournissez une image haute résolution (300 x 300 pixels minimum) au format 1x1.
    • Nous vous recommandons d'utiliser une résolution 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 provenant de banques d'images
    • Nudité
    • Contenu illégal.
  • Lorsque vous mettez à jour MusicPlaylist, mettez à jour 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 du flux entre les actions de visionnage et les actions d'écoute.

Exemple d'actions liées au 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 liées à l'é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"
            }
          }
        }
      }
    }
  ]
}