Passer au contenu principal

Vue d’ensemble

Enterprise C’est une API Enterprise disponible uniquement dans le cadre de nos niveaux d’accès gérés. Pour utiliser cette API, vous devez d’abord créer un compte avec notre équipe commerciale Enterprise. En savoir plus L’Engagement API fournit un accès aux métriques d’impressions et d’engagement des Publications. Alors que la plupart des métriques et des endpoints exigent que vous vous authentifiiez à l’aide du contexte utilisateur OAuth 1.0a, vous pouvez accéder aux métriques publiques Favorite, Retweet, Reply et Video Views en utilisant un Jeton Bearer OAuth 2.0 et l’endpoint /totals.   Remarque : vous pouvez constater des différences entre les données affichées sur certains tableaux de bord Web de X et les données renvoyées par l’Engagement API. Ces différences surviennent parce que les tableaux de bord Web n’affichent généralement que les engagements et/ou impressions qui ont eu lieu dans l’intervalle de temps sélectionné. Par exemple, un tableau de bord Web peut afficher l’engagement sur des Publications sur la durée d’un mois calendaire, tandis que l’Engagement API peut afficher des engagements qui dépassent la durée de ce mois, mais se situent dans l’intervalle de temps demandé. Dans ces cas, l’Engagement API doit être considérée comme la source de référence.  

Points de terminaison des requêtes

L’API Engagement propose trois points de terminaison :

Totaux actuels : [/totals]

  • Les requêtes renvoient une métrique totale d’impressions et une métrique totale d’engagements pour les Publications demandées
  • Limité aux métriques suivantes : Impressions, Engagements, Favoris, Réponses, Retweets, Quote Tweets et Vues vidéo
  • Permet de récupérer les métriques Impressions et Engagements pour les Publications créées au cours des 90 derniers jours en utilisant le contexte utilisateur OAuth 1.0a
  • Permet de récupérer les métriques Favorites, Retweets, Quote Tweets, Replies et Video Views pour toute Publication en utilisant un jeton Bearer OAuth 2.0
  • Les résultats sont basés sur le total actuel d’impressions et d’engagements au moment où la requête est effectuée
  • Idéal pour alimenter un tableau de bord et calculer les taux d’engagement sur une variété de @handles
  • Permet de demander des métriques pour jusqu’à 250 Publications par requête  

28 dernières heures : [/28hr]

  • Les requêtes peuvent renvoyer une métrique totale pour les impressions, une métrique totale pour les engagements, ainsi qu’une ventilation des métriques d’engagement individuelles observées au cours des 28 dernières heures
  • Les données peuvent être regroupées par ID de Publication, et sous forme de séries temporelles agrégées, par jour ou par heure
  • Idéal pour suivre les performances de contenu créé récemment
  • Prend en charge toutes les métriques disponibles
  • Prend en charge les demandes de métriques pour jusqu’à 25 Publications par requête  

Historique : [/historical]

  • Les requêtes peuvent renvoyer les impressions, les interactions et une ventilation des métriques d’interaction individuelles pour l’année la plus récente, en se basant sur le moment de l’interaction (et non sur la date de création de la Publication).
  • Les requêtes permettent de définir une date de début et une date de fin, offrant la flexibilité de restreindre l’analyse à une période spécifique pouvant aller jusqu’à 4 semaines.
  • Les données d’interaction sur les Publications sont limitées aux 365 derniers jours.
  • Les données peuvent être regroupées par Post ID et, sous forme de séries chronologiques agrégées, par jour ou par heure.
  • Idéal pour évaluer les performances récentes par rapport à une référence historique ou pour développer une vision historique des performances d’un @handle.
  • Prend en charge toutes les métriques disponibles.
  • Permet de demander des métriques pour jusqu’à 25 Publications par requête.

Métriques disponibles

Le tableau ci-dessous décrit les types de métriques auxquels vous pouvez accéder via l’Engagement API. Consultez notre page Interprétation des métriques pour en savoir plus sur les métriques ci-dessous.
MétriqueDisponibilité de l’endpointContexte utilisateur requisDescription
impressionsTousOuiNombre de fois où la Publication a été vue. Cette métrique n’est disponible que pour les Publications publiées au cours des 90 derniers jours.
engagementsTousOuiNombre de fois où un utilisateur a interagi avec la Publication. Cette métrique n’est disponible que pour les Publications publiées au cours des 90 derniers jours.
favoritesTousOui - /28hrs & /Historical

Non - /totals
Nombre de fois où la Publication a été ajoutée aux favoris.
retweetsTousOui - /28hrs & /Historical

Non - /totals
Nombre de fois où la Publication a été retweetée.
quote_tweets/totalsNon - /totalsNombre de fois où une Publication a été retweetée avec un commentaire (également appelée « Quote »).
repliesTousOui - /28hrs & /Historical

Non - /totals
Nombre de fois où une réponse a été publiée en réponse à la Publication.
video_viewsTousOui - /28hrs & /Historical

Non - /totals
Le nombre de fois où une vidéo dans la Publication donnée a été visible à 50 % pendant au moins deux secondes.

Les vues vidéo ne sont disponibles que pour les Publications âgées de 1800 jours ou moins. Si vous tentez de récupérer des vues vidéo pour des Publications de plus de 1800 jours, vous recevrez l’objet suivant dans votre réponse, ainsi qu’un objet séparé contenant les autres métriques que vous avez demandées :

“unsupported_for_video_views_tweet_ids”: [“TWEET_ID”]

Veuillez noter : vous pouvez constater un écart entre la métrique de vues vidéo affichée sur les plateformes détenues et exploitées par X (application mobile et site web) et le nombre que vous recevez via les endpoints /28hr et /historical.

* Les vues vidéo affichées dans l’interface utilisateur X et avec l’endpoint /totals affichent le nombre de vues vidéo agrégé pour toutes les Publications dans lesquelles la vidéo donnée a été publiée. Cela signifie que la métrique affichée dans l’interface inclut les vues combinées de toute occurrence où la vidéo a été Retweetée ou republiée dans des Publications distinctes. Cette métrique n’inclut pas les vues vidéo sur les GIF.
* Les vues vidéo fournies par les endpoints /28hr et /historical incluent uniquement les vues générées par la Publication spécifique pour laquelle vous récupérez des métriques. Cette métrique n’inclut pas les vues vidéo sur les GIF.
media_views/28hr /historicalOuiNombre total de vues (lecture automatique et clic) de vos médias, comptabilisées sur les vidéos, GIF et images.
media_engagements

(anciennement appelé Media Clicks)
/28hr /historicalOuiNombre de fois où un média, tel qu’une image ou une vidéo, présent dans la Publication, a été cliqué.
url_clicks/28hr /historicalOuiNombre de fois où une URL présente dans la Publication a été cliquée.
hashtag_clicks/28hr /historicalOuiNombre de fois où un hashtag présent dans la Publication a été cliqué.
detail�5fexpands/28hr /historicalOuiNombre de fois où la Publication a été cliquée pour afficher plus de détails.
permalink�5fclicks/28hr /historicalOuiNombre de fois où le lien permanent de la Publication (sa page Web individuelle dédiée à cette Publication) a été cliqué.
app�5finstall�5fattempts/28hr /historicalOuiNombre de fois où un événement d’installation d’App s’est produit à partir de la Publication.
app�5fopens/28hr /historicalOuiNombre de fois où un événement d’ouverture d’App s’est produit à partir de la Publication.
email�5ftweet/28hr /historicalOuiNombre de fois où la Publication a été partagée par e-mail.
user�5ffollows/28hr /historicalOuiNombre de fois où l’utilisateur (auteur de la Publication) a été suivi à partir de cette Publication.
user�5fprofile�5fclicks/28hr /historicalOuiNombre de fois où le profil de l’utilisateur (auteur de la Publication) a été consulté à partir de cette Publication.

Regroupements d’engagement

Les regroupements permettent une organisation personnalisée des mesures d’engagement renvoyées. Vous pouvez inclure jusqu’à 3 regroupements par requête. Vous pouvez choisir de regrouper les mesures selon une ou plusieurs des valeurs suivantes : Les trois endpoints prennent en charge :
  • tweet.id
  • engagement.type  
Les endpoints /28hr et /historical peuvent fournir des mesures sous forme de séries chronologiques et prennent donc en charge :
  • engagement.day
  • engagement.hour
Pour en savoir plus sur les regroupements, consultez la page Engagement API Grouping dans la section « Guides ».

Guides

Guide de démarrage pour les développeurs

Introduction

