Présentation de la structure des flux

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.

Figure 1. Structures des flux des actions de visionnage et d'écoute

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:

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:

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.
  • 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"
            }
          }
        }
      }
    }
  ]
}