L’objectif de cette documentation est de proposer aux développeurs une introduction à l’intégration avec l’Engagement API. Nous commencerons par expliquer pourquoi intégrer cette API, puis nous entrerons dans les détails techniques sur la manière de le faire.
Que fournit l’Engagement API ?
  • L’Engagement API fournit des données d’impressions et d’engagement pour les Publications appartenant à n’importe quel compte X au cours des 90 derniers jours, à condition que ce compte ait autorisé votre App à demander des métriques en son nom à l’aide du flux 3-legged OAuth. Cette solution puissante mais simple à mettre en œuvre donne un accès immédiat aux impressions et aux engagements avancés tels que les clics sur les URL, les clics sur les hashtags (#), et bien d’autres encore.
  • L’Engagement API fournit des métriques agrégées totales pour les ajouts aux favoris, les Retweets, les Tweets cités, les réponses et les vues de vidéos pour toute Publication. Cela peut être utilisé comme un moyen puissant d’obtenir des données d’engagement de base sur n’importe quelle Publication ou collection de Publications.
  • L’Engagement API apporte une nouvelle valeur aux plateformes d’écoute sociale, de marketing et de publication en permettant aux clients de mesurer le ROI sur X en mesurant efficacement les performances du contenu à l’aide de plus de 15 indicateurs de performance.
  • L’Engagement API est une API de requête/réponse qui permet aux développeurs d’applications d’envoyer des requêtes avec des id de Publication, les métriques souhaitées et une période donnée, pour lesquelles l’API renvoie instantanément des données.  
Pourquoi intégrer ? Exemples de cas d’usage
  • Comprendre la portée totale de votre contenu pour voir combien de personnes le consultent. Découvrir combien de personnes regardent des vidéos, cliquent sur des liens, cliquent sur des hashtags ou installent mes apps.
  • Générer à la fois des métriques d’engagement totales et des séries temporelles de ces métriques.
  • Comprendre les métriques d’engagement de base (favoris, Retweets, Tweets cités, réponses) concernant n’importe quelle Publication publique.
  • Utiliser ces métriques pour déterminer quels types de Publications fonctionnent, afin que je puisse les publier plus souvent et obtenir davantage d’impressions et d’engagements pour mon contenu.
  • Automatiser des actions marketing (comme retweeter du contenu depuis un autre compte que je possède) chaque fois qu’une de mes Publications atteint 100 Likes, ou un autre seuil.
  • Établir des benchmarks et comparer mes campagnes entre elles en tant qu’outil d’A/B testing.
  • Analyser quel type de contenu résonne le mieux pour mon service client afin de déterminer comment et quand répondre.
  • Afficher des analyses pour le contenu publié depuis ma plateforme.  
L’Engagement API a été lancée en 2016 et a été la première X API à fournir ces métriques d’engagement approfondies à grande échelle. L’Engagement API est facile à utiliser et permet aux clients d’automatiser ces opérations. Voici une étude de cas décrivant un exemple d’intégration : Maintenant que nous avons exploré les « pourquoi » de l’Engagement API, commençons à approfondir les détails techniques.

Intégration de l’API Engagement

Introduction à l’API
L’Engagement API est une API RESTful simple qui reçoit des requêtes encodées en JSON et répond avec des métriques d’engagement encodées en JSON. Les requêtes se composent de trois parties principales (suivez les liens pour plus de documentation) :
  • Tableau d’identifiants de Publications.
  • Tableau spécifiant les types de métriques d’intérêt. Les types incluent des éléments tels que « impressions », « retweets », « hashtag_clicks » et « user_follows ».
  • Engagement groupings, qui est une structure JSON indiquant la façon dont vous souhaitez organiser les données d’engagement dans la réponse de l’API.
Dans de nombreux cas, les Engagement Types et Groupings restent relativement constants d’une requête à l’autre, seuls les identifiants de Publications étant mis à jour. L’Engagement API fournit trois endpoints :
  • Totals - Fournit les totaux globaux des engagements pour des Publications. Certaines métriques sont disponibles pour toutes les Publications, tandis que d’autres ne sont disponibles que pour les 90 derniers jours.
  • 28 hour - Fournit des métriques d’engagement sous forme de séries temporelles pour les 28 dernières heures.
  • Historical - Fournit des métriques d’engagement sous forme de séries temporelles pour jusqu’à quatre semaines consécutives pour des Publications publiées depuis le 1er septembre 2014.
L’endpoint /totals permet de demander des métriques pour jusqu’à 250 Publications par requête. Les endpoints /28hour et /historical permettent de demander des métriques pour 25 Publications par requête. Après avoir expliqué comment obtenir l’accès à l’Engagement API, nous passerons en revue la création d’une requête API, proposerons un aperçu d’OAuth et fournirons des liens vers d’autres ressources techniques.
Obtenir l’accès à l’API
Si vous lisez ce document, vous avez très probablement déjà obtenu l’accès à l’API Engagement. Sinon, veuillez contacter votre responsable de compte Enterprise ou demander un accès Enterprise ici. La première étape consiste à créer une App X en utilisant un compte développeur approuvé via la Console de développement. Votre responsable de compte aura besoin de l’App ID numérique associé à cette application pour vous fournir l’accès. Si vous devez demander un compte développeur, vous pouvez le faire ici.
Effectuer une requête
La bonne nouvelle est qu’effectuer des requêtes à l’Engagement API est simple. Pour notre requête, nous allons lui demander le nombre total de Retweets, de Tweets cités, de Favoris et de réponses pour les deux Publications @XDevelopers suivantes :
1/ Aujourd’hui, nous partageons notre vision de l’avenir de la plateforme X API https://t.co/XweGngmxlP — Twitter Dev (@TwitterDev) 6 avril 2017
Ne manquez pas les Publications à propos de votre Publication. Désormais sur iOS, vous pouvez voir les Retweets avec commentaire, tous au même endroit. pic.x.com/oanjZfzC6y — X (@X) 12 mai 2020
La première étape consiste à construire la requête API en JSON, composée de ces deux id de Publication placés dans un tableau, d’un tableau des types d’engagement qui nous intéressent, et d’un objet JSON « groupings » personnalisé qui indique comment nous souhaitons que les métriques soient organisées dans la réponse. Voici à quoi ressemble notre requête :
{
  "tweet_ids": [
    1260294888811347969, 850006245121695744
  ],
  "engagement_types": [
    "retweets", "quote_tweets", "favorites", "replies"
  ],
  "groupings": {
    "engagement-types-by-id": {
      "group_by": [
        "Tweet.id", "engagement.type"
      ]
    }
  }
}
Pour récupérer ces métriques totales, nous envoyons une requête POST JSON à l’endpoint https://data-api.x.com/insights/engagement/totals. Nous allons inclure les en-têtes suivants pour indiquer que notre requête est encodée en JSON et qu’elle est compressée avec gzip (les corps de requête peuvent devenir volumineux) :
  • Content-Type: application/json
  • Accept-Encoding: gzip  
Lorsque nous envoyons des requêtes, nous nous authentifions à l’aide d’OAuth, dont nous parlerons plus en détail dans la section suivante. L’API renvoie la réponse suivante :
{
  "grouping name": {
    "1260294888811347969": {
      "favorites": "17111",
      "quote_tweets": "3254",
      "replies": "1828",
      "retweets": "5218"
    },
    "850006245121695744": {
      "favorites": "492",
      "quote_tweets": "66",
      "replies": "42",
      "retweets": "324"
    }
  }
}
Notez que la réponse contient les métriques demandées dans la structure décrite par les définitions de « groupings », avec les métriques énumérées d’abord par ID de Publication, puis par type d’engagement au niveau suivant. C’était assez simple. Si vous débutez avec l’authentification OAuth, consultez la section suivante.

Authentification avec OAuth

OAuth est une norme d’authentification très répandue dans l’industrie technologique. Si vous utilisez déjà OAuth (peut‑être avec d’autres X API), vous utilisez probablement une bibliothèque OAuth spécifique à un langage qui masque tous les détails compliqués. Si vous découvrez OAuth, consultez notre page OAuth avec la X API ou rendez‑vous directement sur https://oauth.net pour en savoir plus. Nous vous recommandons ensuite de trouver une bibliothèque OAuth pour le langage que vous utilisez dans votre intégration et de commencer par là. Avec ces bibliothèques, le processus d’authentification consiste généralement à configurer vos clés et jetons, instancier un objet HTTP, puis effectuer des requêtes avec cet objet. Par exemple, dans l’écosystème Ruby, le pseudo‑code suivant représente une recette pour créer une App compatible OAuth en utilisant la gem Ruby « oauth » et en effectuant une requête POST :
require 'oauth'

#Assemble JSON request (as above).
request = make_json_request()

#Build an app consumer object with my app consumer key and secret.
consumer = OAuth::Consumer.new(keys['consumer_key'], keys['consumer_secret'], {:site =>https://data-api.x.com’})
#Construire un jeton utilisateur avec les jetons fournis par le compte accordant la permission. Si vous effectuez une #requête d'App uniquement (vérification de Tweets ne nécessitant pas de permission avec le point de terminaison /totals), cette étape peut être #ignorée.
token = {:oauth_token => keys['access_token'], :oauth_token_secret => keys['access_token_secret']}

#Create oauth-enabled app object.
app = OAuth::AccessToken.from_hash(consumer, token)
#Make POST request.
result = app.post(“/insights/engagement/totals", request, {"content-type" => "application/json", "Accept-Encoding" => "gzip"})
L’Engagement API prend en charge l’authentification en mode application seule et en contexte utilisateur. Si vous collectez des métriques d’engagement pour des Publications publiques qui ne vous appartiennent pas avec le point de terminaison /totals, aucune autorisation utilisateur n’est requise et vous pouvez utiliser l’authentification en mode application seule. Dans ce cas, vous utiliserez uniquement la clé et le secret de votre App pour vous authentifier. OAuth permet également à une App d’effectuer une requête d’API « au nom d’un autre utilisateur », en utilisant des jetons associés à cet utilisateur. Si vous générez des métriques d’engagement pour des Publications qui vous appartiennent, c’est‑à‑dire des Publications publiées par un utilisateur pour lequel vous disposez de jetons utilisateur, vous enverrez des requêtes avec un contexte utilisateur, ce qui signifie une authentification à la fois avec les clés de votre App et des jetons d’accès spécifiques à l’utilisateur. Ces jetons d’accès utilisateur sont généralement fournis via le processus « Connexion avec X » ou obtenus directement auprès de l’utilisateur (veuillez noter que vous devez utiliser twurl si vous obtenez les jetons directement auprès de l’utilisateur). Une fois que l’utilisateur vous a fourni ses jetons, ceux‑ci n’expirent pas et peuvent être utilisés avec l’Engagement API pour effectuer des requêtes en son nom, tant que l’utilisateur ne réinitialise pas ses jetons ni ne change son mot de passe, auquel cas il devra vous fournir les nouveaux jetons. Vous pouvez consulter quelles métriques exigent quel type d’authentification via ce tableau.

Sélection d’un endpoint de l’Engagement API

L’Engagement API fournit trois endpoints distincts :
  • Totals - fournit les totaux globaux de certaines métriques issues de Publications « owned » ou « unowned ». Certaines métriques sont disponibles pour toutes les Publications, tandis que d’autres ne sont disponibles que pour les Publications publiées au cours des 90 derniers jours. Prend en charge 250 Publications par requête.
  • 28 hour - fournit des métriques d’engagement sous forme de séries temporelles pour les Publications « owned » des 28 dernières heures. Prend en charge 25 Publications par requête.
  • Historical - fournit des métriques d’engagement sous forme de séries temporelles pour une période allant jusqu’à quatre semaines consécutives pour les Publications « owned » publiées depuis le 1er septembre 2014. Prend en charge 25 Publications par requête.  
Chaque endpoint possède ses propres caractéristiques. Que vous prévoyiez d’utiliser les trois ou que vous cherchiez à déterminer lequel correspond le mieux à votre cas d’usage, il est important de comprendre les différences entre eux. Ci-dessous, nous présentons quelques concepts clés, examinons plus en détail les trois endpoints, puis proposons des exemples de cas d’usage qui correspondent généralement à un endpoint spécifique. Nous espérons que ces informations vous aideront à intégrer plus efficacement les trois endpoints, ou à décider quel endpoint unique répond le mieux à vos besoins.  

Concepts clés

Plusieurs concepts clés permettent d’illustrer les différentes fonctionnalités des trois endpoints de l’Engagement API, ainsi que les données qu’ils fournissent.  
Impressions et métriques d’engagement
Les impressions représentent le nombre de fois qu’une Publication donnée a été vue sur la plateforme X dans un contexte organique. Les impressions générées à partir de Publications vues dans un contexte Promoted ou Paid ne sont pas incluses. Avant l’Engagement API, les impressions de Publication ne représentaient qu’une mesure des vues potentielles. Elles étaient basées sur le comptage des abonnés du compte de l’auteur et de ceux de tout compte retweetant le contenu. Elles ne tenaient pas compte de la situation fréquente dans laquelle un utilisateur donné ne voit en réalité pas la Publication. Les métriques d’impression générées par l’Engagement API constituent une mesure réelle du nombre de fois qu’une Publication a été rendue à l’affichage. Si un abonné à votre compte ne voit pas votre Publication, cela ne compte pas comme une impression. L’Engagement API fournit des métriques sur 14 types de métriques d’engagement distincts, chacun représentant une action spécifique qu’un utilisateur peut effectuer lorsqu’une Publication lui est présentée. Celles-ci incluent le fait de retweeter, d’aimer, de répondre, de cliquer sur des entités comme les #hashtags, les liens et les médias, de suivre l’auteur et de consulter le profil de l’auteur. L’ensemble de ces actions individuelles est agrégé dans une métrique unique, Engagements.
Contenu X détenu et non détenu
L’Engagement API établit une distinction claire entre les Publications détenues et non détenues. Les Publications détenues sont des Publications publiées depuis votre compte, ou des Publications pour lesquelles vous avez obtenu l’autorisation de demander des données d’engagement. Comme avec les autres X API, vous obtenez cette autorisation lorsque d’autres utilisateurs/comptes X partagent des jetons d’accès qui vous permettent d’effectuer des appels à l’API en leur nom. Un moyen courant d’obtenir ces jetons est d’utiliser le processus « Sign in with X ». L’endpoint /totals fournit des données d’engagement pour les Publications détenues et non détenues. Pour les Publications non détenues, vous pouvez demander les métriques d’engagement qui sont disponibles publiquement dans l’affichage d’une Publication : J’aime, Retweet et Réponse. Pour ces métriques, l’atout de l’Engagement API est de permettre de les récupérer à grande échelle de manière automatisée. Pour les Publications détenues, l’endpoint /totals fournit également les métriques d’Impression et d’engagement total. Les endpoints /28hr et /historical fournissent des métriques uniquement pour les Publications détenues, ce qui signifie que vous devez transmettre le contexte utilisateur lorsque vous faites une requête à ces endpoints.
Données d’engagement totales et en séries temporelles
L’endpoint /totals fournit, comme son nom l’indique, uniquement des totaux globaux pour ses types d’engagement. Ses chiffres représentent les totaux à jour depuis la publication de la Publication. Si une Publication vient d’être publiée et que vous demandez à plusieurs reprises ses métriques, ces totaux changeront généralement à chaque requête. Les endpoints /28hr et /historical peuvent fournir à la fois des totaux globaux et des données en séries temporelles. Lorsque vous demandez des données en séries temporelles, les métriques d’engagement peuvent être agrégées en données quotidiennes ou horaires.    Consultez notre documentation sur les regroupements d’engagement pour savoir comment demander des données en séries temporelles avec les endpoints /28hr et /historical.

Endpoints et exemples de cas d’usage

Compte tenu des caractéristiques et des différences évoquées ci-dessus, chaque endpoint correspond généralement à différents types de cas d’usage. Pour vous aider à décider quel endpoint sert le mieux votre cas d’usage particulier, vous trouverez ci-dessous quelques exemples de besoins exprimés par des utilisateurs et l’endpoint qui y répond le mieux.
/totals
  • J’ai seulement besoin d’accéder à certains types de métriques (Impressions, Engagements, Favoris, Retweets, Tweets cités, Réponses et Vues vidéo).
  • J’ai besoin d’accéder à des données d’engagement de base pour n’importe quelle Publication, pas seulement celles qui m’appartiennent.
  • Je veux comparer les performances avec un concurrent.
  • Je veux suivre des statistiques d’engagement de base pour un hashtag ou une campagne qui inclut des Publications qui ne m’appartiennent pas.
  • Je n’ai pas besoin de données ventilées par jour ou par heure, j’ai seulement besoin du total actuel au moment où j’envoie une requête.
  • J’ai besoin d’une seule métrique à afficher dans un rapport ou un tableau de bord et je ne veux stocker aucune donnée.
  • Je veux afficher les données au chargement de la page, et j’ai seulement besoin d’effectuer une requête et d’obtenir une réponse.
  • J’ai besoin d’accéder à des données pour des centaines de milliers ou des millions de Publications par jour.  
/28hr
  • J’ai besoin d’accéder aux 17 types de métriques.
  • Je veux afficher des données pour des Publications très récentes publiées au cours des 28 dernières heures.
  • J’ai une tâche qui s’exécute une fois par jour pour récupérer les données qui m’intéressent et je n’ai besoin d’obtenir des données que pour le dernier jour.
  • J’ai besoin que les métriques soient ventilées par jour ou par heure.
  • Je veux afficher, dans un tableau de bord, des séries temporelles avec une ventilation de l’activité par heure.
  • J’ai besoin d’un niveau d’accès élevé pour des centaines de milliers de Publications par jour.
  • J’ai des capacités de stockage et je peux actualiser les données une fois par jour et conserver un cumul.  
/historical
  • J’ai besoin d’accéder aux 17 types de métriques.
  • J’ai besoin d’obtenir des données historiques pour des Publications créées remontant jusqu’à septembre 2014.
  • Je veux afficher une analyse historique détaillée comparant les campagnes.
  • J’ai besoin que les métriques soient ventilées par jour ou par heure.
  • Je n’ai pas besoin d’un niveau d’accès élevé à l’Engagement API et j’ai seulement besoin d’obtenir des données pour quelques centaines ou milliers de Publications par jour.

Caractéristiques clés de l’Engagement API

  • API REST fournissant des données JSON et prenant en charge les requêtes POST avec des corps de requête JSON.
  • Types de requêtes : Les applications clientes peuvent effectuer les types de requêtes suivants :
    • Engagements totaux — requête HTTP POST vers l’endpoint /totals
    • Engagements sur les 28 dernières heures — requête HTTP POST vers l’endpoint /28hr
    • Engagements historiques — requête HTTP POST vers l’endpoint /historical
  • Authentification OAuth :
    • Contexte utilisateur OAuth 1.0a : Toutes les métriques disponibles sont accessibles pour les Publications appartenant à un utilisateur qui a autorisé votre App via OAuth à 3 volets. Vous devez utiliser les jetons d’accès de cet utilisateur lors de l’envoi de votre requête.
    • Jeton Bearer OAuth 2.0 : Certaines métriques (Retweets, Tweets cités, Réponses, Favoris et Vues vidéo) sont disponibles pour toute Publication publique. 
  • Métadonnées et structure de requête : Les données de requête constituent un objet JSON composé d’un tableau d’identifiants de Publication, d’un tableau de types d’engagement et d’une structure de regroupement d’engagement.
  • Publications par requête :
    • Endpoint /totals : 250 identifiants de Publication
    • Endpoint /28hr : 25 identifiants de Publication
    • Endpoint /historical : 25 identifiants de Publication
  • Disponibilité des métriques d’engagement :
    • /totals — Totaux des métriques depuis la date de publication de la Publication. Les Impressions et Engagements sont disponibles pour les Publications publiées au cours des 90 derniers jours, tandis que les Retweets, Tweets cités, Réponses, Favoris et Vues vidéo sont disponibles pour toutes les Publications.
    • /28hr — 28 dernières heures à partir du moment de la requête.
    • /historical — Toute période de 28 jours à partir du 1er septembre 2014.
  • Types de métriques : Chaque requête inclut un tableau de Types de métriques. Leur disponibilité dépend de l’endpoint et, dans le cas d’une requête à l’endpoint /totals, du fait que les Publications soient ou non soumises aux autorisations de l’utilisateur.
    • Endpoint /totals :
      • Toutes les Publications : Favoris, Retweets, Tweets cités, Réponses et Vues vidéo
      • Nécessite un contexte utilisateur OAuth 1.0a : Impressions, Engagements, Favoris, Réponses et Retweets
    • Endpoints /28hr et /historical (nécessitent un contexte utilisateur OAuth 1.0a avec le jeton d’accès du propriétaire de la Publication) : Impressions, Engagements, Favoris, Réponses, Retweets, Clics sur URL, Clics sur hashtag, Clic sur le détail, Clics sur lien permanent, Clics sur média, Tentatives d’installation d’App, Ouvertures d’App, E-mails de Publication, Vues vidéo et Vues média
  • Regroupements d’engagement : Chaque requête inclut un tableau de Regroupements d’engagement. Avec ces regroupements, vous pouvez personnaliser la façon dont les métriques renvoyées sont organisées. Jusqu’à trois regroupements peuvent être inclus dans chaque requête. Les métriques peuvent être organisées selon les valeurs suivantes :
    • Tous les endpoints : identifiant de Publication, type d’engagement
    • Endpoints /28hr et /historical : ces endpoints fournissent des séries temporelles si ces regroupements supplémentaires sont spécifiés : Jour d’engagement, Heure d’engagement
  • Attentes en matière d’intégration : Votre équipe sera responsable de ce qui suit :
    • Créer et maintenir une application cliente capable d’envoyer des requêtes HTTP à l’Engagement API et qui renvoie les métriques d’engagement pour les identifiants de Publication inclus dans la requête.
  • Limitations
  • Les vues vidéo ne sont disponibles que pour les Publications âgées de 1 800 jours ou moins.

Authentification avec l’Engagement API

Veuillez noter :  X doit activer l’accès à l’Engagement API pour votre App développeur avant que vous puissiez commencer à utiliser l’API. Pour ce faire, veillez à communiquer l’App ID que vous avez l’intention d’utiliser à des fins d’authentification à votre responsable de compte ou à votre équipe de support technique.
Deux méthodes d’authentification sont disponibles avec l’Engagement API : OAuth 1.0a et OAuth 2.0 Bearer Token OAuth 2.0 Bearer Token (également appelé « application-only ») vous permet d’accéder aux métriques d’engagement publiques. Cette méthode d’authentification peut être utilisée pour obtenir les totaux des Favorites (aussi appelés Likes), Retweets, Quote Tweets, Replies et vues vidéo pour toute Publication disponible publiquement lors de requêtes vers le /totals endpoint OAuth 1.0a (également appelé « user context ») vous permet d’effectuer des requêtes au nom d’un utilisateur et d’accéder aux métriques d’engagement privées qui appartiennent à l’utilisateur en question.  Cette méthode d’authentification est requise pour :
  • Toutes les requêtes envoyées vers le /28hr endpoint et le /historical endpoint
  • L’accès à l’une quelconque des métriques privées suivantes : Impressions, Engagements, Media Views, Media Engagements, URL Clicks, Hashtag Clicks, Detail Expands, Permalink Clicks, App Install Attempts, App Opens, Email Post, User Follows et User Profile Clicks
Lorsque vous envoyez une requête avec OAuth 1.0a, vous devez inclure les Access Tokens (Access Token et Secret) de l’utilisateur qui possède la Publication ou la ressource protégée concernée. Si vous ne fournissez pas les Access Tokens utilisateur corrects lors de la requête de données utilisateur protégées, l’Engagement API renverra une erreur 403 Forbidden. L’Engagement API ne vous permettra pas de récupérer des données d’engagement pour des Publications protégées, même si vous vous authentifiez au nom de l’utilisateur qui possède ces Publications. Toute tentative en ce sens renverra une erreur 400 Bad Request, avec le message "Tweet ID(s) are unavailable". Si vous envoyez une requête au nom de votre propre compte X (en d’autres termes, le compte qui possède l’App développeur), vous pouvez générer les Access Tokens requis directement depuis la Console de développement, sous l’onglet « Keys and tokens » de l’App développeur. Si vous effectuez une requête au nom de tout autre utilisateur, vous devrez utiliser le flux OAuth en 3 étapes pour obtenir les Access Tokens requis. La documentation suivante contient davantage d’informations sur la manière de procéder : OAuth 1.0a: how to obtain a user’s access tokens. Pour d’autres exemples, notamment sur la façon de s’authentifier avec OAuth 1.0a, consultez le code Python d’exemple XDevelopers pour l’Engagement API.

Changements récents apportés à l’Engagement API

L’Engagement API fournit des métriques d’impressions et d’engagement inestimables qui vous permettent de surveiller les performances de votre activité sur X. Dans le cadre de nos efforts continus pour permettre des décisions marketing fondées sur nos données, nous sommes heureux de partager des changements récents apportés à l’Engagement API qui offrent une plus grande cohérence des métriques sur l’ensemble de X.   Nous avons récemment déployé des changements pour moderniser l’Engagement API afin d’utiliser la même méthodologie d’agrégation de métriques que celle employée par le tableau de bord analytique de X (analytics.x.com). Nous avons adopté une approche réfléchie pour essayer de minimiser les changements d’API disruptifs lors du déploiement de ces nouvelles métriques et avons déployé le premier ensemble de changements le 9 octobre 2017. Ces changements améliorent la cohérence entre tous les endroits où vous ou vos clients pouvez suivre vos performances sur X. Veuillez consulter le récapitulatif détaillé des changements ci‑dessous :
MetricChangement
engagementsNous avons mis à jour les métriques qui sont agrégées dans le total des engagements afin de les aligner sur le tableau de bord analytique des Publications. Engagements mesure « le nombre de fois où des personnes ont interagi avec cette Publication ».

Pour les Publications qui incluent des médias comme une vidéo ou un GIF, la métrique engagements n’inclura plus les vues de média. Les vues de média sont désormais accessibles via une nouvelle métrique, media_views.
media_clicks*Cette métrique a été remplacée par une nouvelle métrique appelée « media_engagements ».
video_viewsDepuis le 6 juillet 2018, cette métrique est disponible pour les Publications « non détenues » via le endpoint /totals. Cela signifie que vous pouvez accéder aux vues vidéo pour toutes les Publications en utilisant l’authentification App-only. 

Vous ne pouvez demander que des vues vidéo pour des Publications vieilles de moins de 1 800 jours. Si vous tentez de demander des vues vidéo pour une Publication plus ancienne que 1 800 jours, vous recevrez ce qui suit :

“unsupported_for_video_views_tweet_ids”: [“TWEET_ID”]

Veuillez noter que cela diffère de media_views dans la mesure où video_views repose sur le standard MRC de 50 % de la vidéo visible pendant au moins deux secondes.

De plus, notez que vous pouvez constater un écart entre la métrique des vues vidéo affichée sur les plateformes X détenues et exploitées (application mobile et site web) et le nombre que vous recevez via les endpoints /28hr et /historical.

* Les vues vidéo affichées dans l’interface utilisateur X et fournies via le endpoint /totals indiquent le nombre de vues vidéo agrégé sur toutes les Publications dans lesquelles la vidéo donnée a été publiée. Cela signifie que la métrique affichée dans l’UI inclut les vues combinées de chaque instance où la vidéo a été Retweetée ou republiée dans des Publications distinctes.
* Les vues vidéo fournies par les endpoints /28hr et /historical incluront uniquement les vues générées par la Publication spécifique pour laquelle vous récupérez les métriques.
media_viewsCette métrique inclut toutes les vues (lecture automatique et clic) de vos médias, comptabilisées sur les vidéos, vines, GIF et images.

Veuillez noter que les Publications avec des images n’affichent pas de métrique media_views dans le tableau de bord analytique, mais qu’elle sera renvoyée dans l’Engagement API.
media_engagements*Cette métrique inclut le nombre de clics sur vos médias pour les vidéos, vines, GIF et images. Cette métrique remplace media_clicks.
quote_tweetsDepuis le 7 juillet 2020, cette métrique est disponible pour les Publications « non détenues » via le endpoint /totals. Cela signifie que vous pouvez accéder au nombre de Publications de citation pour toutes les Publications en utilisant l’authentification App-only.

Interpréter les métriques

Remarque : Vous pouvez constater des différences entre les données affichées sur certains tableaux de bord Web de X et les données renvoyées par l’Engagement API. Ces différences apparaissent parce que les tableaux de bord Web n’affichent généralement que les interactions et/ou impressions qui se sont produites dans l’intervalle de temps sélectionné. Par exemple, un tableau de bord Web peut afficher les interactions sur des Publications sur la durée d’un mois calendaire, tandis que l’Engagement API peut indiquer des interactions qui dépassent la durée de ce mois, mais restent incluses dans la plage temporelle demandée. Dans ce type de cas, l’Engagement API doit être considérée comme la source de référence.  

Données d’impressions et d’engagement

L’Engagement API fournit des impressions et des données d’engagement organiques. Les impressions représentent le nombre de fois qu’une Publication donnée a été vue sur la plateforme X dans un contexte organique. Les impressions générées par des Publications vues dans un contexte Promoted ou Paid ne sont pas incluses. Les engagements représentent le nombre de fois qu’une Publication donnée a fait l’objet d’une interaction de la part d’un utilisateur, à la fois dans un contexte organique et promoted. Les engagements incluent, entre autres, les Retweets, Favoris, Réponses, clics sur des URL, clics sur des hashtags, clics sur des mentions et vues de médias. Pour la liste complète des actions d’engagement incluses, consultez la section Engagement Data.  Pour calculer un taux d’engagement de référence, utilisez le nombre total d’engagements divisé par le nombre total d’impressions pour une Publication donnée sur la période que vous analysez. Les données d’impressions et d’engagement ne peuvent être récupérées que pour les Publications provenant de @handles que vous possédez, ou de @handles qui ont autorisé votre application à consulter les détails concernant leurs Publications.  En interne, l’Engagement API suit le nombre de @handles uniques pour lesquels des requêtes ont été effectuées par rapport à la limite de @handles prévue au contrat.  Il est recommandé de suivre également l’utilisation des requêtes @handle côté client tout au long du mois.  

Mesures vidéo

Il existe plusieurs mesures différentes qui représentent les impressions de médias sur X. La première est notre métrique de vues vidéo, qui repose sur le standard MRC selon lequel au moins 50 % de la vidéo doit être visible pendant au moins deux secondes. La seconde est la métrique Media Views, qui inclut toutes les vues (lecture automatique et clic) de vos médias, comptabilisées pour les vidéos, vines, GIF et images. La métrique de vues vidéo est disponible pour les Publications dont vous êtes le propriétaire via les endpoints /28hour et /historical, ainsi que pour toutes les Publications qui ne vous appartiennent pas via l’endpoint /totals.  Bien que la métrique de vues vidéo dans l’interface utilisateur de X utilise le même standard MRC, veuillez noter que vous pouvez observer un écart entre la métrique de vues vidéo affichée sur les plateformes détenues et exploitées par X (application mobile et site web) et la valeur que vous recevez via les différents endpoints de l’Engagement API.
  • Les vues vidéo fournies par l’endpoint /totals et par l’interface utilisateur de X affichent le nombre de vues vidéo agrégé pour toutes les Publications dans lesquelles la vidéo donnée a été publiée. Cela signifie que la métrique fournie via /totals et affichée dans l’interface utilisateur de X inclut la somme des vues de toute instance où la vidéo a été Retweetée ou republiée dans des Publications distinctes.
  • Les vues vidéo fournies par les endpoints /28hour et /historical de l’Engagement API incluent uniquement les vues générées par la Publication spécifique pour laquelle vous extrayez les métriques.   
Veuillez noter que nous ne fournissons pas de vues vidéo pour les Publications âgées de plus de 1800 jours. À la place, nous renvoyons un objet qui répertorie les Publications âgées de plus de 1800 jours. Vous continuerez à recevoir toutes les autres métriques pour les Publications demandées dans un objet séparé. Voici un exemple de réponse :
{
  "unsupported_for_video_views_tweet_ids": [
    "479311209565413376",
    "477139122520219648"
  ],
  "grouping name": {
    "479311209565413376": {
      "favorites": "69",
      "impressions": "1692",
      "retweets": "142",
      "video_views": "0"
    },
    "477139122520219648": {
      "favorites": "10",
      "impressions": "1023",
      "retweets": "6",
      "video_views": "0"
    },
    "1397568983931392004": {
      "favorites": "268",
      "impressions": "26803",
      "retweets": "56",
      "video_views": "17902"
    }
  }
}
La métrique Media Views n’est disponible que pour les Publications vous appartenant via les endpoints /28hour et /historical.

Regroupements de l’API Engagement

Les regroupements permettent une organisation personnalisée des métriques d’engagement renvoyées. Vous pouvez inclure un maximum de 3 regroupements par requête. Vous pouvez choisir de regrouper les métriques selon une ou plusieurs des valeurs suivantes : Les trois endpoints prennent en charge :
  • tweet.id
  • engagement.type  
Les endpoints /28hr et /historical peuvent fournir des métriques de séries temporelles et, par conséquent, prennent en charge :
  • engagement.day
  • engagement.hour
Les regroupements sont appliqués successivement, ce qui vous permet de modifier le format des résultats souhaité en changeant l’ordre de vos valeurs group_by. Les regroupements qui contiennent quatre valeurs group_by ne seront pris en charge que dans l’un des deux formats suivants :
"group_by": [
    "tweet.id",
    "engagement.type",
    "engagement.day",
    "engagement.hour"
  ]
OU
"group_by": [
    "engagement.type",
    "tweet.id",
    "engagement.day",
    "engagement.hour"
]
Par exemple, si vous souhaitez générer des totaux globaux par type de métrique, incluez la spécification de « groupings » suivante dans votre requête (et consultez la page Référence de l’API pour plus d’informations sur la façon de constituer vos requêtes) :
{
  "engagement_types": [
    "favorites",
    "replies",
    "retweets"
  ],
  "groupings": {
    "Grand Totals": {
      "group_by": [
        "engagement.type"
      ]
    }
  }
}
Avec ce regroupement, la réponse JSON de l’Engagement API inclura un attribut de niveau racine "Grand Totals" qui contient les totaux globaux par type de métrique :
{
  "Grand Totals": {
    "favorites": "12",
    "replies": "2",
    "retweets": "2"
  }
}
Pour générer, pour une seule Publication, une série temporelle de métriques sur 4 heures, regroupée par ID de Publication, la spécification de regroupement suivante ferait partie de la requête :
{
  "start": "2016-02-10T17:00:00Z",
  "end": "2016-02-10T21:00:00Z",
  "tweet_ids": [
    "697506383516729344"
  ],
  "engagement_types": [
    "impressions",
    "engagements"
  ],
  "groupings": {
    "Tweets_MetricType_TimeSeries": {
      "group_by": [
        "tweet.id",
        "engagement.type",
        "engagement.hour"
      ]
    }
  }
}
Avec ce regroupement, la réponse JSON de l’API Engagement inclura un attribut au niveau racine "Tweets_MetricType_TimeSeries" qui contient les métriques ventilées par id de Publication, puis par type de métrique, ainsi que les séries chronologiques horaires correspondantes :
{
  "Tweets_MetricType_TimeSeries": {
    "697506383516729344": {
      "impressions": {
        "2016-02-10": {
          "17": "551",
          "18": "412",
          "19": "371",
          "20": "280"
        }
      },
      "engagements": {
        "2016-02-10": {
          "17": "8",
          "18": "6",
          "19": "3",
          "20": "0"
        }
      }
    }
  }
}

FAQ

Enterprise

Engagement API

L’accès à l’Engagement API est accordé dans le cadre d’un abonnement entreprise. Veuillez remplir ce formulaire pour entrer en contact avec notre équipe commerciale.
Si votre contrat inclut une limite sur le nombre de handles distincts pouvant être utilisés avec l’Engagement API, le système interne de X suivra le nombre d’utilisateurs authentifiés possédant des Publications qui sont interrogées avec l’Engagement API. Les clients doivent également suivre ce nombre distinct côté client. Actuellement, il n’existe aucune API d’usage ni aucune interface permettant de vérifier l’utilisation de @handle pour l’Engagement API. Le système ne bloquera pas les dépassements si davantage de @handles sont demandés que ce qui est prévu au contrat. À la fin du mois de facturation, le nombre de @handles distincts interrogés est comparé au montant contractuel et un dépassement sera facturé conformément aux conditions du contrat.
Actuellement, il n’existe aucune API d’usage ni aucune interface permettant de vérifier l’utilisation de @handle pour l’Engagement API. Le système ne bloquera pas les dépassements si davantage de @handles sont demandés que ce qui est prévu au contrat. À la fin du mois de facturation, le nombre de @handles distincts interrogés est comparé au montant contractuel et un dépassement sera facturé conformément aux conditions du contrat.Le champ de métadonnées engagements renvoyé dans la charge utile n’est pas égal à la somme de tous les différents totaux de métriques d’engagement. Pourquoi est-ce le cas ?C’est le comportement attendu. Le champ de métadonnées engagements peut ne pas toujours correspondre à la somme de toutes les métriques d’engagement individuelles renvoyées par l’API. En effet, le champ de métadonnées engagements peut inclure des engagements supplémentaires qui n’ont pas de métriques spécifiques détaillées dans la charge utile. Autrement dit, additionner tous les différents totaux de métriques d’engagement peut ne pas être égal à la valeur que vous voyez dans le champ de métrique engagements qui vous est renvoyé dans la charge utile.Vous pouvez considérer le champ de métadonnées engagements comme tout clic ou interaction effectué sur la Publication.  Le champ url_clicks dans la réponse de la charge utile renvoie un nombre, alors que la Publication ne contient pas d’URL. Comment est-ce possible ?Cela peut être dû au fait qu’une Publication contenant, par exemple, un hashtag (qui crée un lien vers une autre page) sera comptabilisée comme un clic sur une URL si un utilisateur clique dessus.  
Il existe différentes raisons pour lesquelles vous pourriez ne pas être en mesure de récupérer des données d’engagement pour une Publication spécifique, notamment :
  • L’ID de Publication ou les ID de Publication que vous avez demandés ne sont pas disponibles en fonction du jeton d’authentification que vous utilisez pour récupérer des données pour le compte d’un tiers.
  • L’ID de Publication ou les ID de Publication que vous avez demandés pour le endpoint /totals ne datent pas de 90 jours ou moins et ne sont donc pas disponibles pour renvoyer les impressions ou les métriques d’engagement.
  • L’ID de Publication ou les ID de Publication que vous avez demandés ne sont plus disponibles, ce qui indique généralement qu’elles ont été supprimées ou ne sont plus accessibles publiquement pour une autre raison.
Veuillez consulter les différents messages d’erreur que vous recevrez probablement dans l’un des cas ci-dessus.
Vous pouvez utiliser les informations x-per-minute-limit et x-per-minute-remaining renvoyées par l’en-tête de réponse lorsque vous envoyez une requête à l’Engagement API pour surveiller votre consommation.x-per-minute-limit vous indique quel est votre quota et x-per-minute-remaining vous indique combien d’appels il vous reste.

Guide de dépannage des erreurs

Assurez-vous de consulter nos directives relatives à l’authentification avec l’Engagement API.
[
    Your account could not be authenticated. Reason: Unknown Authorization Type;
]
Assurez-vous de ne pas utiliser de jetons d’accès ni de secrets lorsque vous essayez de vous authentifier avec l’endpoint /totals. En effet, si vous incluez ces jetons et tentez de récupérer du contenu à partir d’une Publication qui n’est pas associée à ces jetons, vous recevrez probablement une erreur de ce type :
[
    Forbidden to access tweets: 1054424731825229824;
]

Vous ne trouvez toujours pas ce que vous cherchez ?

Veuillez contacter notre support technique et nous vous répondrons dans les plus brefs délais.

Référence de l’API

POST insights/engagement

Methods

MéthodeDescription
POST /insights/engagement/totalsRécupérer le nombre total d’impressions et d’engagements pour un ensemble de Tweets.
POST /insights/engagement/historicalRécupérer les impressions et les engagements pour un ensemble de Tweets sur une période pouvant aller jusqu’à 4 semaines, en remontant jusqu’au 1er septembre 2014.
POST /insights/engagement/28hrRécupérer les impressions et les engagements pour un ensemble de Tweets au cours des 28 dernières heures.

Authentification

L’Engagement API nécessite l’utilisation de HTTPS et prend en charge à la fois le User Context et l’Application-only OAuth. La plupart des requêtes vers l’Engagement API exigent l’utilisation de l’OAuth à 3 volets (une version spécifique du User Context), ce qui signifie que vous utilisez la consumer key et le consumer secret de l’App qui a été enregistrée et approuvée pour l’accès à l’Engagement API par votre account manager Twitter, ainsi que le jeton d’accès et le secret de jeton d’accès des propriétaires des Tweet pour appeler l’endpoint. Les requêtes suivantes nécessitent ce type d’OAuth :
  • Toute requête vers /totals pour obtenir les types de métriques Impressions et Engagements, qui sont limitées aux Tweet détenus (owned)
  • Toute requête vers /28hr
  • Toute requête vers /historical
Certaines requêtes vers l’Engagement API peuvent être effectuées à l’aide de l’Application-only OAuth, ce qui signifie que vous devez simplement fournir votre consumer key et votre consumer secret, ou un Jeton Bearer. La requête suivante peut être effectuée avec ce type d’OAuth :
  • Toute requête vers /totals pour obtenir les types de métriques Favorites, Replies, Retweets ou Video Views, qui peuvent être récupérées pour n’importe quel Tweet
Pour toute requête, vous devrez configurer une App Twitter et la clé d’API correspondante à l’aide de la console de gestion d’App disponible sur developer.x.com. Veuillez noter : vous pouvez afficher et modifier vos Apps Twitter existantes via le Twitter app dashboard si vous êtes connecté à votre compte Twitter sur developer.x.com. Une fois que vous avez configuré votre App, l’id de l’App devra être approuvé par votre account representative afin que votre App puisse effectuer des requêtes vers l’Engagement API. Des jetons d’accès doivent être utilisés pour représenter l’« utilisateur actuel », et les requêtes effectuées au nom d’un autre utilisateur doivent être signées avec un jeton valide. Assurez-vous d’encoder correctement les caractères réservés dans les URL et les corps de requêtes POST avant de préparer les chaînes de base de signature OAuth. Pour plus d’informations sur la manière de commencer avec OAuth, veuillez consulter les liens suivants :

POST /insights/engagement/totals

L’endpoint totals permet de récupérer les totaux actuels d’impressions et d’engagements pour un ensemble pouvant compter jusqu’à 250 Tweets à la fois.
Méthode HTTPHTTP POST
URLhttps://data-api.x.com/insights/engagement/totals
Type de contenuapplication/json
CompressionGzip. Pour effectuer une requête avec la compression Gzip, envoyez un en-tête Accept-Encoding dans la requête.
L’en-tête doit être au format suivant :

Accept-Encoding: gzip
Format de la requête POSTLes requêtes peuvent être envoyées sous forme de requête POST dont le corps est un objet JSON contenant une collection d’ID de Tweet et un regroupement souhaité. Le POST est formaté comme un tableau avec des objets tweets, engagements et groupings. Chaque requête peut contenir au maximum 250 ID de Tweet.

Voici un exemple de corps de requête POST :


{
“tweet_ids”: [
“Tweet ID 1”,
“Tweet ID 2”,
“Tweet ID 3”
],
“engagement_types”: [
“impressions”,
“engagements”,
“favorites”,
“quote_tweets”
],
“groupings”: {
“grouping name”: {
“group_by”: [
“tweet.id”,
“engagement.type”
]
}
}
}
ID de TweetsUn tableau qui inclut les identifiants de Tweets pour lesquels les données d’engagement seront interrogées. Veuillez noter que vous ne pouvez demander des données que pour les Tweets créés par le @handle ayant servi à l’authentification. Jusqu’à 250 Tweets peuvent être inclus par requête, et les identifiants de Tweets doivent être représentés sous forme de chaînes de caractères.
Types d’engagementUn tableau qui inclut les types de métriques d’engagement à interroger. Le point de terminaison Totals prend uniquement en charge les types d’engagement suivants : impressions, engagements, favorites, retweets, quote_tweets, replies, video_views.
Le point de terminaison /totals permet de récupérer impressions et engagements pour les Tweets créés au cours des 90 derniers jours, ainsi que favorites, retweets, quote_tweets, replies et video_views pour n’importe quel Tweet.
RegroupementsLes résultats renvoyés par l’Engagement API peuvent être retournés sous différents groupes afin de répondre au mieux à vos besoins. Vous pouvez inclure jusqu’à 3 groupements par requête.

Pour chaque groupement, vous pouvez définir un nom de groupement personnalisé afin de faciliter la référence à ce type de groupement dans votre application.

Une fois que vous avez défini un nom de groupement, vous pouvez choisir de regrouper tweet.id et/ou engagement.type.

Les groupements sont appliqués séquentiellement, ce qui vous permet de modifier le format de résultat souhaité en changeant l’ordre de vos valeurs group_by. Voici un exemple de groupement qui affiche les métriques séparées par ID de Tweet et par type de métrique :


“groupings”: {
“my grouping name”: {
“group_by”: [
“tweet.id”,
“engagement.type”
]
}
}
Taille maximale de la requête POSTLes requêtes peuvent inclure jusqu’à 250 identifiants de Tweets à la fois.
Format de la réponseJSON. L’en-tête de votre requête doit demander une réponse au format JSON.
Limitation de débitUne limitation de débit par minute s’applique, comme spécifié dans votre contrat en fonction de votre niveau d’accès.
Exemple de requête (métriques publiques)curl —request POST
—url https://data-api.x.com/insights/engagement/totals
—header ‘accept-encoding: gzip’
—header ‘authorization: Bearer ’
—header ‘content-type: application/json’
—data ’{
“tweet_ids”: [
“1070059276213702656”,“1021817816134156288”,“1067094924124872705”
],
“engagement_types”: [
“favorites”,“retweets”,“replies”,“quote_tweets”,“video_views”
],
“groupings”: {
“perTweetMetricsUnowned”: {
“group_by”: [
“tweet.id”,
“engagement.type”
]
}
}
}
—verbose
—compressed
Exemple de requêtecurl —request POST
—url https://data-api.x.com/insights/engagement/totals
—header ‘accept-encoding: gzip’
—header ‘authorization: OAuth oauth_consumer_key=“consumer-key-for-app”,oauth_nonce=“generated-nonce”,oauth_signature=“generated-signature”,oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“generated-timestamp”,oauth_token=“access-token-for-authed-user”, oauth_version=“1.0”’
—header ‘content-type: application/json’
—data ’{
“tweet_ids”: [
“1060976163948904448”,“1045709644067471360”
],
“engagement_types”: [
“favorites”,“replies”,“retweets”,“video_views”,“impressions”,“engagements”
],
“groupings”: {
“perTweetMetricsOwned”: {
“group_by”: [
“tweet.id”,
“engagement.type”
]
}
}
}’
—verbose
—compressed
Exemple de réponse (métriques publiques){
“perTweetMetricsUnowned”: {
“1021817816134156288”: {
“favorites”: “530”,
“quote_tweets”: “79”,
“replies”: “147”,
“retweets”: “323”,
“video_views”: “0”
},
“1067094924124872705”: {
“favorites”: “1360”,
“quote_tweets”: “29”,
“replies”: “56”,
“retweets”: “178”,
“video_views”: “5754512”
},
“1070059276213702656”: {
“favorites”: “69”,
“quote_tweets”: “5”,
“replies”: “7”,
“retweets”: “26”,
“video_views”: “0”
}
}
}
Exemple de réponse{
“perTweetMetricsOwned”: {
“1045709644067471360”: {
“engagements”: “2”,
“favorites”: “0”,
“impressions”: “47”,
“replies”: “0”,
“retweets”: “8”,
“quote_tweets”: “5”,
“video_views”: “0”
},
“1060976163948904448”: {
“engagements”: “4”,
“favorites”: “0”,
“impressions”: “148”,
“replies”: “1”,
“retweets”: “9”,
“quote_tweets”: “2”,
“video_views”: “0”
}
}
}
Identifiants de Tweets indisponiblesPour les requêtes qui incluent des identifiants de Tweet devenus indisponibles (par exemple, supprimés), des données appropriées seront renvoyées pour tous les identifiants de Tweet disponibles, et les identifiants de Tweet indisponibles seront répertoriés dans un tableau nommé unavailable_tweet_ids. Par exemple :

{
“start”: “2015-11-17T22:00:00Z”,
“end”: “2015-11-19T02:00:00Z”,
“unavailable_tweet_ids”: [
“323456789”
],
“group1”: {
“423456789”: {
“favorites”: “67”,
“replies”: “8”,
“retweets”: “26”,
“quote_tweets”: “2”
}
}
}

POST /insights/engagement/28hr

L’endpoint 28 heures permet de récupérer les impressions et les engagements pour un ensemble allant jusqu’à 25 Tweets au cours des 28 dernières heures. L’endpoint 28 heures permet également de demander toutes les métriques individuelles prises en charge. Pour la liste complète des métriques prises en charge, consultez Disponibilité des métriques.
Méthode HTTPHTTP POST
URLhttps://data-api.x.com/insights/engagement/28hr
Type de contenuapplication/json
CompressionGzip. Pour effectuer une requête en utilisant la compression Gzip, envoyez un en-tête Accept-Encoding dans la requête de connexion.
L’en-tête doit être au format suivant :

Accept-Encoding: gzip
Format POSTLes requêtes peuvent être envoyées sous forme de requête POST, dont le corps est un objet JSON contenant une collection d’ID de Tweet et un regroupement souhaité. La requête POST est structurée sous la forme d’un tableau contenant les objets tweets, engagements et groupings. Chaque requête peut contenir au maximum 25 ID de Tweet.

Voici à quoi ressemble un exemple de corps de requête POST :


{
“tweet_ids”: [
“Tweet ID 1”,
“Tweet ID 2”,
“Tweet ID 3”
],
“engagement_types”: [
“impressions”,
“engagements”,
“url_clicks”,
“detail_expands”
],
“groupings”: {
“grouping name”: {
“group_by”: [
“tweet.id”,
“engagement.type”,
“engagement.hour”
]
}
}
}
Identifiants de TweetUn tableau contenant les identifiants de Tweet des Tweets à interroger afin d’obtenir les données d’engagement. Notez que vous ne pouvez demander des données que pour des Tweets créés par le @handle utilisé pour l’authentification. Le point de terminaison de 28 heures accepte jusqu’à 25 Tweets par requête, et les identifiants de Tweet doivent être fournis sous forme de chaînes.
Types d’engagementUn tableau contenant les types de métriques d’engagement à interroger.

Pour l’endpoint de 28 heures, impressions, engagements et tous les types d’engagement individuels sont des métriques prises en charge. Pour la liste complète des métriques d’engagement prises en charge, voir Engagement Data.
RegroupementsLes résultats de l’Engagement API peuvent être renvoyés sous différents regroupements afin de répondre au mieux à vos besoins. Vous pouvez inclure jusqu’à 3 regroupements par requête.

Pour chaque regroupement, vous pouvez définir un nom de regroupement personnalisé afin de faciliter la référence à ce type de regroupement dans votre application. Une fois que vous avez défini un nom de regroupement, vous pouvez choisir de regrouper selon une ou plusieurs des valeurs suivantes :
tweet.id
engagement.type
engagement.day
engagement.hour
Les regroupements sont appliqués séquentiellement, ce qui vous permet de modifier le format de résultat souhaité en changeant l’ordre de vos valeurs group_by. Voici un exemple de regroupement qui affichera des métriques séparées par ID de Tweet et type de métrique, et qui ressemble à :

“groupings”: {
“my grouping name”: {
“group_by”: [
“tweet.id”,
“engagement.type”,
“engagement.day”
]
}
}


Les regroupements qui comportent 4 éléments group_by ne sont valides que s’ils utilisent l’un des deux ordres suivants. Les requêtes qui comportent 4 éléments group_by dans un seul regroupement et qui ne respectent pas l’un des ordres suivants renverront une erreur. De plus, un seul regroupement avec 4 éléments group_by sera autorisé par requête.

“group_by”: [
“tweet.id”,
“engagement.type”,
“engagement.day”,
“engagement.hour”
]

“group_by”: [
“engagement.type”,
“tweet.id”,
“engagement.day”,
“engagement.hour”
]
Taille maximale de la requête POSTLes requêtes peuvent cibler jusqu’à 25 identifiants de Tweet à la fois.
Format de la réponseJSON. L’en‑tête de votre requête doit spécifier que la réponse est au format JSON.
Limite de débitVous serez soumis à une limitation de débit par minute, telle que spécifiée dans votre contrat en fonction de votre niveau d’accès.
Exemple de requêtecurl -X POST “https://data-api.x.com/insights/engagement/28hr
-H ‘Accept-Encoding: gzip’
-H ‘Authorization OAuth oauth_consumer_key=“consumer-key-for-app”,oauth_nonce=“generated-nonce”,oauth_signature=“generated-signature”,oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“generated-timestamp”,oauth_token=“access-token-for-authed-user”, oauth_version=“1.0”’
-d ’{
“tweet_ids”: [
“123456789”
],
“engagement_types”: [
“impressions”,
“engagements”
],
“groupings”: {
“hourly-time-series”: {
“group_by”: [
“tweet.id”,
“engagement.type”,
“engagement.day”,
“engagement.hour”
]
}
}
}‘
Exemple de réponse{
“start”:“2015-09-14T17:00:00Z”,
“end”:“2015-09-15T22:00:00Z”,
“hourly-time-series”:{
“123456789”:{
“impressions”:{
“2015-09-14”:{
“17”:“551”,
“18”:“412”,
“19”:“371”,
“20”:“280”,
“21”:“100”,
“22”:“19”,
“23”:“6”
},
“2015-09-15”:{
“00”:“5”,
“01”:“2”,
“02”:“7”,
“03”:“3”,
“04”:“1”,
“05”:“0”,
“06”:“0”,
“07”:“0”,
“08”:“0”,
“09”:“0”,
“10”:“0”,
“11”:“0”,
“12”:“0”,
“13”:“0”,
“14”:“0”,
“15”:“0”,
“16”:“0”,
“17”:“0”,
“18”:“0”,
“19”:“0”,
“20”:“0”,
“21”:“0”
}
},
“engagements”:{
“2015-09-14”:{
“17”:“0”,
“18”:“0”,
“19”:“0”,
“20”:“0”,
“21”:“0”,
“22”:“0”,
“23”:“0”
},
“2015-09-15”:{
“00”:“0”,
“01”:“0”,
“02”:“0”,
“03”:“0”,
“04”:“0”,
“05”:“0”,
“06”:“0”,
“07”:“0”,
“08”:“0”,
“09”:“0”,
“10”:“0”,
“11”:“0”,
“12”:“0”,
“13”:“0”,
“14”:“0”,
“15”:“0”,
“16”:“0”,
“17”:“0”,
“18”:“0”,
“19”:“0”,
“20”:“0”,
“21”:“0”
}
}
}
}
}
Identifiants de Tweets indisponiblesPour les requêtes qui incluent des ID de Tweet devenus indisponibles (par exemple, supprimés), les données appropriées seront renvoyées pour tous les ID de Tweet disponibles, et les ID de Tweet indisponibles seront indiqués dans un tableau nommé unavailable_tweet_ids. Par exemple :

{
“start”: “2015-11-17T22:00:00Z”,
“end”: “2015-11-19T02:00:00Z”,
“unavailable_tweet_ids”: [
“323456789”
],
“group1”: {
“423456789”: {
“favorites”: “67”,
“replies”: “8”,
“retweets”: 26
}
}
}

POST /insights/engagement/historical

Le endpoint historique permet de récupérer les impressions et les engagements pour un ensemble pouvant aller jusqu’à 25 Tweets, pour une période maximale de 4 semaines. Actuellement, les données antérieures au 1er septembre 2014 ne peuvent pas être récupérées via l’API. Le endpoint historique permet également de récupérer l’ensemble des métriques individuelles prises en charge. Pour la liste complète des métriques prises en charge, consultez Metric Availability.
Méthode HTTPHTTP POST
URLhttps://data-api.x.com/insights/engagement/historical
Type de contenuapplication/json
CompressionGzip. Pour envoyer une requête avec la compression Gzip, ajoutez un en-tête Accept-Encoding à la requête de connexion.
L’en-tête doit être de la forme suivante :

Accept-Encoding: gzip
Format de la requête POSTLes requêtes peuvent être envoyées sous forme de requête POST dont le corps contient un objet JSON regroupant une collection d’identifiants de Tweet et un regroupement souhaité. La requête POST est structurée comme un tableau contenant les objets tweets, engagements et groupings. Chaque requête peut comporter au maximum 25 identifiants de Tweet. Chaque requête peut inclure une date de début et de fin personnalisée, pour une durée maximale de quatre semaines.


{
“tweet_ids”: [
“Tweet ID 1”,
“Tweet ID 2”,
“Tweet ID 3”
],
“engagement_types”: [
“impressions”,
“engagements”,
“url_clicks”,
“detail_expands”
],
“groupings”: {
“grouping name”: {
“group_by”: [
“tweet.id”,
“engagement.type”,
“engagement.hour”
]
}
}
}
Dates de début et de finUne date de début et une date de fin personnalisées peuvent être spécifiées à l’aide des valeurs start et end dans la requête. Vous devez spécifier une date de début et une date de fin couvrant une période n’excédant pas 4 semaines. La date de début la plus ancienne possible à ce jour est le 1er septembre 2014. Les dates de fin futures ne sont pas prises en charge. Si aucune date de début ni de fin n’est fournie, l’API utilisera par défaut les 4 semaines immédiatement précédentes.

La granularité minimale à laquelle les données peuvent être renvoyées par l’Engagement API est horaire. Pour toute requête effectuée avec des valeurs de début ou de fin qui ne correspondent pas exactement à une frontière horaire, les requêtes seront ajustées à l’heure entière incluse la plus proche. Par exemple, une requête avec “start”:“2015-07-01T12:24:00Z” et “end”:“2015-07-10T08:37:00Z” sera ajustée à “start”:“2015-07-01T12:00:00Z”,“end”:“2015-07-10T09:00:00Z”.
Identifiants de TweetUn tableau contenant les identifiants de Tweet des Tweets pour lesquels vous souhaitez récupérer les données d’engagement. Notez que vous ne pouvez demander des données que pour des Tweets créés par le @handle utilisé pour l’authentification. Le point de terminaison historique sur 4 semaines prend en charge jusqu’à 25 Tweets par requête, et les identifiants de Tweet doivent être fournis sous forme de chaînes.
Types d’engagementUn tableau contenant les types de métriques d’engagement à interroger.

Pour l’endpoint historique de 4 semaines, impressions, engagements et tous les types d’engagement individuels sont des métriques prises en charge. Pour la liste complète des métriques d’engagement prises en charge, consultez la page Engagement Data.

Remarque : actuellement, trois métriques afficheront la valeur zéro pour les requêtes effectuées avant le 15 septembre 2015 : favorites, replies et retweets.
RegroupementsLes résultats de l’Engagement API peuvent être renvoyés dans différents groupes afin de s’adapter au mieux à vos besoins. Vous pouvez inclure un maximum de 3 regroupements par requête.

Pour chaque regroupement, vous pouvez définir un nom de regroupement personnalisé afin de faciliter la référence à ce type de regroupement dans votre application. Une fois que vous avez défini un nom de regroupement, vous pouvez choisir de regrouper selon une ou plusieurs des valeurs suivantes :
tweet.id
engagement.type
engagement.day
engagement.hour
Les regroupements sont appliqués dans l’ordre, ce qui vous permet de modifier le format de résultat souhaité en changeant l’ordre de vos valeurs group_by. Un exemple de regroupement qui affichera les métriques séparées par ID du Tweet, type de métrique et jour a la forme suivante :

“groupings”: {
“my grouping name”: {
“group_by”: [
“tweet.id”,
“engagement.type”,
“engagement.day”
]
}
}


Les regroupements qui comportent 4 éléments group_by ne sont valides que s’ils utilisent l’un des deux ordres suivants. Les requêtes qui ont 4 éléments group_by dans un seul regroupement et qui ne correspondent à aucun des ordres ci-dessous renverront une erreur. De plus, un seul regroupement avec 4 éléments group_by sera autorisé par requête.

“group_by”: [
“tweet.id”,
“engagement.type”,
“engagement.day”,
“engagement.hour”
]

“group_by”: [
“engagement.type”,
“tweet.id”,
“engagement.day”,
“engagement.hour”
]
Limite de taille de la requête POSTLes requêtes peuvent porter sur un maximum de 25 identifiants de Tweet à la fois.
Format de la réponseJSON. L’en-tête de votre requête doit spécifier le format JSON pour la réponse.
Limitation du débitVous serez soumis à des limites de débit par minute, comme spécifié dans votre contrat en fonction de votre niveau d’accès.
Exemple de requêtecurl -XPOST “https://data-api.x.com/insights/engagement/historical
-H ‘Accept-Encoding: gzip’
-H ‘Authorization OAuth oauth_consumer_key=“consumer-key-for-app”,oauth_nonce=“generated-nonce”,oauth_signature=“generated-signature”,oauth_signature_method=“HMAC-SHA1”, oauth_timestamp=“generated-timestamp”,oauth_token=“access-token-for-authed-user”, oauth_version=“1.0”’
-d ’{
“start”: “2015-08-01”,
“end”: “2015-08-15”,
“tweet_ids”: [
“123456789”,
“223456789”,
“323456789”
],
“engagement_types”: [
“impressions”,
“engagements”,
“url_clicks”,
“detail_expands”
],
“groupings”: {
“types-by-tweet-id”: {
“group_by”: [
“tweet.id”,
“engagement.type”
]
}
}
}‘
Exemple de réponse{
“start”: “2015-08-01T00:00:00Z”,
“end”: “2015-08-15T00:00:00Z”,
“types-by-tweet-id”: {
“123456789”: {
“impressions”: “0”,
“engagements”: “0”,
“url_clicks”: “0”,
“detail_expands”: “0”
},
“223456789”: {
“impressions”: “788”,
“engagements”: “134”,
“url_clicks”: “30”,
“detail_expands”: “1323”
},
“323456789”: {
“impressions”: “4”,
“engagements”: “0”,
“url_clicks”: “2”,
“detail_expands”: “0”
}
}
}
ID de Tweets indisponiblesPour les requêtes qui incluent des identifiants de Tweet devenus indisponibles (par exemple, qui ont été supprimés), les données appropriées seront renvoyées pour tous les identifiants de Tweet disponibles, et les identifiants de Tweet indisponibles seront répertoriés dans un tableau appelé unavailable_tweet_ids. Par exemple :

{
“start”: “2015-11-17T22:00:00Z”,
“end”: “2015-11-19T02:27:50Z”,
“unavailable_tweet_ids”: [
“323456789”
],
“group1”: {
“423456789”: {
“favorites”: “67”,
“replies”: “8”,
“retweets”: 26
}
}
}

Codes de réponse

StatusTextDescription
200OKLa requête a été effectuée avec succès.
400Bad RequestEn général, cette réponse se produit lorsque la requête contient du JSON invalide ou lorsqu’elle ne contient aucun payload JSON.
401UnauthorizedL’authentification HTTP a échoué en raison d’identifiants non valides. Vérifiez vos clés et jetons OAuth.
404Not FoundLa ressource n’a pas été trouvée à l’URL vers laquelle la requête a été envoyée, probablement parce qu’une URL incorrecte a été utilisée.
429Too Many RequestsVotre application a dépassé la limite de requêtes API.
500Internal Server ErrorUne erreur s’est produite du côté de Gnip. Réessayez d’envoyer votre requête en utilisant une stratégie de backoff exponentiel.
502Proxy ErrorUne erreur s’est produite du côté de Gnip. Réessayez d’envoyer votre requête en utilisant une stratégie de backoff exponentiel.
503Service UnavailableUne erreur s’est produite du côté de Gnip. Réessayez d’envoyer votre requête en utilisant une stratégie de backoff exponentiel.

Messages d’erreur

Dans différents scénarios, l’API Engagement renverra des messages d’erreur spécifiques à la situation que votre application doit être en mesure de gérer. Le tableau ci-dessous inclut des exemples courants de ces messages d’erreur et la façon dont vous devez les interpréter. Veuillez noter que, dans de nombreux cas, l’API Engagement renverra des résultats partiels pour les données disponibles, avec des messages d’erreur spécifiques dans le cadre d’une réponse 200 OK contenant plus d’informations.
Error MessageDescription
"errors":["Your account could not be authenticated. Reason: Access token not found"]Une erreur dans le composant d’authentification de la requête. Le champ « Reason » doit fournir des informations utiles pour diagnostiquer l’erreur. Si vous n’êtes pas en mesure de la résoudre, veuillez envoyer l’erreur complète, y compris la valeur du champ « Reason », à notre équipe d’assistance.
"errors":["1 Tweet ID(s) are unavailable"],"unavailable_tweet_ids": ["TWEET_IDS"]Le ou les Tweet ID que vous avez demandés ne sont plus disponibles, ce qui indique généralement qu’ils ont été supprimés ou ne sont plus accessibles publiquement pour une autre raison.
"errors":["Impressions & engagements for tweets older than 90 days (*TIME_PERIOD*) are not supported"],"unsupported_for_impressions_engagements_tweet_ids":[*TWEET_IDS*]Le ou les Tweet ID que vous avez demandés pour l’endpoint /totals datent de plus de 90 jours et ne sont donc pas pris en charge pour le retour des métriques d’impressions ou d’engagements.
"errors":["Forbidden to access tweets: *TWEET_IDS*"]Le ou les Tweet ID que vous avez demandés ne sont pas disponibles compte tenu du jeton d’authentification que vous utilisez pour récupérer des données pour le compte d’un tiers.