Passer au contenu principal
Consultez nos guides de comparaison :

X API : Dictionnaire des données Enterprise

Introduction

Enterprise Les Posts sont l’unité de base atomique de tout ce qui concerne X. Toutes les X API qui renvoient des Posts fournissent ces données encodées en JavaScript Object Notation (JSON). Le JSON repose sur des paires clé‑valeur, avec des attributs nommés et des valeurs associées. Les objets Post récupérés via l’API incluent la « mise à jour de statut » d’un utilisateur X, mais les Retweets, les réponses et les Tweets cités sont également des objets Post. Si un Post est lié à un autre Post, en tant que Retweet, réponse ou Tweet cité, chacun sera identifié ou intégré dans l’objet Post. Même le Post le plus simple, dans le format de données natif de X, comportera des objets JSON imbriqués pour représenter d’autres attributs d’un Post, tels que l’auteur, les utilisateurs mentionnés, le lieu balisé, les hashtags, les symboles cashtag, les médias ou les liens URL. Lorsque vous travaillez avec des données X, il s’agit d’un concept important à comprendre. Le format des données de Post que vous recevrez de la X API dépend du type de Post reçu, de la X API utilisée et des paramètres de format. Les endpoints Enterprise qui renvoient des objets Post ont été mis à jour pour fournir les metadata nécessaires à la compréhension de l’historique des modifications du Post. Pour en savoir plus sur ces metadata, consultez la page “Modifier des Posts”.
Dans le format natif X, la charge utile JSON comprendra des attributs de niveau racine et des objets JSON imbriqués (représentés ici par la notation {}):
{
	"created_at": "Fri Feb 14 19:00:55 +0000 2020",
	"id_str": "1228393702244134912",
	"text": "Qu'est-ce que le développeur a écrit dans sa carte de Saint-Valentin ?\n  \nwhile(true) {\n    I = Love(You);  \n}",
	"entities": {
		"hashtags": [],
		"symbols": [],
		"user_mentions": [],
		"urls": []
	},
	"user": {
		"entities": {
			"url": {}
		}
	},
	"place": {}
}

Formats de données disponibles

Veuillez noter : il est fortement recommandé d’utiliser le format Enriched Native pour les API de données Enterprise.
  • Le format Enriched Native inclut toutes les nouvelles metadata depuis 2017, telles que la poll metadata, ainsi que des métriques supplémentaires comme reply_count et quote_count.
  • Le format Activity Streams n’a pas été mis à jour avec de nouvelles metadata ou enrichissements depuis la mise à jour du nombre de caractères en 2017.
Les API de données Enterprise délivrent des données dans deux formats différents. Le format Enterprise le plus proche du format natif Standard v1.1 est Enriched Native. L’ancien format de données Enterprise est Activity Streams, initialement implémenté et utilisé par Gnip comme format normalisé pour X et d’autres fournisseurs de données de médias sociaux à l’époque. Bien que ce format soit toujours disponible, X n’a investi dans de nouvelles fonctionnalités et évolutions que pour le format Enriched Native depuis 2017. Le format Enriched Native est conforme à son appellation : il inclut des objets natifs X ainsi que des enrichissements supplémentaires disponibles pour les produits de données Enterprise, tels que les metadata de déroulage d’URL, le profil géographique, la poll metadata et des métriques d’engagement supplémentaires.

Comparaison des objets selon le format de données

Quel que soit votre cas d’usage avec X, comprendre ce que représentent ces objets et attributs Post encodés en JSON est essentiel pour identifier efficacement vos signaux de données d’intérêt. Pour vous y aider, un ensemble de pages est consacré à chaque objet dans chaque format de données. En reflétant la hiérarchie JSON ci-dessus, voici des liens vers chacun de ces objets :
Natif enrichiActivity Streams
Lien Objet PostLien Objet Activity
Lien Objet utilisateurLien Objet Actor
Lien Objet EntitiesLien Objet X entities
Lien Objet Extended entitiesLien Objet X extended entities
Lien Objet GeoLien Objet Location
n/aLien Objet Gnip

Bonnes pratiques d’analyse

  • Le JSON de X est encodé en UTF‑8.
  • Les analyseurs doivent tolérer sans difficulté les variations dans l’ordre des fields. Il faut supposer que le JSON de Post est servi comme un hash non ordonné de data.
  • Les analyseurs doivent tolérer l’ajout de « nouveaux » fields.
  • Les analyseurs JSON doivent tolérer les fields « manquants », car tous les fields n’apparaissent pas dans tous les contextes.
  • Il est généralement acceptable de considérer qu’un field nul, un ensemble vide et l’absence d’un field sont équivalents

Objets de données enrichis natifs Enterprise

Objet Tweet Native Enriched

Vous souhaitez en savoir plus sur la manière dont le format de données Native Enriched correspond au format X API v2 ? Consultez notre guide comparatif : Native Enriched comparé à X API v2

Objet Post

Lorsque vous utilisez des produits de données Enterprise, vous constaterez qu’une grande partie du dictionnaire de données est similaire au format natif des données de Post, avec des métadonnées enrichies supplémentaires. Le niveau de base du format natif enrichi reprend en grande partie les mêmes noms d’objet que le format de données X API v1.1. L’objet Post comporte une longue liste d’attributs « de niveau racine », notamment des attributs fondamentaux tels que id, created_at et text. Les objets Post incluent également des objets imbriqués comme user, entities et extended_entities. Ils peuvent aussi contenir d’autres objets Post imbriqués tels que retweeted_status, quoted_status et extended_tweet. Le format natif enrichi inclut en outre un objet matching_rules.
Dictionnaire des données X
Vous trouverez ci-dessous le dictionnaire des données pour ces attributs « au niveau racine », ainsi que des liens vers les dictionnaires des données des objets enfants.
AttributTypeDescription
created_atStringHeure UTC de création de ce Post. Exemple :

“created_at” : “Wed Oct 10 20:19:24 +0000 2018”
idInt64Représentation entière de l’identifiant unique de ce Post. Ce nombre dépasse 53 bits et certains langages de programmation peuvent rencontrer des difficultés ou des défauts silencieux lors de son interprétation. L’utilisation d’un entier signé 64 bits pour stocker cet identifiant est sûre. Utilisez id_str pour récupérer l’identifiant en toute sécurité. Consultez ID X pour plus d’informations. Exemple :

“id” : 1050118621198921728
id_strStringReprésentation sous forme de chaîne de l’identifiant unique de ce Post. Les implémentations doivent utiliser cette valeur plutôt que l’entier volumineux dans id. Exemple :

“id_str” : “1050118621198921728”
textStringTexte UTF-8 réel de la mise à jour de statut. Consultez X-text pour plus de détails sur les caractères actuellement considérés comme valides. Exemple :

“text” : “To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm
sourceStringUtilitaire utilisé pour publier le Post, sous forme de chaîne formatée HTML. Les Posts provenant du site web X ont une valeur source web.

Exemple :

“source” : “X Web Client”
truncatedBooleanIndique si la valeur du paramètre text a été tronquée, par exemple suite à un retweet dépassant la limite de longueur de texte original du Post de 140 caractères. Le texte tronqué se termine par des points de suspension, comme ceci ... Puisque X rejette désormais les Posts longs au lieu de les tronquer, la grande majorité des Posts aura cette valeur définie sur false. Notez que bien que les retweets natifs puissent avoir leur propriété text de niveau supérieur raccourcie, le texte original sera disponible sous l’objet retweeted_status et le paramètre truncated sera défini sur la valeur du statut original (dans la plupart des cas, false). Exemple :

“truncated” : true
in_reply_to_status_idInt64Nullable. Si le Post représenté est une réponse, ce champ contiendra la représentation entière de l’ID du Post original. Exemple :

“in_reply_to_status_id” : 1051222721923756032
in_reply_to_status_id_strStringNullable. Si le Post représenté est une réponse, ce champ contiendra la représentation sous forme de chaîne de l’ID du Post original. Exemple :

“in_reply_to_status_id_str” : “1051222721923756032”
in_reply_to_user_idInt64Nullable. Si le Post représenté est une réponse, ce champ contiendra la représentation entière de l’ID de l’auteur du Post original. Il ne s’agira pas nécessairement toujours de l’utilisateur directement mentionné dans le Post. Exemple :

“in_reply_to_user_id” : 6253282
in_reply_to_user_id_strStringNullable. Si le Post représenté est une réponse, ce champ contiendra la représentation sous forme de chaîne de l’ID de l’auteur du Post original. Il ne s’agira pas nécessairement toujours de l’utilisateur directement mentionné dans le Post. Exemple :

“in_reply_to_user_id_str” : “6253282”
in_reply_to_screen_nameStringNullable. Si le Post représenté est une réponse, ce champ contiendra le nom d’écran de l’auteur du Post original. Exemple :

“in_reply_to_screen_name” : “xapi”
userObjet utilisateurL’utilisateur qui a publié ce Post. Consultez le dictionnaire de données utilisateur pour la liste complète des attributs.

Exemple mettant en évidence certains attributs :

{ “user” : <br/> “id” : 6253282,
“id_str” : “6253282”,
“name” : “X API”,
“screen_name” : “API”,
“location” : “San Francisco, CA”,
“url” : “https://developer.x.com”,
“description” : “The Real X API. Tweets about API changes, service issues and our Developer Platform. Don’t get an answer? It’s on my website.”,
“verified” : true,
“followers_count” : 6129794,
“friends_count” : 12,
“listed_count” : 12899,
“favourites_count” : 31,
“statuses_count” : 3658,
“created_at” : “Wed May 23 06:01:13 +0000 2007”,
“utc_offset” : null,
“time_zone” : null,
“geo_enabled” : false,
“lang” : “en”,
“contributors_enabled” : false,
“is_translator” : false,
“profile_background_color” : “null”,
“profile_background_image_url” : “null”,
“profile_background_image_url_https” : “null”,
“profile_background_tile” : null,
“profile_link_color” : “null”,
“profile_sidebar_border_color” : “null”,
“profile_sidebar_fill_color” : “null”,
“profile_text_color” : “null”,
“profile_use_background_image” : null,
“profile_image_url” : “null”,
“profile_image_url_https” : “https://pbs.twimg.com/profile&#95;images/942858479592554497/BbazLO9L&#95;normal.jpg”,
“profile_banner_url” : “https://pbs.twimg.com/profile&#95;banners/6253282/1497491515”,
“default_profile” : false,
“default_profile_image” : false,
“following” : null,
“follow_request_sent” : null,
“notifications” : null
}
}
coordinatesCoordinatesNullable. Représente la localisation géographique de ce Post telle que rapportée par l’utilisateur ou l’application cliente. Le tableau de coordonnées interne est formaté comme geoJSON (longitude d’abord, puis latitude). Exemple :

“coordinates”:
<br/> “coordinates”:
[
-75.14310264,
40.05701649
],
“type”:“Point”
}
placePlacesNullable Lorsque présent, indique que le Post est associé (mais pas nécessairement originaire) d’un lieu. Exemple :

“place”:
<br/> “attributes”:,
“bounding_box”:
<br/> “coordinates”:
[[
[-77.119759,38.791645],
[-76.909393,38.791645],
[-76.909393,38.995548],
[-77.119759,38.995548]
]],
“type”:“Polygon”
},
“country”:“United States”,
“country_code”:“US”,
“full_name”:“Washington, DC”,
“id”:“01fbe706f872cb32”,
“name”:“Washington”,
“place_type”:“city”,
“url”:“http://api.x.com/1/geo/id/0172cb32.json
}
quoted_status_idInt64Ce champ n’apparaît que lorsque le Post est un Tweet avec citation. Ce champ contient la valeur entière de l’ID de Post du Tweet cité. Exemple :

“quoted_status_id”:1050119905717055488
quoted_status_id_strStringCe champ n’apparaît que lorsque le Post est un Tweet avec citation. Il s’agit de la représentation sous forme de chaîne de l’ID de Post du Tweet cité. Exemple :

“quoted_status_id_str”:“1050119905717055488”
is_quote_statusBooleanIndique s’il s’agit d’un Tweet avec citation. Exemple :

“is_quote_status”:false
quoted_statusPostCe champ n’apparaît que lorsque le Post est un Tweet avec citation. Cet attribut contient l’objet Post du Post original qui a été cité.
retweeted_statusPostLes utilisateurs peuvent amplifier la diffusion de Posts créés par d’autres utilisateurs en effectuant un Retweet. Les Retweets peuvent être distingués des Posts classiques par l’existence d’un attribut retweeted_status. Cet attribut contient une représentation du Post original qui a été retweeté. Notez que les retweets de retweets n’affichent pas les représentations du retweet intermédiaire, mais seulement le Post original. (Les utilisateurs peuvent également annuler un retweet qu’ils ont créé en supprimant leur retweet.)
quote_countIntegerNullable. Indique approximativement combien de fois ce Post a été cité par les utilisateurs X. Exemple :

“quote_count”:33

Remarque : Cet objet n’est disponible qu’avec les produits de niveau Premium et Enterprise.
reply_countIntNombre de fois que ce Post a reçu une réponse. Exemple :

“reply_count”:30

Remarque : Cet objet n’est disponible qu’avec les produits de niveau Premium et Enterprise.
retweet_countIntNombre de fois que ce Post a été retweeté. Exemple :

“retweet_count”:160
favorite_countIntegerNullable. Indique approximativement combien de fois ce Post a été liké par les utilisateurs X. Exemple :

“favorite_count”:295
entitiesEntitiesEntités qui ont été extraites du texte du Post. Voir également Entities in X Objects. Exemple :

“entities”:
<br/> “hashtags”:[],
“urls”:[],
“user_mentions”:[],
“media”:[],
“symbols”:[]
“polls”:[]
}
extended_entitiesExtended EntitiesLorsqu’entre une et quatre photos natives ou une vidéo ou un GIF animé sont présents dans le Post, contient un tableau de metadata ‘media’. Ceci est également disponible dans les Tweets avec citation. Voir également Entities in X Objects. Exemple :

“entities”:
<br/> “media”:[]
}
favoritedBooleanNullable. Indique si ce Post a été liké par l’utilisateur authentifié. Exemple :

“favorited”:true
retweetedBooleanIndique si ce Post a été retweeté par l’utilisateur authentifié. Exemple :

“retweeted”:false
possibly_sensitiveBooleanNullable. Ce champ indique que le contenu peut être reconnu comme sensible. L’auteur du Post peut sélectionner dans ses propres préférences de compte et choisir « Marquer les médias que vous publiez comme ayant du contenu potentiellement sensible » de sorte que chaque Post créé par la suite ait ce drapeau défini.

Ceci peut également être jugé et étiqueté par un agent de support interne X.

”possibly_sensitive”:false
filter_levelStringIndique la valeur maximale du paramètre filter_level qui peut être utilisée et diffuser encore ce Post. Ainsi, une valeur de medium sera diffusée sur les streams none, low, et medium.

Exemple :

“filter_level”: “low”
langStringNullable. Lorsque présent, indique un identifiant de langue BCP 47 correspondant à la langue détectée automatiquement du texte du Post, ou und si aucune langue n’a pu être détectée.

Exemple :

“lang”: “en”
edit_historyObjectIdentifiants uniques indiquant toutes les versions d’un Post. Pour les Posts sans modifications, il y aura un ID. Pour les Posts avec un historique de modifications, il y aura plusieurs ID, organisés par ordre croissant reflétant l’ordre des modifications, avec la version la plus récente en dernière position du tableau.

Les ID de Post peuvent être utilisés pour hydrater et afficher les versions précédentes d’un Post.

Exemple :

edit_history”: <br/> “initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
}
edit_controlsObjectLorsque présent, indique combien de temps un Post peut encore être modifié et le nombre de modifications restantes. Les Posts ne peuvent être modifiés que pendant les 30 premières minutes après leur création et peuvent être modifiés jusqu’à cinq fois.

Les ID de Post peuvent être utilisés pour hydrater et afficher les versions précédentes d’un Post.

Exemple :

“edit_controls”: <br/> “editable_until_ms”: 123
“edits_remaining”: 3
}
editableBooleanLorsque présent, indique si un Post était éligible à la modification lors de sa publication. Ce champ n’est pas dynamique et ne basculera pas de True à False lorsqu’un Post atteint sa limite de temps de modification ou son nombre maximum de modifications. Les fonctionnalités de Post suivantes rendront ce champ false :

_ Le Post est promu
_ Le Post contient un sondage
_ Le Post est une réponse de fil non-personnel
_ Le Post est un Retweet (notez que les Quote Tweets sont éligibles à la modification)
_ Le Post est nullcast
_ Post de communauté
_ Post Superfollow
_ Post collaboratif
matching_rulesArray of Rule ObjectsPrésent dans les produits filtrés tels que X Search et PowerTrack. Fournit l’id et le tag associés à la règle qui correspond au Post. Plus d’informations sur les règles de correspondance ici. Avec PowerTrack, plusieurs règles peuvent correspondre à un Post.

Exemple :

“matching_rules”: ” [<br/> “tag”: “xapi emojis”,
“id”: 1050118621198921728,
“id_str”: “1050118621198921728”
}]“
Attributs supplémentaires de Post
Les API X qui fournissent des Posts (par ex. l’endpoint GET statuses/lookup) peuvent inclure ces attributs supplémentaires de Post :
AttributeTypeDescription
current_user_retweetObjectPerspectival N’apparaît que pour les méthodes prenant en charge le paramètre include_my_retweet, lorsqu’il est défini sur true. Indique l’ID de Post du Retweet de l’utilisateur (s’il existe) de ce Post. Exemple:

“current_user_retweet”: <br/> “id”: 6253282,
“id_str”: “6253282”
}
scopesObjectUn ensemble de paires clé‑valeur indiquant la diffusion contextuelle prévue du Post contenant. Actuellement utilisé par les Promoted Products de X. Exemple:

“scopes”:{“followers”:false}
withheld_copyrightBooleanLorsqu’il est présent et défini sur “true”, cela indique que ce contenu a été retenu en raison d’une plainte DMCA. Exemple:

“withheld_copyright”: true
withheld_in_countriesArray of StringLorsqu’il est présent, indique une liste de codes pays à deux lettres en majuscules à partir desquels ce contenu est retenu. X prend en charge les valeurs non pays suivantes pour ce champ :

“XX” - Le contenu est retenu dans tous les pays “XY” - Le contenu est retenu en raison d’une demande DMCA.

Exemple:

“withheld_in_countries”: [“GR”, “HK”, “MY”]
withheld_scopeStringLorsqu’il est présent, indique si le contenu retenu est le “status” ou un “user”.

Exemple:

“withheld_scope”: “status”
Attributs obsolètes
ChampTypeDescription
geoObjetObsolète. Nullable. Utilisez le champ coordinates à la place. Cet attribut obsolète exprime ses coordonnées sous la forme [lat, long], tandis que toutes les autres données de géolocalisation des Post sont exprimées sous la forme [long, lat].

Objets Post imbriqués

Dans plusieurs cas, un Objet Post inclut d’autres objets imbriqués. Si vous travaillez avec des objets imbriqués, la charge utile JSON contiendra alors plusieurs Objets Post, et chaque Objet Post peut contenir ses propres objets. L’objet de niveau racine contiendra des informations sur le type d’action effectuée, c’est‑à‑dire s’il s’agit d’un Retweet ou d’un Quote Tweet, et peut également contenir un objet décrivant le Post « original » partagé. Les Posts étendus incluront un objet étendu imbriqué qui dépasse 140 caractères, mécanisme utilisé pour éviter des changements incompatibles lors de la mise à jour de 2017. Chaque dictionnaire d’objet imbriqué est décrit ci‑dessous. Retweets Les Retweets contiennent toujours deux Objets Post. Le Post « original » faisant l’objet du Retweet est fourni dans un objet “retweeted_status”. L’objet de niveau racine encapsule le Retweet lui‑même, y compris un objet utilisateur pour le compte effectuant l’action de Retweet et l’heure du Retweet. Le Retweet est une action permettant de partager un Post avec vos abonnés, sans possibilité d’ajouter de nouveau contenu. De plus, une (nouvelle) localisation ne peut pas être fournie avec un Retweet. Bien que le Post « original » ait pu être géolocalisé, les objets “geo” et “place” du Retweet seront toujours null. Même avant l’introduction des Posts étendus, l’objet “entities” de niveau racine était dans certains cas tronqué et incomplet en raison de la chaîne “RT @username ” ajoutée au message du Post faisant l’objet du Retweet. Notez que si un Retweet est à son tour retweeté, le “retweet_status” pointera toujours vers le Post original, ce qui signifie que le Retweet intermédiaire n’est pas inclus. Un comportement similaire est observé lors de l’utilisation de x.com pour « afficher » un Retweet. Si vous copiez l’ID de Post unique attribué à l’« action » de Retweet, le Post original est affiché. Ci‑dessous se trouve un exemple de structure pour un Retweet. Là encore, lors de l’analyse des Retweets, il est essentiel d’analyser l’objet “retweeted_status” pour obtenir le message (original) complet du Post et les métadonnées des entités.
{
	"tweet": {
		"text": "RT @author message original",
		"user": {
			"screen_name": "Retweeter"
		},
		"retweeted_status": {
			"text": "message original",
			"user": {
				"screen_name": "OriginalTweeter"
			},
			"place": {},
			"entities": {},
			"extended_entities": {}
		}
	},
	"entities": {},
	"extended_entities": {}
}
Tweets citant
Les Tweets citant sont très similaires aux Retweets, à ceci près qu’ils incluent un nouveau message Post. Ces nouveaux messages peuvent contenir leur propre ensemble de hashtags, de liens et d’autres « entities » metadata. Les Tweets citant peuvent également inclure des informations de localisation partagées par l’utilisateur qui publie le Tweet citant, ainsi que des médias comme des GIF, des vidéos et des photos. Les Tweets citant contiendront au moins deux Objets Post, et dans certains cas, trois. Le Post cité, qui peut lui-même être un Tweet cité, est fourni dans un objet “quoted_status”. L’objet de niveau racine encapsule le Tweet citant lui‑même, y compris un objet utilisateur pour le compte effectuant l’action de partage et l’heure du Tweet citant. Notez que les Tweets citant peuvent désormais avoir des photos, des GIF ou des vidéos, ajoutés via l’interface utilisateur ‘Post’. Lorsque des liens vers des médias hébergés en externe sont inclus dans le message du Tweet citant, le “entities.urls” de niveau racine les décrira. Les médias joints aux Tweets citant apparaîtront dans les metadata “extended_entities” de niveau racine. Lorsque les Tweets citant ont été lancés pour la première fois, un lien raccourci (URL t.co) était ajouté au message du Post « original » et fourni dans le champ “text” de niveau racine. De plus, les metadata pour cette URL t.co étaient incluses dans le tableau ‘entities.urls’ de niveau racine. En mai 2018, nous avons modifié cela afin que l’URL t.co raccourcie vers le Tweet cité ne soit plus incluse dans le champ “text” de niveau racine. Deuxièmement, les metadata du Tweet cité ne seront plus incluses dans les metadata “entities.urls”. À la place, les metadata d’URL pour le Tweet cité se trouveront dans un nouvel objet “quoted_status_permalink” au niveau racine (ou niveau supérieur), donc au même niveau que l’objet “quoted_status”. Ci‑dessous figure un exemple de structure pour un Tweet citant utilisant ce formatage initial.
{
	"created_at": "Tue Feb 14 19:30:06 +0000 2017",
	"id_str": "831586333415976960",
	"text": "Absolument à citer ! https:\/\/t.co\/J1LKrbHpWR",
	"user": {
		"screen_name": "happycamper"
	},
	"quoted_status_id_str": "831569219296882688",
	"quoted_status": {
		"created_at": "Tue Feb 14 18:22:06 +0000 2017",
		"id_str": "831569219296882688",
		"text": "Ceci est un test du système de tweet \ud83d\ude0e pour mettre à jour #supportdocs @twitterboulder ici : https:\/\/t.co\/NRq9UrSzm0",
		"user": {
			"screen_name": "furiouscamper",
		},
		"place": {
			"id": "9a974dfc8efb32a0",
		},
		"entities": {
			"hashtags": [{
				"text": "supportdocs",
			}],
			"urls": [{
			}],
			"user_mentions": [{	}],
			"symbols": []
		},
	},
	"is_quote_status": true,
	"entities": {},
	"matching_rules": [{}]
}
{
	"created_at": "Fri Jan 04 18:47:16 +0000 2019",
	"id_str": "1081260794069671936",
	"text": "Test de citation https://t.co/CE4m1qs3NJ",
	"user": {
		"screen_name": "furiouscamper"
	},
	"place": null,
	"quoted_status_id_str": "1079578364904648705",
	"quoted_status": {
		"created_at": "Mon Dec 31 03:21:54 +0000 2018",
		"id_str": "1079578364904648705",
		"text": "AHHHHH",
		"user": {
			"screen_name": "infinite_scream"
		},
		"place": null,
		"is_quote_status": false,
		"quote_count": 1,
		"reply_count": 0,
		"retweet_count": 3,
		"favorite_count": 6,
		"entities": {
			"hashtags": [],
			"urls": [],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quoted_status_permalink": {
		"url": "https://t.co/CE4m1qs3NJ",
		"expanded": "https://x.com/infinite_scream/status/1079578364904648705",
		"display": "x.com/infinite_screa…"
	},
	"is_quote_status": true,
	"quote_count": 0,
	"reply_count": 0,
	"retweet_count": 0,
	"favorite_count": 1,
	"entities": {}
}
Posts étendus
Le JSON décrivant les Posts étendus a été introduit lors du lancement des Posts de 280 caractères en novembre 2017. Le JSON des Posts a été étendu pour encapsuler ces messages plus longs, sans rompre la compatibilité avec les milliers d’applications qui analysent ces objets fondamentaux de X. Pour garantir une rétrocompatibilité totale, le champ ‘text’ d’origine de 140 caractères, ainsi que les objets d’entities analysés à partir de celui-ci, ont été conservés. Dans le cas de Posts de plus de 140 caractères, ce champ ‘text’ au niveau racine devenait tronqué et donc incomplet. Étant donné que les objets ‘entities’ au niveau racine contiennent des tableaux de métadonnées clés extraites du message ‘text’, tels que les hashtags et les liens inclus, ces collections seraient incomplètes. Par exemple, si un message de Post faisait 200 caractères, avec un hashtag à la fin, le tableau hérité ‘entities.hashtags’ au niveau racine ne l’inclurait pas. Un nouveau champ ‘extended_tweet’ a été introduit pour contenir les messages de Post plus longs et des métadonnées d’entités complètes. L’objet “extended_tweet” fournit le champ “full_text” qui contient le message complet du Post, non tronqué, lorsqu’il dépasse 140 caractères. L’objet “extended_tweet” contient également un objet “entities” avec des tableaux complets de hashtags, liens, mentions, etc. Les Posts étendus sont identifiés par un booléen “truncated” au niveau racine. Lorsqu’il est à true (“truncated”: true), les champs “extended_tweet” doivent être analysés à la place des champs au niveau racine. Notez dans l’exemple JSON ci-dessous que le champ “text” au niveau racine est tronqué et que le tableau “entities.hashtags” au niveau racine est vide, alors même que le message du Post inclut trois hashtags. Étant donné qu’il s’agit d’un Post étendu, le champ “truncated” est défini sur true, et l’objet “extended_tweet” fournit des métadonnées complètes du Post pour “full_text” et “entities”.
{
	"created_at": "Thu May 10 17:41:57 +0000 2018",
	"id_str": "994633657141813248",
	"text": "Juste un autre Tweet étendu avec plus de 140 caractères, généré comme exemple de documentation, montrant que [\"tru… https://t.co/U7Se4NM7Eu",
	"display_text_range": [0, 140],
	"truncated": true,
	"user": {
		"id_str": "944480690",
		"screen_name": "FloodSocial"
	},
	"extended_tweet": {
		"full_text": "Juste un autre Tweet étendu avec plus de 140 caractères, généré comme exemple de documentation, montrant que [\"truncated\": true] et la présence d'un objet \"extended_tweet\" avec le texte complet et les \"entities\" #documentation #parsingJSON #GeoTagged https://t.co/e9yhQTJSIA",
		"display_text_range": [0, 249],
		"entities": {
			"hashtags": [{
				"text": "documentation",
				"indices": [211, 225]
			}, {
				"text": "parsingJSON",
				"indices": [226, 238]
			}, {
				"text": "GeoTagged",
				"indices": [239, 249]
			}]
		}

	},
	"entities": {
		"hashtags": []
	}
}

Objet utilisateur natif enrichi

L’objet utilisateur contient des metadata de compte X qui décrivent l’utilisateur X référencé. 

Dictionnaire des données des utilisateurs

AttributTypeDescription
idInt64La représentation entière de l’identifiant unique pour cet utilisateur. Ce nombre est supérieur à 53 bits et certains langages de programmation peuvent avoir des difficultés/défauts silencieux pour l’interpréter. L’utilisation d’un entier signé 64 bits pour stocker cet identifiant est sûre. Utilisez id_str pour récupérer l’identifiant en toute sécurité. Voir X IDs pour plus d’informations. Exemple :

“id” : 6253282
id_strStringLa représentation sous forme de chaîne de l’identifiant unique pour cet utilisateur. Les implémentations devraient utiliser ceci plutôt que le grand entier, possiblement non-consommable dans id. Exemple :

“id_str” : “6253282”
nameStringLe nom de l’utilisateur, tel qu’il l’a défini. Pas nécessairement le nom d’une personne. Généralement limité à 50 caractères, mais sujet à changement. Exemple :

“name” : “API”
screen_nameStringLe nom d’écran, pseudonyme ou alias avec lequel cet utilisateur s’identifie. Les screen_names sont uniques mais sujets à changement. Utilisez id_str comme identifiant d’utilisateur chaque fois que possible. Généralement d’une longueur maximale de 15 caractères, mais certains comptes historiques peuvent exister avec des noms plus longs. Exemple :

“screen_name” : “api”
locationStringNullable. L’emplacement défini par l’utilisateur pour le profil de ce compte. Pas nécessairement un emplacement, ni analysable par machine. Ce champ sera occasionnellement interprété de manière approximative par le service de recherche. Exemple :

“location” : “San Francisco, CA”
derivedArrays of Enrichment ObjectsAPI Enterprise uniquement. Collection de métadonnées d’enrichissement dérivées pour l’utilisateur. Fournit les métadonnées d’enrichissement Profile Geo. Voir la documentation référencée pour plus d’informations, y compris les dictionnaires de données JSON. Exemple :

“derived” : “locations” : [“country” : “United States”, “country_code” : “US”, “locality” : “Denver”]
urlStringNullable. Une URL fournie par l’utilisateur en association avec son profil. Exemple :

“url” : “https://developer.x.com
descriptionStringNullable. La chaîne UTF-8 définie par l’utilisateur décrivant son compte. Exemple :

“description” : “The Real X API.”
protectedBooleanQuand true, indique que cet utilisateur a choisi de protéger ses Posts. Voir À propos des Posts publics et protégés. Exemple :

“protected” : true
verifiedBooleanQuand true, indique que l’utilisateur a un compte vérifié. Voir Comptes vérifiés. Exemple :

“verified” : false
followers_countIntLe nombre d’abonnés que ce compte a actuellement. Dans certaines conditions de stress, ce champ indiquera temporairement « 0 ». Exemple :

“followers_count” : 21
friends_countIntLe nombre d’utilisateurs que ce compte suit (c’est-à-dire ses « abonnements »). Dans certaines conditions de stress, ce champ indiquera temporairement « 0 ». Exemple :

“friends_count” : 32
listed_countIntLe nombre de listes publiques dont cet utilisateur est membre. Exemple :

“listed_count” : 9274
favourites_countIntLe nombre de Posts que cet utilisateur a aimés au cours de la vie du compte. L’orthographe britannique est utilisée dans le nom du champ pour des raisons historiques. Exemple :

“favourites_count” : 13
statuses_countIntLe nombre de Posts (y compris les retweets) émis par l’utilisateur. Exemple :

“statuses_count” : 42
created_atStringLa date et heure UTC à laquelle le compte utilisateur a été créé sur X. Exemple :

“created_at” : “Mon Nov 29 21:18:15 +0000 2010”
profile_banner_urlStringL’URL basée sur HTTPS pointant vers la représentation web standard de la bannière de profil téléchargée par l’utilisateur. En ajoutant un élément de chemin final à l’URL, il est possible d’obtenir différentes tailles d’image optimisées pour des affichages spécifiques. Pour les variantes de taille, veuillez voir Images et bannières de profil utilisateur.

Exemple :

“profile_banner_url” : “https://si0.twimg.com/profile&#95;banners/819797/1348102824
profile_image_url_httpsStringUne URL basée sur HTTPS pointant vers l’image de profil de l’utilisateur. Exemple :

“profile_image_url_https” :
https://abs.twimg.com/sticky/default&#95;profile&#95;images/default&#95;profile&#95;normal.png
default_profileBooleanQuand true, indique que l’utilisateur n’a pas modifié le thème ou l’arrière-plan de son profil utilisateur. Exemple :

“default_profile” : false
default_profile_imageBooleanQuand true, indique que l’utilisateur n’a pas téléchargé sa propre image de profil et qu’une image par défaut est utilisée à la place. Exemple :

“default_profile_image” : false

Attributs obsolètes (deprecated) et non pris en charge

ChampTypeDescription
utc_offsetnullLa valeur sera définie sur null. Toujours disponible via GET account/settings
time_zonenullLa valeur sera définie sur null. Toujours disponible via GET account/settings sous tzinfo_name
langnullLa valeur sera définie sur null. Toujours disponible via GET account/settings sous language
geo_enablednullLa valeur sera définie sur null. Toujours disponible via GET account/settings. Ce champ doit être à true pour que l’utilisateur actuel puisse joindre des données géographiques lors de l’utilisation de POST statuses/update
followingnullLa valeur sera définie sur null. Toujours disponible via GET friendships/lookup
follow_request_sentnullLa valeur sera définie sur null. Toujours disponible via GET friendships/lookup
has_extended_profilenullDeprecated. La valeur sera définie sur null.
notificationsnullDeprecated. La valeur sera définie sur null.
profile_locationnullDeprecated. La valeur sera définie sur null.
contributors_enablednullDeprecated. La valeur sera définie sur null.
profile_image_urlnullDeprecated. La valeur sera définie sur null. REMARQUE : les images de profil ne sont disponibles qu’en utilisant le champ profile_image_url_https.
profile_background_colornullDeprecated. La valeur sera définie sur null.
profile_background_image_urlnullDeprecated. La valeur sera définie sur null.
profile_background_image_url_httpsnullDeprecated. La valeur sera définie sur null.
profile_background_tilenullDeprecated. La valeur sera définie sur null.
profile_link_colornullDeprecated. La valeur sera définie sur null.
profile_sidebar_border_colornullDeprecated. La valeur sera définie sur null.
profile_sidebar_fill_colornullDeprecated. La valeur sera définie sur null.
profile_text_colornullDeprecated. La valeur sera définie sur null.
profile_use_background_imagenullDeprecated. La valeur sera définie sur null.
is_translatornullDeprecated. La valeur sera définie sur null.
is_translation_enablednullDeprecated. La valeur sera définie sur null.
translator_typenullDeprecated. La valeur sera définie sur null.

Exemple d’objet utilisateur :

"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements relatifs à l'#XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	}

Objets géo natifs enrichis

Les Posts peuvent être associés à un lieu, générant un Post « géolocalisé ». Les lieux d’un Post peuvent être attribués via l’interface utilisateur de X ou lors de la publication d’un Post à l’aide de l’API. Le lieu d’un Post peut être un « point » exact, ou un X Place avec une « boîte englobante » décrivant une zone plus large, d’un établissement à une région entière. Il existe trois objets JSON « racine » utilisés pour décrire le lieu associé à un Post : place, geo et coordinates. En outre, le format natif enrichi inclut, au sein de l’objet utilisateur, le lieu dérivé issu de l’enrichissement de profil géographique. L’objet place est toujours présent lorsqu’un Post est géolocalisé avec un lieu. Les Places sont des emplacements nommés et spécifiques avec des coordonnées géographiques correspondantes. Lorsque les utilisateurs décident d’attribuer un lieu à leur Post, une liste de X Places candidates leur est présentée. Lors de l’utilisation de l’API pour publier, un X Place peut être associé en spécifiant un place_id lors de la publication. Les Posts associés à des Places ne proviennent pas nécessairement de cet emplacement, mais peuvent également être à propos de cet emplacement. Les objets geo et coordinates ne sont présents (non nuls) que lorsque le Post est associé à un emplacement exact. Si un emplacement exact est fourni, l’objet coordinates fournit un tableau [long, lat] avec les coordonnées géographiques, et un X Place correspondant à cet emplacement est attribué.

Dictionnaire des données de lieux

FieldTypeDescription
idStringID représentant ce lieu. Notez qu’il est fourni sous forme de chaîne, et non d’entier. Exemple :

“id”:“01a9a39529b27f36”
urlStringURL pointant vers les métadonnées supplémentaires de ce lieu. Exemple :

“url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json
place_typeStringType d’emplacement représenté par ce lieu. Exemple :

“place_type”:“city”
nameStringCourte représentation lisible du nom du lieu. Exemple :

“name”:“Manhattan”
full_nameStringReprésentation complète et lisible du nom du lieu. Exemple :

“full_name”:“Manhattan, NY”
country_codeStringCode pays abrégé du pays où se situe ce lieu. Exemple :

“country_code”:“US”
countryStringNom du pays où se situe ce lieu. Exemple :

“country”:“United States”
bounding_boxObjectBoîte englobante de coordonnées qui délimite ce lieu. Exemple :


“bounding_box”:
“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
],
“type”: “Polygon”

attributesObjectAvec PowerTrack, les API de recherche 30-Day et Full-Archive, et les Volume Streams, ce hash est nul. Exemple :

“attributes”:

Rectangle englobant

ChampTypeDescription
coordinatesArray of Array of Array of FloatUne série de points de longitude et de latitude définissant un rectangle qui contiendra l’entité Place à laquelle ce rectangle englobant est lié. Chaque point est un tableau de la forme [longitude, latitude]. Les points sont regroupés dans un tableau par rectangle englobant. Les tableaux de rectangles englobants sont encapsulés dans un tableau supplémentaire pour être compatibles avec la notation de polygone. Exemple:


“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
]
typeStringLe type de data encodé dans la propriété coordinates. Ce sera “Polygon” pour les rectangles englobants et “Point” pour les Posts avec des coordonnées exactes. Exemple:

“type”:“Polygon”

Dictionnaire de données de l’objet Geo

ChampTypeDescription
coordinatesCollection de nombres à virgule flottanteLa longitude et la latitude de l’emplacement du Post, sous forme de collection [latitude, longitude]. Exemple :

**  “geo”:

“type”:** “Point”,

**    “coordinates”: [

54.27784
,

-0.41068

    ]

  **
typeStringLe type de données encodé dans la propriété coordinates. Il s’agit de « Point » pour les champs de coordonnées d’un Post. Exemple :

“type”: “Point”
Dictionnaire de données de l’objet Coordinates
ChampTypeDescription
coordinatesCollection de nombres à virgule flottanteLa longitude et la latitude de l’emplacement du Post, sous forme de collection [longitude, latitude]. Exemple :

**  “coordinates”:

“type”:** “Point”,

**    “coordinates”: [

-0.41068
,

54.27784

    ]

  **
typeStringLe type de données encodé dans la propriété coordinates. Il s’agit de « Point » pour les champs de coordonnées d’un Post. Exemple :

“type”: “Point”

Lieux dérivés

ChampTypeDescription
derivedobjet locationsLieu dérivé à partir de l’enrichissement géographique du profil

“derived”:

      “locations”: [


**       

“country”:** “United Kingdom”,

“country_code”: “GB”,

“locality”: “Yorkshire”,

“region”: “England”,

“full_name”: “Yorkshire, England, United Kingdom”,

**          “geo”:

            “coordinates”: [

-1.5
,

54

            ],

“type”:** “point”

**         

       

      ]

    **

Exemples :

{
  "geo": null,
  "coordinates": null,
  "place": {
    "id": "07d9db48bc083000",
    "url": "https://api.x.com/1.1/geo/id/07d9db48bc083000.json",
    "place_type": "poi",
    "name": "McIntosh Lake",
    "full_name": "McIntosh Lake",
    "country_code": "US",
    "country": "États-Unis",
    "bounding_box": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ]
        ]
      ]
    },
    "attributes": {

    }
  }
}
{
  "geo": {
    "type": "Point",
    "coordinates": [
      40.74118764,
      -73.9998279
    ]
  },
  "coordinates": {
    "type": "Point",
    "coordinates": [
      -73.9998279,
      40.74118764
    ]
  },
  "place": {
    "id": "01a9a39529b27f36",
    "url": "https://api.x.com/1.1/geo/id/01a9a39529b27f36.json",
    "place_type": "city",
    "name": "Manhattan",
    "full_name": "Manhattan, NY",
    "country_code": "US",
    "country": "États-Unis",
    "bounding_box": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -74.026675,
            40.683935
          ],
          [
            -74.026675,
            40.877483
          ],
          [
            -73.910408,
            40.877483
          ],
          [
            -73.910408,
            40.683935
          ]
        ]
      ]
    },
    "attributes": {

    }
  }
}
Dictionnaire des données : Enterprise

Entités X  

Aller à sur cette page Introduction Objet entities   - Objet Hashtag   - Objet Media   - Objet Media size   - Objet URL   - Objet mention d’utilisateur   - Objet Symbol   - Objet Poll Détails sur les Retweets et les Quote Tweets Entities dans les objets utilisateur Entities dans les Messages privés Étapes suivantes

Introduction

Les entités fournissent des métadonnées et des informations contextuelles supplémentaires sur le contenu publié sur X. La section entities fournit des tableaux d’éléments courants inclus dans les Posts : hashtags, mentions d’utilisateurs, liens, tickers boursiers (symboles), sondages X et médias associés. Ces tableaux sont pratiques pour les développeurs lors de l’ingestion de Posts, puisque X a en substance déjà prétraité (pré‑analysé) le corps du texte. Plutôt que de devoir rechercher explicitement ces entités dans le corps du Post, votre analyseur peut se rendre directement à cette section JSON pour les récupérer. Au‑delà de ces facilités d’analyse, la section entities fournit également des métadonnées utiles à forte valeur ajoutée. Par exemple, si vous utilisez l’enrichissement Enhanced URLs, les métadonnées d’URL incluent des URL entièrement développées, ainsi que les titres et descriptions des sites web associés. Autre exemple : lorsqu’il y a des mentions d’utilisateurs, les métadonnées des entités incluent l’id utilisateur numérique, utile pour effectuer des requêtes vers de nombreuses X API. Chaque charge utile JSON de Post inclut une section entities, avec l’ensemble minimal d’attributs hashtags, urls, user_mentions et symbols, même si aucune de ces entités ne fait partie du message du Post. Par exemple, si vous examinez le JSON d’un Post dont le corps est « Hello World! » et sans média associé, le JSON du Post inclura le contenu suivant avec des tableaux d’entités contenant zéro élément :
"entities": {
        "hashtags": [
        ],
        "urls": [
        ],
        "user_mentions": [
        ],
        "symbols": [
        ]
      }
Remarques :
  • les entités media et polls n’apparaissent que lorsque ce type de contenu fait partie du Post.
  • si vous travaillez avec des médias natifs (photos, vidéos ou GIF), l’objet Extended Entities est la solution recommandée.

Objet Entities

Les sections entities et extended_entities sont toutes deux constituées de tableaux d’objets d’entité. Vous trouverez ci-dessous des descriptions de chacun de ces objets d’entité, ainsi que des dictionnaires de données décrivant les noms d’attributs de l’objet, leurs types et une brève description. Nous indiquerons également quels opérateurs PowerTrack correspondent à ces attributs et fournirons quelques exemples de charges utiles JSON. Une collection d’entités courantes présentes dans les Posts, notamment des hashtags, des liens et des mentions d’utilisateurs. L’objet entities inclut un attribut media, mais son implémentation dans la section entities n’est pleinement exacte que pour les Posts contenant une seule photo. Pour tous les Posts comprenant plus d’une photo, une vidéo ou un GIF animé, reportez-vous à la section extended_entities.

Dictionnaire de données des entités

L’objet entities est un conteneur de tableaux d’autres sous-objets d’entité. Après avoir présenté la structure entities, des dictionnaires de données pour ces sous-objets, ainsi que les opérateurs qui les font correspondre, seront fournis.
ChampTypeDescription
hashtagsTableau d’Objets HashtagReprésente les hashtags extraits du texte du Post. Exemple :


“hashtags”: [

“indices”: [
32,
38
],
“text”: “nodejs”

]
mediaTableau d’Objets MediaReprésente les éléments multimédias téléversés avec le Post. Exemple :


“media”: [

“display_url”: “pic.x.com/5J1WJSRCy9”,
“expanded_url”: “https://x.com/nolan_test/status/930077847535812610/photo/1”,
“id”: 9.300778475358126e17,
“id_str”: “930077847535812610”,
“indices”: [
13,
36
],
“media_url”: “http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,
“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg
“sizes”:
“thumb”:
“h”: 150,
“resize”: “crop”,
“w”: 150
,
“large”:
“h”: 1366,
“resize”: “fit”,
“w”: 2048
,
“medium”:
“h”: 800,
“resize”: “fit”,
“w”: 1200
,
“small”:
“h”: 454,
“resize”: “fit”,
“w”: 680

,
“type”: “photo”,
“url”: “https://t.co/5J1WJSRCy9”,

]
urlsTableau d’Objets URLReprésente les URL incluses dans le texte d’un Post.

Exemple (sans l’enrichissement Enhanced URLs activé) :


“urls”: [

“indices”: [
32,
52
],
“url”: “http://t.co/IOwBrTZR”,
“display_url”: “youtube.com/watch?v=oHg5SJ…”,
“expanded_url”: “http://www.youtube.com/watch?v=oHg5SJYRHA0

]


Exemple (avec l’enrichissement Enhanced URLs activé) :

“urls”: [

“url”: “https://t.co/D0n7a53c2l”,
“expanded_url”: “http://bit.ly/18gECvy”,
“display_url”: “bit.ly/18gECvy”,
“unwound”:
“url”: “https://www.youtube.com/watch?v=oHg5SJYRHA0”,
“status”: 200,
“title”: “RickRoll’D”,
“description”: “http://www.facebook.com/rickroll548 Tant que les trolls continuent de troller, le Rick ne cessera jamais de rouler.”
,
“indices”: [
62,
85
]

]
user_mentionsTableau d’Objets User MentionReprésente les autres utilisateurs X mentionnés dans le texte du Post. Exemple :


“user_mentions”: [

“name”: “X API”,
“indices”: [
4,
15
],
“screen_name”: “xapi”,
“id”: 6253282,
“id_str”: “6253282”

]
symbolsTableau d’Objets SymbolReprésente les symboles, c’est-à-dire les $cashtags, inclus dans le texte du Post. Exemple :


“symbols”: [

“indices”: [
12,
17
],
“text”: “twtr”

]
pollsTableau d’Objets PollReprésente les sondages X inclus dans le Post. Exemple :

“polls”: [

“options”: [

“position”: 1,
“text”: “J’ai lu la documentation une fois.”
,

“position”: 2,
“text”: “J’ai lu la documentation deux fois.”
},

“position”: 3,
“text”: “Je lis la documentation encore et encore.”
}
],
“end_datetime”: “Thu May 25 22:20:27 +0000 2017”,
“duration_minutes”: 60

]

Objet Hashtag  

La section entities contient un tableau hashtags qui comprend un objet pour chaque hashtag présent dans le corps du Post, et un tableau vide si aucun hashtag n’est présent. L’opérateur PowerTrack # est utilisé pour faire correspondre l’attribut text. L’opérateur has:hashtags correspond s’il y a au moins un élément dans le tableau.
ChampTypeDescription
indicesTableau d’entiersTableau d’entiers indiquant les positions dans le texte du Post où le hashtag commence et se termine. Le premier entier représente l’emplacement du caractère # dans la chaîne de texte du Post. Le second entier représente l’emplacement du premier caractère après le hashtag. Par conséquent, la différence entre les deux nombres correspond à la longueur du nom du hashtag plus un (pour le caractère « # »). Exemple:

“indices”:[32,38]
textChaîneNom du hashtag, sans le caractère « # » initial. Exemple:

“text”:“nodejs”

Objet média  

La section entities contiendra un tableau media avec un seul objet média si un objet média a été « ajouté » au Post. Si aucun média natif n’a été ajouté, il n’y aura pas de tableau media dans entities. Pour les raisons suivantes, la section extended_entities doit être utilisée pour traiter les médias natifs du Post :
  • Le type de média indiquera toujours « photo », même lorsqu’une vidéo ou un GIF est ajouté au Post.
  • Bien que jusqu’à quatre photos puissent être ajoutées, seule la première sera indiquée dans la section entities.
L’opérateur has:media correspondra si ce tableau est renseigné.
ChampTypeDescription
display_urlStringURL du média à afficher aux clients. Exemple :

“display_url”:“pic.x.com/rJC5Pxsu”
expanded_urlStringVersion développée de display_url. Pointe vers la page d’affichage du média. Exemple :

“expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1
idInt64ID du média exprimé sous forme d’entier 64 bits. Exemple :

“id”:114080493040967680
id_strStringID du média exprimé sous forme de chaîne de caractères. Exemple :

“id_str”:“114080493040967680”
indicesArray of IntTableau d’entiers indiquant les positions dans le texte du Post où l’URL commence et se termine. Le premier entier représente la position du premier caractère de l’URL dans le texte du Post. Le second entier représente la position du premier caractère non-URL qui suit l’URL (ou la fin de la chaîne si l’URL est la dernière partie du texte du Post). Exemple :

“indices”:[15,35]
media_urlStringURL http:// pointant directement vers le fichier média téléchargé. Exemple :

“media_url”:“http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg

Pour les médias dans les Messages privés, media_url est la même URL https que media_url_https et doit être accessible en signant une requête avec l’access token de l’utilisateur en utilisant OAuth 1.0a.

Il n’est pas possible d’accéder aux images via une session x.com authentifiée. Veuillez consulter cette page pour apprendre comment prendre en compte ces changements récents.

Vous ne pouvez pas intégrer directement ces images dans une page web.

Voir Formatage d’URL de média photo pour savoir comment formater l’URL d’une photo, telle que media_url_https, en fonction des sizes disponibles.
media_url_httpsStringURL https:// pointant directement vers le fichier média téléchargé, pour l’intégration sur des pages https. Exemple :

“media_url_https”:“https://p.twimg.com/AZVLmp-CIAAbkyy.jpg

Pour les médias dans les Messages privés, media_url_https doit être accessible en signant une requête avec l’access token de l’utilisateur en utilisant OAuth 1.0a.

Il n’est pas possible d’accéder aux images via une session x.com authentifiée. Veuillez consulter cette page pour apprendre comment prendre en compte ces changements récents.

Vous ne pouvez pas intégrer directement ces images dans une page web.

Voir Formatage d’URL de média photo pour savoir comment formater l’URL d’une photo, telle que media_url_https, en fonction des sizes disponibles.
sizesSize ObjectObjet indiquant les tailles disponibles pour le fichier média. Exemple :


“sizes”:
“thumb”:
“h”: 150,
“resize”: “crop”,
“w”: 150
},
“large”:
“h”: 1366,
“resize”: “fit”,
“w”: 2048
},
“medium”:
“h”: 800,
“resize”: “fit”,
“w”: 1200
},
“small”:
“h”: 454,
“resize”: “fit”,
“w”: 680
}
}
}

Voir Formatage d’URL de média photo pour savoir comment formater l’URL d’une photo, telle que media_url_https, en fonction des sizes disponibles.
source_status_idInt64Nullable. Pour les Posts contenant des médias qui étaient à l’origine associés à un Post différent, cet ID pointe vers le Post original. Exemple :

“source_status_id”: 205282515685081088
source_status_id_strInt64Nullable. Pour les Posts contenant des médias qui étaient à l’origine associés à un Post différent, cet ID basé sur une chaîne de caractères pointe vers le Post original. Exemple :

“source_status_id_str”: “205282515685081088”
typeStringType de média téléchargé. Les types possibles incluent photo, video et animated_gif. Exemple :

“type”:“photo”
urlStringURL encapsulée pour le lien média. Correspond à l’URL intégrée directement dans le texte brut du Post, et aux valeurs du paramètre indices. Exemple :

“url”:“http://t.co/rJC5Pxsu

Objets de taille de média

Tous les Posts avec des médias natifs (photos, vidéos et GIF) incluront un ensemble de tailles « thumb », « small », « medium » et « large », avec la hauteur et la largeur exprimées en pixels. Pour les photos et les URL de médias d’images d’aperçu, Photo Media URL formatting indique comment construire différentes URL afin de charger des médias photo à des tailles différentes.

Objet Sizes 

ChampTypeDescription
thumbSize ObjectInformations sur une version miniature du média. Exemple :

“thumb”:“h”:150, “resize”:“crop”, “w”:150}

Les photos au format miniature seront limitées à remplir une zone de 150×150 et seront recadrées.
largeSize ObjectInformations sur une version grande du média. Exemple :

“large”:“h”:454, “resize”:“fit”, “w”:680}

Les photos au petit format seront limitées à s’adapter dans une zone de 680×680.
mediumSize ObjectInformations sur une version moyenne du média. Exemple :

“medium”:“h”:800, “resize”:“fit”, “w”:1200}

Les photos au format moyen seront limitées à s’adapter dans une zone de 1200×1200.
smallSize ObjectInformations sur une version petite du média. Exemple :

“small”:“h”:1366, “resize”:“fit”, “w”:2048}

Les photos au grand format seront limitées à s’adapter dans une zone de 2048×2048.

Objet Size 

ChampTypeDescription
wIntLargeur en pixels de cette taille. Exemple :

“w”:150
hIntHauteur en pixels de cette taille. Exemple :

“h”:150
resizeStringMéthode de redimensionnement utilisée pour obtenir cette taille. Une valeur fit indique que le média a été redimensionné pour s’adapter à une dimension, en conservant son ratio d’aspect natif. Une valeur crop indique que le média a été recadré afin de s’adapter à une résolution spécifique. Exemple :

“resize”:“crop”

Mise en forme des URL des médias photo

Les médias photo sur X peuvent être chargés à différentes tailles. Il est préférable de charger l’image la plus petite qui soit suffisamment grande pour s’adapter à une zone d’affichage donnée. Pour charger différentes tailles, l’objet Size et media_url (ou media_url_https) doivent être combinés selon un format particulier. Nous utiliserons l’exemple d’entité media déjà fourni pour construire une URL de média photo. Les media_url ou media_url_https peuvent être utilisées seules, ce qui charge par défaut la variante medium. Il est toutefois préférable de fournir une URL de média photo entièrement formatée lorsque c’est possible. Une URL de média photo comporte trois parties :
URL de baseL’URL de base est l’URL du média sans l’extension de fichier.

Par exemple :

“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,

L’URL de base est alors :

https://pbs.twimg.com/media/DOhM30VVwAEpIHq
FormatLe format correspond au type de photo. Les formats possibles sont jpg ou png, indiqués par l’extension de l’URL du média.

Par exemple :

“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,

Le format est alors : jpg
NomLe nom est l’identifiant du champ de taille à charger.

Par exemple :


 “sizes”:
   “thumb”:
     “h”: 150,
     “resize”: “crop”,
     “w”: 150
   ,
   “large”:
     “h”: 1366,
     “resize”: “fit”,
     “w”: 2048
   },
   “medium”:
     “h”: 800,
     “resize”: “fit”,
     “w”: 1200
   },
   “small”:
     “h”: 454,
     “resize”: “fit”,
     “w”: 680
   }
 }
}

Le nom à utiliser pour charger la photo en grande taille serait : large
Nous prenons ces trois parties (URL de base, format et nom) et les combinons pour former l’URL du média photo à charger. Il existe deux formats pour charger des images de cette manière : legacy et modern. Tous les chargements d’images doivent cesser d’utiliser le format legacy au profit du format modern. L’utilisation du format modern améliorera le taux de réussite sur le CDN pour l’appelant, réduisant ainsi la latence de chargement en limitant la nécessité de générer et de charger le média depuis le centre de données.
Legacy formatLe format « legacy » est obsolète. Tous les chargements de médias photo doivent passer au format moderne.

<base_url>.<format>:<name>

Par exemple :

https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large
Modern formatLe format moderne pour le chargement des photos a été établi chez X en 2015 et est devenu le standard de facto depuis 2017. Tous les chargements de médias photo doivent passer à ce format.

<base_url>?format=<format>&name=<name>

Par exemple :

https://pbs.twimg.com/media/DOhM30VVwAEpIHq?format=jpg&amp;name=large


Remarque : les éléments dans la chaîne query de l’URL des médias photo sont classés par ordre alphabétique. Si le chargement des médias devait ajouter des éléments query supplémentaires, l’ordre alphabétique resterait requis. Par exemple, s’il existait l’élément query hypothétique nommé preferred_format, il serait placé après format et name dans la chaîne query.

Objet URL 

La section entities contient un tableau urls avec un objet pour chaque lien inclus dans le corps du Post, et un tableau vide si aucun lien n’est présent. L’opérateur has:links correspond si le tableau contient au moins un élément. L’opérateur url: est utilisé pour faire correspondre l’attribut expanded_url. Si vous utilisez l’enrichissement Expanded URL, l’opérateur url: correspond à l’attribut unwound.url (URL entièrement déroulée). Si vous utilisez l’enrichissement Enhanced URL, les opérateurs url_title: et url_description: sont utilisés pour faire correspondre les attributs unwound.title et unwound.description.
FieldTypeDescription
display_urlStringURL collée/saisie dans le Post. Exemple :

“display_url”:“bit.ly/2so49n2”
expanded_urlStringVersion développée de display_url. Exemple :

“expanded_url”:“http://bit.ly/2so49n2
indicesArray of IntTableau d’entiers représentant les décalages dans le texte du Post où l’URL commence et se termine. Le premier entier indique l’emplacement du premier caractère de l’URL dans le texte du Post. Le second entier indique l’emplacement du premier caractère non-URL après la fin de l’URL. Exemple :

“indices”:[30,53]
urlStringURL encapsulée, correspondant à la valeur intégrée directement dans le texte brut du Post, ainsi qu’aux valeurs du paramètre indices. Exemple :

“url”:“https://t.co/yzocNFvJuL
Si vous utilisez les enrichissements Expanded et/ou Enhanced URL, les metadata suivantes sont disponibles sous l’attribut unwound :
FieldTypeDescription
urlStringVersion entièrement déroulée du lien inclus dans le Post. Exemple :

“url”:“https://blog.x.com/en&#95;us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html
statusIntStatut HTTP final du processus de déroulement, « 200 » indiquant une réussite. Exemple :

200
titleStringTitre HTML du lien. Exemple :

“title”:“Using X as a ‘go-to’ communication channel during severe weather”
descriptionStringDescription HTML du lien. Exemple :

“description”:“Using X as a ‘go-to’ communication channel during severe weather”

Objet de mention d’utilisateur  

La section entities contient un tableau user_mentions avec un objet pour chaque mention d’utilisateur incluse dans le corps du Post, et inclut un tableau vide si aucune mention d’utilisateur n’est présente. L’opérateur PowerTrack @ est utilisé pour faire correspondre l’attribut screen_name. L’opérateur has:mentions correspond si le tableau contient au moins un élément.
ChampTypeDescription
idInt64ID de l’utilisateur mentionné, sous forme d’entier. Exemple :

“id”:6253282
id_strStringID de l’utilisateur mentionné, sous forme de chaîne. Exemple :

“id_str”:“6253282”
indicesArray of IntUn tableau d’entiers représentant les positions (offsets) dans le texte du Post où la référence à l’utilisateur commence et se termine. Le premier entier indique l’emplacement du caractère « @ » de la mention d’utilisateur. Le deuxième entier indique l’emplacement du premier caractère suivant la mention qui ne fait pas partie du screen_name. Exemple :

“indices”:[4,15]
nameStringNom affiché de l’utilisateur référencé. Exemple :

“name”:“API”
screen_nameStringScreen name de l’utilisateur référencé. Exemple :

“screen_name”:“api”

Objet Symbol  

La section entities contient un tableau symbols avec un objet pour chaque $cashtag présent dans le corps du Post, et un tableau vide si aucun symbole n’est présent. L’opérateur PowerTrack $ est utilisé pour faire correspondre l’attribut text. L’opérateur has:symbols correspond si le tableau contient au moins un élément.
FieldTypeDescription
indicesArray of IntUn tableau d’entiers indiquant les positions dans le texte du Post où le symbole/cashtag commence et se termine. Le premier entier représente l’emplacement du caractère danslachaı^nedetexteduPost.Lesecondentierrepreˊsentelemplacementdupremiercaracteˋreapreˋslecashtag.Parconseˊquent,ladiffeˊrenceentrelesdeuxnombrescorrespondaˋlalongueurdunomducashtagplusun(pourlecaracteˋre«dans la chaîne de texte du Post. Le second entier représente l’emplacement du premier caractère après le cashtag. Par conséquent, la différence entre les deux nombres correspond à la longueur du nom du cashtag plus un (pour le caractère « »). Exemple:

“indices”:[12,17]
textStringNom du cashtag, sans le caractère initial « $ ». Exemple:

“text”:“twtr”

Objet Poll

La section entities contiendra un tableau polls avec un seul objet poll si le Post inclut un sondage. Si aucun sondage n’est présent, il n’y aura pas de tableau polls dans la section entities. Notez que ces métadonnées de Poll ne sont disponibles qu’avec les API Enterprise suivantes :
ChampTypeDescription
optionsArray of Option ObjectUn tableau d’options, chacune ayant une position dans le sondage et le texte associé à cette position. Exemple :

“options”: [

“position”: 1,
“text”: “I read documentation once.”
}
]
}
end_datetimeStringHorodatage (UTC) de fin du sondage. Exemple :

“end_datetime”: “Thu May 25 22:20:27 +0000 2017”
duration_minutesStringDurée du sondage en minutes. Exemple :

“duration_minutes”: 60

Détails sur les Retweets et les Quote Tweets

Du point de vue de la X API, les Retweets et les Quote Tweets sont des types particuliers de Posts qui contiennent le Post original en tant qu’objet intégré. Ainsi, les objets Retweet et Quote Tweet sont les parents d’un Post « original » enfant (et doublent donc la taille). Les Retweets possèdent un objet de niveau supérieur “retweeted_status”, et les Quote Tweets possèdent un objet “quoted_status”. Par souci de cohérence, ces objets Retweet et Quote Tweet de niveau supérieur possèdent également une propriété text et des entities associées. Toutefois, les entities au niveau supérieur peuvent différer des entities fournies par les entities « originales » intégrées. Dans le cas des Retweets, un nouveau texte est ajouté en préfixe au corps du Post original. Pour les Quote Posts, un nouveau texte est ajouté en suffixe au corps du Post. De manière générale, la meilleure pratique consiste à récupérer le texte, les entities, l’auteur original et la date à partir du Post original dans retweeted_status lorsque cela existe. Une exception concerne la récupération des entities X qui font partie de l’ajout de la citation (Quote). Voir ci-dessous pour plus de détails et de conseils.

Retweets

Un point important concernant les Retweets est qu’aucune entité X supplémentaire ne peut être ajoutée au Post. Les utilisateurs ne peuvent pas ajouter de hashtags, d’URL ni d’autres éléments lorsqu’ils effectuent un Retweet. Cependant, l’attribut text (au niveau supérieur) du Retweet est composé du texte du Post original, précédé de « RT @username: ». Dans certains cas, en particulier pour les comptes ayant de longs noms d’utilisateur, la combinaison de ces nouveaux caractères et du corps du Post original peut facilement dépasser la limite de 140 caractères du texte du Post original. Afin de préserver la compatibilité avec l’affichage et le stockage basés sur 140 caractères, le corps de niveau supérieur tronque la fin du corps du Post et ajoute une ellipse (« … »). Par conséquent, certaines entités de niveau supérieur situées à la fin du Post original peuvent être incorrectes ou manquantes, par exemple dans le cas d’un hashtag ou d’une URL tronqués. Ce Post, https://x.com/FloodSocial/status/907974220298125312, a le texte de Post suivant : Just another test Post that needs to be exactly 140 characters with trailing URL and hashtag
http://wapo.st/2w8iwPQ #Testing
Dans l’exemple ci-dessus, l’URL et le hashtag ont été affectés. Étant donné que le hashtag a été entièrement tronqué et que l’URL a été partiellement tronquée, ils sont absents des entités de niveau supérieur. Vous remarquerez également l’entité supplémentaire user_mentions au niveau supérieur, provenant du préfixe « RT @floodsocial: » dans le champ text. Cependant, le texte du Post et les entities dans retweeted_status reflètent parfaitement le Post original, sans troncature ni entités incorrectes. C’est pourquoi nous recommandons de se fier à l’objet imbriqué retweeted_status pour les Retweets.

Quote Tweets

Les Quote Tweets ont été introduits en 2016 et se distinguent des Retweets en ce que, lorsque vous « citez » un Post, vous ajoutez du nouveau contenu « par‑dessus » un Post partagé. Ce nouveau contenu peut inclure presque tout ce qu’un Post original peut contenir, y compris du nouveau texte, des hashtags, des mentions et des URL. Les Quote Tweets peuvent contenir des médias natifs (photos, vidéos et GIF) et apparaissent sous l’objet entities. Étant donné que des entities X peuvent être ajoutées, les entities de la citation sont probablement différentes des entities originales. Dans cet exemple, une nouvelle URL et un nouveau hashtag ont été placés à la fin du Quote Tweet. Ce Post, https://x.com/FloodSocial/status/907983973225160704, contient le texte de Post suivant :                   étrange et tout aussi tragique lorsque les îles sont inondées… tests transatlantiques de Quote Tweets | @thisuser @thatuserhttp://bit.ly/2vMMDuu #testing Dans ce cas, les entities de niveau supérieur ne reflètent pas les détails de la citation.  Cependant, le texte du Post et les entities dans extended_tweet reflètent parfaitement le Quote Tweet, sans troncature ni entities incorrectes, d’où notre recommandation de s’appuyer sur l’objet imbriqué extended_tweet pour les Quote Tweets.

Entités pour l’objet utilisateur

Les entités pour les objets utilisateur décrivent les URL qui apparaissent dans l’URL de profil définie par l’utilisateur et dans les fields de description. Elles ne décrivent pas les hashtags ni les user_mentions. Contrairement aux entités de Post, les entités utilisateur peuvent s’appliquer à plusieurs fields au sein de leur objet parent — pour lever toute ambiguïté, vous trouverez des nœuds parents appelés url et description qui indiquent quel field contient l’URL « entitisée ». Dans cet exemple, le field url de l’utilisateur contient un lien t.co qui est entièrement développé dans le nœud entities/url/urls[0] de la réponse. L’utilisateur n’a pas d’URL encapsulée dans sa description.

Exemple de JSON

{
  "id": 6253282,
  "id_str": "6253282",
  "name": "X API",
  "screen_name": "xapi",
  "location": "San Francisco, CA",
  "description": "La véritable X API. Je tweete sur les modifications d'API, les problèmes de service et réponds avec plaisir aux questions concernant X et notre API. Pas de réponse ? Consultez mon site web.",
  "url": "http:\/\/t.co\/78pYTvWfJd",
  "entities": {
    "url": {
      "urls": [
        {
          "url": "http:\/\/t.co\/78pYTvWfJd",
          "expanded_url": "http:\/\/dev.x.com",
          "display_url": "dev.x.com",
          "indices": [
            0,
            22
          ]
        }
      ]
    },
    "description": {
      "urls": [

      ]
    }
  }
}

Entités étendues X 

Aller à cette section Introduction Objet Extended Entities Exemples de Tweets et de charges utiles JSON   - Tweet avec quatre photos natives   - Tweet avec une vidéo native   - Tweet avec un GIF animé Étapes suivantes

Introduction

Si un Post contient des médias natifs (partagés via l’interface utilisateur du Post plutôt que via un lien externe), une section extended_entities sera également présente. Pour tout média natif (photo, vidéo ou GIF), extended_entities est la source de metadata privilégiée pour plusieurs raisons. Actuellement, jusqu’à quatre photos peuvent être jointes à un Post. Les metadata de entities ne contiendront que la première photo (jusqu’en 2014, une seule photo pouvait être incluse), tandis que la section extended_entities inclura toutes les photos jointes. Avec les médias natifs, autre limite des metadata entities.media : le type de média indiquera toujours « photo », même lorsque le média joint est une vidéo ou un GIF animé. Le type réel du média est spécifié dans l’attribut extended_entities.media[].type et vaut soit photo, video ou animated_gif. Pour ces raisons, si vous travaillez avec des médias natifs, les metadata extended_entities sont à privilégier. Tous les Posts avec des photos, des vidéos et des GIF animés joints incluent un objet JSON extended_entities. L’objet extended_entities contient un unique tableau media d’objets media (voir la section entities pour son dictionnaire de data). Aucun autre type d’entité, tels que les hashtags et les liens, n’est inclus dans la section extended_entities. L’objet media dans la section extended_entities est identique dans sa structure à celui inclus dans la section entities. Les Posts ne peuvent comporter qu’un seul type de média joint. Pour les photos, jusqu’à quatre peuvent être jointes. Pour les vidéos et les GIF, un seul peut être joint. Étant donné que les metadata du type de média dans la section extended_entities indiquent correctement le type de média (« photo », « video » ou « animated_gif ») et prennent en charge jusqu’à 4 photos, il s’agit de la source de metadata privilégiée pour les médias natifs.
{
      "extended_entities": {
        "media": [

        ]
      }
    }

Exemples de Posts et de charges utiles JSON

Vous trouverez ci-dessous quelques exemples de Posts et leurs métadonnées d’entités associées. Post avec quatre photos natives Post avec hashtag, mention d’utilisateur, cashtag, URL et quatre photos natives :
Voici la section entities pour ce Post :
{
      "entities": {
        "hashtags": [
          {
            "text": "hashtag",
            "indices": [
              59,
              67
            ]
          }
        ],
        "urls": [
          {
            "url": "https://t.co/RzmrQ6wAzD",
            "expanded_url": "http://bit.ly/2pUk4be",
            "display_url": "bit.ly/2pUk4be",
            "unwound": {
              "url": "https://blog.gnip.com/tweeting-in-the-rain/",
              "status": 200,
              "title": "Tweeter sous la pluie, Partie 1 - Blog Gnip - Blog de données sociales et de science des données",
              "description": "Si vous m'aviez dit il y a quelques années qu'un jour je comparerais les données de précipitations et les données de séries temporelles des médias sociaux, j'aurais pensé que vous plaisantiez. Pendant 13 ans chez OneRain, j'ai aidé à développer des logiciels et la surveillance … Continuer la lecture →"
            },
            "indices": [
              35,
              58
            ]
          }
        ],
        "user_mentions": [
          {
            "screen_name": "MentionThis",
            "name": "Juste Moi",
            "id": 50247739,
            "id_str": "50247739",
            "indices": [
              16,
              28
            ]
          }
        ],
        "symbols": [
          {
            "text": "twtr",
            "indices": [
              29,
              34
            ]
          }
        ],
        "media": [
          {
            "id": 861627472244162561,
            "id_str": "861627472244162561",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          }
        ]
      }
    }
Ce n’est que dans la charge utile « étendue » ci-dessous que vous trouverez les quatre photos natives (au maximum). Notez que la première photo du tableau est la même que la photo unique incluse dans la section X non étendue des entities. La structure de metadata media pour les photos est identique dans les sections entities et extended_entities. Voici la section extended_entities pour ce Post :
{
    "extended_entities": {
        "media": [
          {
            "id": 861627472244162561,
            "id_str": "861627472244162561",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627472244203520,
            "id_str": "861627472244203520",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPVYAAZbEs.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPVYAAZbEs.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 680,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 1200,
                "h": 1200,
                "resize": "fit"
              },
              "large": {
                "w": 2048,
                "h": 2048,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627474144149504,
            "id_str": "861627474144149504",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_Udn2UUQAADZIS.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_Udn2UUQAADZIS.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627474760708096,
            "id_str": "861627474760708096",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_Udn4nUMAAgcIa.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_Udn4nUMAAgcIa.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 680,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 1200,
                "h": 1200,
                "resize": "fit"
              },
              "large": {
                "w": 2048,
                "h": 2048,
                "resize": "fit"
              }
            }
          }
        ]
      }
    }

Post avec vidéo native

Ci-dessous figurent les métadonnées des entités étendues pour ce Post avec une vidéo :
{
      "extended_entities": {
        "media": [
          {
            "id": 869317980307415040,
            "id_str": "869317980307415040",
            "indices": [
              31,
              54
            ],
            "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "url": "https://t.co/TLSTTOvvmP",
            "display_url": "pic.x.com/TLSTTOvvmP",
            "expanded_url": "https://x.com/FloodSocial/status/869318041078820864/video/1",
            "type": "video",
            "sizes": {
              "small": {
                "w": 340,
                "h": 604,
                "resize": "fit"
              },
              "large": {
                "w": 720,
                "h": 1280,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 600,
                "h": 1067,
                "resize": "fit"
              }
            },
            "video_info": {
              "aspect_ratio": [
                9,
                16
              ],
              "duration_millis": 10704,
              "variants": [
                {
                  "bitrate": 320000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/180x320/FMei8yCw7yc_Z7e-.mp4"
                },
                {
                  "bitrate": 2176000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/720x1280/octt5pFbISkef8RB.mp4"
                },
                {
                  "bitrate": 832000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/360x640/2OmqK74SQ9jNX8mZ.mp4"
                },
                {
                  "content_type": "application/x-mpegURL",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/pl/wcJQJ2nxiFU4ZZng.m3u8"
                }
              ]
            }
          }
        ]
      }
    }
Lorsqu’un annonceur choisit de limiter la lecture vidéo aux seules plateformes détenues et exploitées par X, l’objet video_info est remplacé par un objet additional_media_info. L’objet additional_media_info contient des informations média supplémentaires fournies par l’éditeur, telles que title, description et embeddable flag. Le contenu vidéo n’est accessible qu’aux clients officiels de X lorsque embeddable=false. Dans ce cas, toutes les URL vidéo fournies dans la charge utile seront hébergées par X, afin que l’utilisateur puisse ouvrir la vidéo sur une propriété appartenant à X en cliquant sur le lien. Voici un exemple de l’objet extended entities dans cette situation :
{
      "extended_entities": {
        "media": [
          {
            "id": 924685332347469824,
            "id_str": "924685332347469824",
            "indices": [
              49,
              72
            ],
            "media_url": "http://pbs.twimg.com/media/DNUkdLMVwAEzj8K.jpg",
            "media_url_https": "https://pbs.twimg.com/media/DNUkdLMVwAEzj8K.jpg",
            "url": "https://t.co/90xOJqKMox",
            "display_url": "pic.x.com/90xOJqKMox",
            "expanded_url": "https://x.com/nyjets/status/924685391524798464/video/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 383,
                "resize": "fit"
              },
              "medium": {
                "w": 1200,
                "h": 675,
                "resize": "fit"
              },
              "large": {
                "w": 1280,
                "h": 720,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              }
            },
            "additional_media_info": {
              "title": "#ATLvsNYJ : TD de Tomlinson sur passe de McCown",
              "description": "NFL",
              "embeddable": false,
              "monetizable": true
            }
          }
        ]
      }
    }
Comme indiqué ci-dessus, voici la section entities où le champ type est à tort défini sur « photo ». À nouveau, la section extended_entities est à privilégier pour tous les types de médias natifs, y compris « video » et « animated_gif ».
    {
    "entities": {
        "hashtags": [

        ],
        "urls": [

        ],
        "user_mentions": [

        ],
        "symbols": [

        ],
        "media": [
          {
            "id": 869317980307415040,
            "id_str": "869317980307415040",
            "indices": [
              31,
              54
            ],
            "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "url": "https://t.co/TLSTTOvvmP",
            "display_url": "pic.x.com/TLSTTOvvmP",
            "expanded_url": "https://x.com/FloodSocial/status/869318041078820864/video/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 340,
                "h": 604,
                "resize": "fit"
              },
              "large": {
                "w": 720,
                "h": 1280,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 600,
                "h": 1067,
                "resize": "fit"
              }
            }
          }
        ]
      }

    }

Post avec un GIF animé

Vous trouverez ci-dessous les métadonnées des entités étendues pour ce Post avec un GIF animé :
{
      "extended_entities": {
        "media": [
          {
            "id": 870042654213459968,
            "id_str": "870042654213459968",
            "indices": [
              29,
              52
            ],
            "media_url": "http://pbs.twimg.com/tweet_video_thumb/DBMDLy_U0AAqUWP.jpg",
            "media_url_https": "https://pbs.twimg.com/tweet_video_thumb/DBMDLy_U0AAqUWP.jpg",
            "url": "https://t.co/nD6G4bWSKb",
            "display_url": "pic.x.com/nD6G4bWSKb",
            "expanded_url": "https://x.com/FloodSocial/status/870042717589340160/photo/1",
            "type": "animated_gif",
            "sizes": {
              "medium": {
                "w": 350,
                "h": 262,
                "resize": "fit"
              },
              "small": {
                "w": 340,
                "h": 255,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 350,
                "h": 262,
                "resize": "fit"
              }
            },
            "video_info": {
              "aspect_ratio": [
                175,
                131
              ],
              "variants": [
                {
                  "bitrate": 0,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/tweet_video/DBMDLy_U0AAqUWP.mp4"
                }
              ]
            }
          }
        ]
      }
    }

Exemples de charges utiles enrichies natives

Post

{
	"created_at": "Fri Sep 18 18:36:15 +0000 2020",
	"id": 1307025659294675000,
	"id_str": "1307025659294674945",
	"text": "Voici un article qui présente les mises à jour de la nouvelle structure de données Tweet v2 https://t.co/oeF3ZHeKQQ",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": false,
	"in_reply_to_status_id": 1304102743196356600,
	"in_reply_to_status_id_str": "1304102743196356610",
	"in_reply_to_user_id": 2244994945,
	"in_reply_to_user_id_str": "2244994945",
	"in_reply_to_screen_name": "XDevelopers",
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"quote_count": 1,
	"reply_count": 2,
	"retweet_count": 11,
	"favorite_count": 70,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"display_url": "dev.to/twitterdev/und…",
			"unwound": {
				"url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
				"status": 200,
				"title": "Comprendre la nouvelle structure de données Tweet dans l'X API v2",
				"description": "X a récemment annoncé la nouvelle X API v2, reconstruite de A à Z pour offrir de nouvelles fonctionnalités..."
			},
			"indices": [
				74,
				97
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Répondre à un Post

{
	"created_at": "Fri Aug 21 19:10:05 +0000 2020",
	"id": 1296887316556980200,
	"id_str": "1296887316556980230",
	"text": "Découvrez comment @PennMedCDH utilise les données X pour comprendre la crise sanitaire de la COVID-19 📊\n\nhttps://t.co/1tdA8uDWes",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">Application Web X</a>",
	"truncated": false,
	"in_reply_to_status_id": 1296887091901718500,
	"in_reply_to_status_id_str": "1296887091901718529",
	"in_reply_to_user_id": 2244994945,
	"in_reply_to_user_id_str": "2244994945",
	"in_reply_to_screen_name": "XDevelopers",
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"quote_count": 2,
	"reply_count": 3,
	"retweet_count": 9,
	"favorite_count": 26,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"unwound": {
				"url": "https://developer.x.com/en/use-cases/success-stories/penn",
				"status": 200,
				"title": "Penn Medicine Center for Digital Health",
				"description": "Le Penn Med Center for Digital Health a créé une carte X de la COVID-19 qui inclut des graphiques détaillant le sentiment, les symptômes signalés, des données découpées par état, et des données frontalières sur l'épidémie de COVID-19. De plus, leur initiative Penn Med With You utilise des informations régionales agrégées de X pour alimenter leur site web et leur service de messagerie texte. Le service utilise ces informations pour diffuser des ressources pertinentes et opportunes.",
			},
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Post étendu

{
	"created_at": "Wed Aug 19 16:26:16 +0000 2020",
	"id": 1296121314218897400,
	"id_str": "1296121314218897408",
	"text": "L'endpoint de masquage des réponses est lancé aujourd'hui ! \n\nLes développeurs peuvent masquer les réponses aux Tweets - un moyen essentiel pour les développeurs de… https://t.co/VyfXs1RTXn",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements relatifs à l'#XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"extended_tweet": {
		"full_text": "L'endpoint de masquage des réponses est lancé aujourd'hui ! \n\nLes développeurs peuvent masquer les réponses aux Tweets - un moyen essentiel pour les développeurs d'améliorer la qualité de la conversation publique en utilisant l'#XAPI.\n\nhttps://t.co/khXhTurm9x",
		"display_text_range": [
			0,
			215
		],
		"entities": {
			"hashtags": [{
				"text": "XAPI",
				"indices": [
					178,
					189
				]
			}],
			"urls": [{
				"url": "https://t.co/khXhTurm9x",
				"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
				"display_url": "devcommunity.com/t/hide-replies…",
				"unwound": {
					"url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
					"status": 200,
					"title": "Masquer les réponses désormais disponible dans la nouvelle X API",
					"description": "Aujourd'hui, nous sommes heureux d'annoncer la disponibilité générale de l'endpoint de masquage des réponses dans la nouvelle X API. L'endpoint de masquage des réponses vous permet de créer des outils qui aident les utilisateurs à masquer ou afficher les réponses à leurs Tweets. Les utilisateurs gèrent leurs réponses pour de nombreuses raisons, notamment pour accorder moins d'attention aux commentaires abusifs, perturbateurs, trompeurs, ou pour rendre les conversations plus engageantes. Grâce à cet endpoint, vous pouvez créer des outils pour aider les utilisateurs de X à masquer ou afficher les réponses plus rapidement et plus..."
				},
				"indices": [
					192,
					215
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quote_count": 23,
	"reply_count": 9,
	"retweet_count": 54,
	"favorite_count": 172,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/VyfXs1RTXn",
			"expanded_url": "https://x.com/i/web/status/1296121314218897408",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Post avec extended_entities

{
	"created_at": "Wed Aug 12 17:01:42 +0000 2020",
	"id": 1293593516040269800,
	"id_str": "1293593516040269825",
	"text": "C'est enfin arrivé ! 🥁 Dites bonjour à la nouvelle #XAPI.\n\nNous reconstruisons la X API v2 de zéro pour m… https://t.co/UeCndQGMjx",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à la #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"extended_tweet": {
		"full_text": "C'est enfin arrivé ! 🥁 Dites bonjour à la nouvelle #XAPI.\n\nNous reconstruisons la X API v2 de zéro pour mieux servir notre communauté de développeurs. Et le lancement d'aujourd'hui n'est que le début.\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"entities": {
			"hashtags": [{
				"text": "XAPI",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"unwound": {
					"url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
					"status": 200,
					"title": "Présentation de la nouvelle X API améliorée",
					"description": "Présentation de la nouvelle X API - reconstruite de zéro pour offrir de nouvelles fonctionnalités plus rapidement afin que les développeurs puissent aider le monde à se connecter à la conversation publique qui se déroule sur X."
				},
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"quote_count": 332,
	"reply_count": 172,
	"retweet_count": 958,
	"favorite_count": 2844,
	"entities": {
		"hashtags": [{
			"text": "XAPI",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Retweet

{
	"created_at": "Tue Feb 18 19:33:59 +0000 2020",
	"id": 1229851574555508700,
	"id_str": "1229851574555508737",
	"text": "RT @suhemparack: J'ai développé une Skill Alexa pour X utilisant APL qui permet de consulter les Tweets et les Tendances sur l'Echo Show !\n\nDécouvrez-la ici…",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": false,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "X Developers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"retweeted_status": {
		"created_at": "Tue Feb 18 19:01:58 +0000 2020",
		"id": 1229843515603144700,
		"id_str": "1229843515603144704",
		"text": "J'ai développé une Skill Alexa pour X utilisant APL qui permet de consulter les Tweets et les Tendances sur l'Echo Show !\n\nDécouvrez-la… https://t.co/RP9NgltX7i",
		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
		"truncated": true,
		"in_reply_to_status_id": null,
		"in_reply_to_status_id_str": null,
		"in_reply_to_user_id": null,
		"in_reply_to_user_id_str": null,
		"in_reply_to_screen_name": null,
		"user": {
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"name": "Suhem Parack",
			"screen_name": "suhemparack",
			"location": "Seattle, WA",
			"url": "https://developer.x.com",
			"description": "Relations Développeurs pour la Recherche Académique @X. Parlons recherche avec les données X. Précédemment : Amazon Alexa. Opinions personnelles",
			"translator_type": "none",
			"protected": false,
			"verified": false,
			"followers_count": 732,
			"friends_count": 501,
			"listed_count": 12,
			"favourites_count": 358,
			"statuses_count": 458,
			"created_at": "Thu Apr 27 20:56:22 +0000 2017",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": false,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "F5F8FA",
			"profile_background_image_url": "",
			"profile_background_image_url_https": "",
			"profile_background_tile": false,
			"profile_link_color": "1DA1F2",
			"profile_sidebar_border_color": "C0DEED",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": true,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/857699969263964161/1593055939",
			"default_profile": true,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
			"full_text": "J'ai développé une Skill Alexa pour X utilisant APL qui permet de consulter les Tweets et les Tendances sur l'Echo Show !\n\nDécouvrez-la ici 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"unwound": {
						"url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
						"status": 200,
						"title": null,
						"description": null
					},
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 6,
		"reply_count": 1,
		"retweet_count": 19,
		"favorite_count": 71,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"is_quote_status": false,
	"quote_count": 0,
	"reply_count": 0,
	"retweet_count": 0,
	"favorite_count": 0,
	"entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Tweet cité

{
	"created_at": "Mon Nov 16 18:09:36 +0000 2020",
	"id": 1328399838128468000,
	"id_str": "1328399838128467969",
	"text": "Comme prévu, les endpoints Labs v2 référencés ci-dessous ont maintenant été supprimés. Veuillez nous faire savoir sur les forums si vous a… https://t.co/ahQvTYaOcZ",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"quoted_status_id": 1327011423252144000,
	"quoted_status_id_str": "1327011423252144128",
	"quoted_status": {
		"created_at": "Thu Nov 12 22:12:32 +0000 2020",
		"id": 1327011423252144000,
		"id_str": "1327011423252144128",
		"text": "👋 Rappel amical que X Developer Labs v2 masquage des réponses et recherche récente seront supprimés lundi prochain, nove… https://t.co/EEWN2Q9aXh",
		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
		"truncated": true,
		"in_reply_to_status_id": null,
		"in_reply_to_status_id_str": null,
		"in_reply_to_user_id": null,
		"in_reply_to_user_id_str": null,
		"in_reply_to_screen_name": null,
		"user": {
			"id": 2244994945,
			"id_str": "2244994945",
			"name": "X Dev",
			"screen_name": "XDevelopers",
			"location": "127.0.0.1",
			"url": "https://developer.x.com/en/community",
			"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
			"translator_type": "regular",
			"protected": false,
			"verified": true,
			"followers_count": 512292,
			"friends_count": 2038,
			"listed_count": 1666,
			"favourites_count": 2147,
			"statuses_count": 3634,
			"created_at": "Sat Dec 14 04:35:55 +0000 2013",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": true,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "FFFFFF",
			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_tile": false,
			"profile_link_color": "0084B4",
			"profile_sidebar_border_color": "FFFFFF",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": false,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
			"default_profile": false,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
			"full_text": "👋 Rappel amical que X Developer Labs v2 masquage des réponses et recherche récente seront supprimés lundi prochain, 16 novembre ! Nous vous encourageons à migrer vers les nouveaux endpoints masquage des réponses et recherche récente maintenant disponibles dans l'X API v2. Détails : https://t.co/r6z6CI7kEy",
			"display_text_range": [
				0,
				273
			],
			"entities": {
				"hashtags": [{
					"text": "XAPI",
					"indices": [
						228,
						239
					]
				}],
				"urls": [{
					"url": "https://t.co/r6z6CI7kEy",
					"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
					"display_url": "devcommunity.com/t/retiring-lab…",
					"unwound": {
						"url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
						"status": 200,
						"title": "Suppression de Labs v2 recherche récente et masquage des réponses",
						"description": "Comme nous l'avons annoncé dans nos communications sur l'Accès Anticipé et le masquage des réponses, les endpoints X Developer Labs v2 suivants seront supprimés le 16 novembre. Labs v2 recherche récente Labs v2 masquage des réponses Si ces endpoints sont appelés, ils répondront avec un statut HTTP 410 et ne retourneront aucune donnée. Suite à vos retours sur Labs, nous avons intégré les fonctionnalités correspondantes dans l'X API v2. La documentation pertinente est accessible via les liens ci-dessous. Cliquez ici pour vous inscrire à l'accès v2 si ce n'est pas déjà fait..."
					},
					"indices": [
						250,
						273
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 4,
		"reply_count": 2,
		"retweet_count": 8,
		"favorite_count": 33,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/EEWN2Q9aXh",
				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					117,
					140
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"quoted_status_permalink": {
		"url": "https://t.co/JaxttUMmjX",
		"expanded": "https://x.com/XDevelopers/status/1327011423252144128",
		"display": "x.com/XDevelopers/sta…"
	},
	"is_quote_status": true,
	"extended_tweet": {
		"full_text": "Comme prévu, les endpoints Labs v2 référencés ci-dessous ont maintenant été supprimés. N'hésitez pas à nous faire savoir sur les forums si vous avez des questions ou besoin d'aide avec l'X API v2 ! https://t.co/JaxttUMmjX",
		"display_text_range": [
			0,
			166
		],
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/JaxttUMmjX",
				"expanded_url": "https://x.com/XDevelopers/status/1327011423252144128",
				"display_url": "x.com/XDevelopers/sta…",
				"indices": [
					167,
					190
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quote_count": 1,
	"reply_count": 4,
	"retweet_count": 7,
	"favorite_count": 29,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/ahQvTYaOcZ",
			"expanded_url": "https://x.com/i/web/status/1328399838128467969",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Retweet d’un Tweet avec citation

{
 	"created_at": "Thu Feb 06 17:26:44 +0000 2020",
 	"id": 1225470895902412800,
 	"id_str": "1225470895902412800",
 	"text": "RT @AureliaSpecker: 📣 Si vous avez aimé le tutoriel sur les trajets domicile-travail londoniens que j'ai écrit en novembre dernier, jetez un œil à la version refactorisée qui utilise…",
 	"source": "<a href=\"http://x.com/download/iphone\" rel=\"nofollow\">X pour iPhone</a>",
 	"truncated": false,
 	"in_reply_to_status_id": null,
 	"in_reply_to_status_id_str": null,
 	"in_reply_to_user_id": null,
 	"in_reply_to_user_id_str": null,
 	"in_reply_to_screen_name": null,
 	"user": {
 		"id": 2244994945,
 		"id_str": "2244994945",
 		"name": "X Dev",
 		"screen_name": "XDevelopers",
 		"location": "127.0.0.1",
 		"url": "https://developer.x.com/en/community",
 		"description": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
 		"translator_type": "regular",
 		"protected": false,
 		"verified": true,
 		"followers_count": 512292,
 		"friends_count": 2038,
 		"listed_count": 1666,
 		"favourites_count": 2147,
 		"statuses_count": 3634,
 		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
 		"utc_offset": null,
 		"time_zone": null,
 		"geo_enabled": true,
 		"lang": null,
 		"contributors_enabled": false,
 		"is_translator": false,
 		"profile_background_color": "FFFFFF",
 		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
 		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
 		"profile_background_tile": false,
 		"profile_link_color": "0084B4",
 		"profile_sidebar_border_color": "FFFFFF",
 		"profile_sidebar_fill_color": "DDEEF6",
 		"profile_text_color": "333333",
 		"profile_use_background_image": false,
 		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
 		"default_profile": false,
 		"default_profile_image": false,
 		"following": null,
 		"follow_request_sent": null,
 		"notifications": null
 	},
 	"geo": null,
 	"coordinates": null,
 	"place": null,
 	"contributors": null,
 	"retweeted_status": {
 		"created_at": "Tue Feb 04 15:01:25 +0000 2020",
 		"id": 1224709550214873000,
 		"id_str": "1224709550214873090",
 		"text": "📣 Si vous avez aimé le tutoriel sur les trajets domicile-travail londoniens que j'ai écrit en novembre dernier, jetez un œil à la version refactorisée qui u… https://t.co/cAepHunkFp",
 		"display_text_range": [
 			0,
 			140
 		],
 		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 		"truncated": true,
 		"in_reply_to_status_id": null,
 		"in_reply_to_status_id_str": null,
 		"in_reply_to_user_id": null,
 		"in_reply_to_user_id_str": null,
 		"in_reply_to_screen_name": null,
 		"user": {
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"name": "Aurelia Specker",
 			"screen_name": "AureliaSpecker",
 			"location": "London, UK",
 			"url": null,
 			"description": "devrel @TwitterUK • Suissesse à Londres • maman de plantes vertes • coiffeuse personnelle de @_dormrod",
 			"translator_type": "none",
 			"protected": false,
 			"verified": false,
 			"followers_count": 1032,
 			"friends_count": 1331,
 			"listed_count": 26,
 			"favourites_count": 4979,
 			"statuses_count": 854,
 			"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 			"utc_offset": null,
 			"time_zone": null,
 			"geo_enabled": true,
 			"lang": null,
 			"contributors_enabled": false,
 			"is_translator": false,
 			"profile_background_color": "8B542B",
 			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_tile": false,
 			"profile_link_color": "5E341C",
 			"profile_sidebar_border_color": "D9B17E",
 			"profile_sidebar_fill_color": "EADEAA",
 			"profile_text_color": "333333",
 			"profile_use_background_image": true,
 			"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 			"default_profile": false,
 			"default_profile_image": false,
 			"following": null,
 			"follow_request_sent": null,
 			"notifications": null
 		},
 		"geo": null,
 		"coordinates": null,
 		"place": null,
 		"contributors": null,
 		"quoted_status_id": 1195000047089389600,
 		"quoted_status_id_str": "1195000047089389573",
 		"quoted_status": {
 			"created_at": "Thu Nov 14 15:26:27 +0000 2019",
 			"id": 1195000047089389600,
 			"id_str": "1195000047089389573",
 			"text": "J'ai écrit un tutoriel sur comment obtenir des informations personnalisées sur les trajets domicile-travail avec l'X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
 			"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 			"truncated": true,
 			"in_reply_to_status_id": null,
 			"in_reply_to_status_id_str": null,
 			"in_reply_to_user_id": null,
 			"in_reply_to_user_id_str": null,
 			"in_reply_to_screen_name": null,
 			"user": {
 				"id": 1102321381,
 				"id_str": "1102321381",
 				"name": "Aurelia Specker",
 				"screen_name": "AureliaSpecker",
 				"location": "London, UK",
 				"url": null,
 				"description": "devrel @TwitterUK • Suissesse à Londres • maman de plantes vertes • coiffeuse personnelle de @_dormrod",
 				"translator_type": "none",
 				"protected": false,
 				"verified": false,
 				"followers_count": 1032,
 				"friends_count": 1331,
 				"listed_count": 26,
 				"favourites_count": 4979,
 				"statuses_count": 854,
 				"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 				"utc_offset": null,
 				"time_zone": null,
 				"geo_enabled": true,
 				"lang": null,
 				"contributors_enabled": false,
 				"is_translator": false,
 				"profile_background_color": "8B542B",
 				"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 				"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 				"profile_background_tile": false,
 				"profile_link_color": "5E341C",
 				"profile_sidebar_border_color": "D9B17E",
 				"profile_sidebar_fill_color": "EADEAA",
 				"profile_text_color": "333333",
 				"profile_use_background_image": true,
 				"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 				"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 				"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 				"default_profile": false,
 				"default_profile_image": false,
 				"following": null,
 				"follow_request_sent": null,
 				"notifications": null
 			},
 			"geo": null,
 			"coordinates": null,
 			"place": null,
 			"contributors": null,
 			"is_quote_status": false,
 			"extended_tweet": {
 				"full_text": "J'ai écrit un tutoriel sur comment obtenir des informations de trajet personnalisées en utilisant l'X API🚇\n\n#DEVcommunity #Pythontutorial \n\nJetez-y un œil ici 👇\nhttps://t.co/sOjXW4YhbN",
 				"display_text_range": [
 					0,
 					160
 				],
 				"entities": {
 					"hashtags": [{
 							"text": "DEVcommunity",
 							"indices": [
 								85,
 								98
 							]
 						},
 						{
 							"text": "Pythontutorial",
 							"indices": [
 								99,
 								114
 							]
 						}
 					],
 					"urls": [{
 						"url": "https://t.co/sOjXW4YhbN",
 						"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"display_url": "dev.to/twitterdev/usi…",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							137,
 							160
 						]
 					}],
 					"user_mentions": [],
 					"symbols": []
 				}
 			},
 			"quote_count": 4,
 			"reply_count": 5,
 			"retweet_count": 31,
 			"favorite_count": 123,
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/pL0qJ4vhtE",
 					"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 					"display_url": "x.com/i/web/status/1…",
 					"indices": [
 						116,
 						139
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			},
 			"favorited": false,
 			"retweeted": false,
 			"possibly_sensitive": false,
 			"filter_level": "low",
 			"lang": "en"
 		},
 		"quoted_status_permalink": {
 			"url": "https://t.co/dXrJYvn3hY",
 			"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 			"display": "x.com/AureliaSpecker…"
 		},
 		"is_quote_status": true,
 		"extended_tweet": {
 			"full_text": "📣 Si vous avez apprécié le tutoriel sur les trajets londoniens que j'ai écrit en novembre l'année dernière, consultez la version refactorisée qui utilise le nouvel endpoint de recherche de X 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDev @XAPI https://t.co/dXrJYvn3hY",
 			"display_text_range": [
 				0,
 				229
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							176,
 							189
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							190,
 							205
 						]
 					}
 				],
 				"urls": [{
 						"url": "https://t.co/87XIPZmZBJ",
 						"expanded_url": "https://bit.ly/2OrnrCC",
 						"display_url": "bit.ly/2OrnrCC",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/migrate-to-twitter-s-newly-released-labs-recent-search-endpoint-3npe",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							151,
 							174
 						]
 					},
 					{
 						"url": "https://t.co/dXrJYvn3hY",
 						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
 						"display_url": "x.com/AureliaSpecker…",
 						"indices": [
 							230,
 							253
 						]
 					}
 				],
 				"user_mentions": [{
 						"screen_name": "XDev",
 						"name": "X Dev",
 						"id": 2244994945,
 						"id_str": "2244994945",
 						"indices": [
 							206,
 							217
 						]
 					},
 					{
 						"screen_name": "XAPI",
 						"name": "X API",
 						"id": 6253282,
 						"id_str": "6253282",
 						"indices": [
 							218,
 							229
 						]
 					}
 				],
 				"symbols": []
 			}
 		},
 		"quote_count": 2,
 		"reply_count": 0,
 		"retweet_count": 12,
 		"favorite_count": 43,
 		"entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/cAepHunkFp",
 				"expanded_url": "https://x.com/i/web/status/1224709550214873090",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_id": 1195000047089389600,
 	"quoted_status_id_str": "1195000047089389573",
 	"quoted_status": {
 		"created_at": "Thu Nov 14 15:26:27 +0000 2019",
 		"id": 1195000047089389600,
 		"id_str": "1195000047089389573",
 		"text": "J'ai écrit un tutoriel sur comment obtenir des informations de trajet personnalisées en utilisant l'X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
 		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 		"truncated": true,
 		"in_reply_to_status_id": null,
 		"in_reply_to_status_id_str": null,
 		"in_reply_to_user_id": null,
 		"in_reply_to_user_id_str": null,
 		"in_reply_to_screen_name": null,
 		"user": {
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"name": "Aurelia Specker",
 			"screen_name": "AureliaSpecker",
 			"location": "Londres, Royaume-Uni",
 			"url": null,
 			"description": "devrel @TwitterUK • Suisse à Londres • mère de plantes d'intérieur • coiffeuse personnelle de @_dormrod",
 			"translator_type": "none",
 			"protected": false,
 			"verified": false,
 			"followers_count": 1032,
 			"friends_count": 1331,
 			"listed_count": 26,
 			"favourites_count": 4979,
 			"statuses_count": 854,
 			"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 			"utc_offset": null,
 			"time_zone": null,
 			"geo_enabled": true,
 			"lang": null,
 			"contributors_enabled": false,
 			"is_translator": false,
 			"profile_background_color": "8B542B",
 			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_tile": false,
 			"profile_link_color": "5E341C",
 			"profile_sidebar_border_color": "D9B17E",
 			"profile_sidebar_fill_color": "EADEAA",
 			"profile_text_color": "333333",
 			"profile_use_background_image": true,
 			"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 			"default_profile": false,
 			"default_profile_image": false,
 			"following": null,
 			"follow_request_sent": null,
 			"notifications": null
 		},
 		"geo": null,
 		"coordinates": null,
 		"place": null,
 		"contributors": null,
 		"is_quote_status": false,
 		"extended_tweet": {
			"full_text": "J'ai écrit un tutoriel sur comment obtenir des informations de trajet personnalisées en utilisant l'X API🚇\n\n#DEVcommunity #Pythontutorial \n\nJetez-y un œil ici 👇\nhttps://t.co/sOjXW4YhbN",
 			"display_text_range": [
 				0,
 				160
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/sOjXW4YhbN",
 					"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 					"display_url": "dev.to/twitterdev/usi…",
 					"unwound": {
 						"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"status": 200,
 						"title": null,
 						"description": null
 					},
 					"indices": [
 						137,
 						160
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			}
 		},
 		"quote_count": 4,
 		"reply_count": 5,
 		"retweet_count": 31,
 		"favorite_count": 123,
 		"entities": {
 			"hashtags": [{
 					"text": "DEVcommunity",
 					"indices": [
 						85,
 						98
 					]
 				},
 				{
 					"text": "Pythontutorial",
 					"indices": [
 						99,
 						114
 					]
 				}
 			],
 			"urls": [{
 				"url": "https://t.co/pL0qJ4vhtE",
 				"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					116,
 					139
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_permalink": {
 		"url": "https://t.co/dXrJYvn3hY",
 		"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 		"display": "x.com/AureliaSpecker…"
 	},
 	"is_quote_status": true,
 	"quote_count": 0,
 	"reply_count": 0,
 	"retweet_count": 0,
 	"favorite_count": 0,
 	"entities": {
 		"hashtags": [],
 		"urls": [],
 		"user_mentions": [{
 			"screen_name": "AureliaSpecker",
 			"name": "Aurelia Specker",
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"indices": [
 				3,
 				18
 			]
 		}],
 		"symbols": []
 	},
 	"favorited": false,
 	"retweeted": false,
 	"filter_level": "low",
 	"lang": "en",
 	"matching_rules": [{
 		"tag": null
 	}]
 }

Objets de données Activity Streams pour Enterprise

Vous souhaitez en savoir plus sur la façon dont le format de données Activity Streams correspond au format X API v2 ?
Consultez notre guide de comparaison : Activity Streams comparé à X API v2
Veuillez noter : il est fortement recommandé d’utiliser le format Enriched Native pour les API de données Enterprise. 
  • Le format Enriched Native inclut toutes les nouvelles metadata depuis 2017, telles que les metadata de sondage, ainsi que des métriques supplémentaires comme reply_count et quote_count.
  • Le format Activity Streams n’a pas été mis à jour avec de nouvelles metadata ou enrichissements depuis la mise à jour des caractères en 2017.

Objet Activity

Activity Streams est une traduction du schéma d’objet du format de données original de X, créée par Gnip pour « normaliser le format » des données de Post et d’autres données de réseaux sociaux à l’aide du schéma de base Activity décrit ici fourni par un tiers. Les Posts sont normalisés selon le schéma Activity Streams, notamment avec les types d’objets note, person, place et service en tant qu’objets imbriqués. Les Posts peuvent également contenir d’autres objets d’activité de Post imbriqués pour les Retweets, ou d’autres comme twitter_quoted_status, long_object. Le type d’objet de niveau de base « activity » est similaire au Post base level object du format enrichi natif. Des exemples de payloads au format Activity Streams sont disponibles ici.

Dictionnaire de données

Vous trouverez ci-dessous le dictionnaire de données pour ces attributs d’« activité » de niveau racine, ainsi que des liens vers les dictionnaires de données des objets enfants.
AttributTypeDescription
idstringUn IRI unique pour le Post. Plus précisément, “tag” est le schéma, “search.x.com” représente le domaine du schéma, et 2005 correspond à l’année de dérivation du schéma.
Lors du stockage des Posts, cet élément doit être utilisé comme identifiant unique ou clé primaire.
“id”: “tag:search.x.com,2005:1050118621198921728”
objectTypestringType d’objet, toujours défini à “activity”
“objectType”: “activity”
objectobjectUn objet représentant le Post en cours de publication ou de partage.
Pour les Retweets, cet élément contiendra une “activity” complète, avec les champs pertinents décrits dans ce schéma.
Pour les Posts originaux, cet élément contiendra un objet “note”, avec les champs décrits ici.
“object”:
“object”:
“objectType”: “note”,
“id”: “object:search.x.com,2005:1050118621198921728”,
“summary”: “To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm”,
“link”: “http://x.com/API/statuses/1050118621198921728”,
“postedTime”: “2018-10-10T20:19:24.000Z”
long_objectobjectUn objet représentant le corps de texte complet lorsque le texte du Post dépasse 140 caractères.


“long_object”:
“body”: “To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin tone modifiers 👍🏻👍🏽👍🏿. This is now reflected in Twitter-Text, our Open Source library. \n\nUsing Twitter-Text? See the forum post for detail: https://t.co/Nx1XZmRCXA”,
“display_text_range”: [
0,
277
],
“twitter_entities”:
“hashtags”: [],
“urls”: [

“url”: “https://t.co/Nx1XZmRCXA”,
“expanded_url”: “https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607”,
“display_url”: “devcommunity.com/t/new-update-t…”,
“indices”: [
254,
277
]

],
“user_mentions”: [],
“symbols”: []

display_text_rangearrayUtilisé lorsque le texte du Post dépasse 140 caractères.


“display_text_range”: [
0,
142
]
verbstringLe type d’action effectuée par l’utilisateur.
Posts : “post”
Retweets : “share”
Posts supprimés : “delete”
Le verbe constitue la méthode appropriée pour distinguer un Tweet d’un véritable Retweet. Cependant, ceci s’applique uniquement aux vrais retweets, et non aux Tweets modifiés ou cités, qui n’utilisent pas la fonctionnalité Retweet de X. Pour une description des verbes AS
cliquez ici.
Pour les suppressions, notez que seul un nombre limité de champs sera inclus, comme indiqué dans l’exemple de charge utile ci-dessous.
“verb”: “post”
postedTimedate (ISO 8601)L’heure à laquelle l’action s’est produite, par exemple l’heure de publication du Post.


“postedTime”: “2018-10-10T20:19:24.000Z”
generatorobjectUn objet représentant l’utilitaire utilisé pour publier le Post. Cet élément contiendra le nom (“displayName”) et un lien (“link”) pour l’application source générant le Post.
“generator”:
“displayName”: “X Web Client”,
“link”: “http://x.com
providerobjectUn objet JSON représentant le fournisseur de l’activité. Cet élément contiendra un objectType (“service”), le nom du fournisseur (“displayName”), et un lien vers le site web du fournisseur (“link”).
“provider”:

“objectType”: “service”,
“displayName”: “X”,
“link”: “http://www.x.com
linkstringUn lien permanent vers le Post.
“link”: “http://x.com/API/statuses/1050118621198921728
bodystringLe texte du Post.

Dans les Retweets, notez que X modifie la valeur du corps au niveau racine en ajoutant “RT @username” au début et en tronquant le texte original avec des points de suspension à la fin. Ainsi, pour les Retweets, votre application doit examiner object.body pour s’assurer qu’elle extrait le texte non modifié du Post original (qui est retweeté).
“body”: “With Cardiff, Crystal Palace, and Hull City joining the EPL from the Championship it will be a great relegation battle at the end.”
display_text_rangearrayDécrit la plage de caractères dans le texte du corps qui indique le Post affiché. Les Posts avec des @mentions en début commenceront à plus de 0 et les Posts avec des médias attachés ou qui dépassent 140 caractères indiqueront le display_text_range dans le long_object.

“display_text_range”: [
14,
42
]
ou
“long_object”:
“display_text_range”: [
0,
277
]…
actorobjectUn objet représentant l’utilisateur X qui a publié. L’objet Actor fait référence à un utilisateur X et contient toutes les métadonnées pertinentes relatives à cet utilisateur.
Voir
détails de l’objet actor
inReplyToobjectUn objet JSON faisant référence au Post auquel on répond, le cas échéant. Contient un lien vers le Post.
“inReplyTo”:

“link”: “http://x.com/GOP/statuses/349573991561838593
locationobjectUn objet JSON représentant le “Place” X où le Post a été créé. Il s’agit d’un objet transmis depuis la plateforme X.

Voir
objet location
twitter_entitiesobjectL’objet entities du format de données de X qui contient des listes d’URL, de mentions et de hashtags. Veuillez consulter la documentation de X sur les Entities ici. Notez que dans les Retweets, X peut tronquer les valeurs des entities qu’il extrait au niveau racine. Ainsi, pour les Retweets, votre App devrait examiner object.twitter_entities pour s’assurer que vous utilisez des valeurs non tronquées.

Voir les détails de l’objet twitter_entities
twitter_extended_entitiesobjectUn objet du format de données natif de X contenant “media”. Ceci sera présent pour tout Post où l’objet twitter_entities contient des données dans le champ “media”, et inclura plusieurs photos lorsqu’elles sont présentes dans le Post. Notez que c’est l’emplacement correct pour récupérer les informations média pour les Posts multi-photos.

Les photos multiples sont représentées par des objets JSON séparés par des virgules dans le tableau “media”.

Voir détails de l’objet twitter_extended_entities
gnipobjectUn objet ajouté à la charge utile d’activité pour indiquer les règles correspondantes, et ajouter des données enrichies basées sur les enrichissements actifs sur le stream ou le produit.

Voir détails de l’objet gnip
edit_historyObjectIdentifiants uniques indiquant toutes les versions d’un Post. Pour les Posts sans modifications, il y aura un ID. Pour les Posts avec un historique de modifications, il y aura plusieurs ID, classés par ordre croissant reflétant l’ordre des modifications, avec la version la plus récente en dernière position du tableau.

Les ID de Post peuvent être utilisés pour hydrater et visualiser les versions précédentes d’un Post.

Exemple :

edit_history” :
“initial_tweet_id” : “1283764123”
“edit_tweet_ids” : [“1283764123”, “1394263866”]
edit_controlsObjectLorsque présent, indique combien de temps un Post reste encore modifiable et le nombre de modifications restantes. Les Posts ne sont modifiables que pendant les 30 premières minutes après la création et peuvent être modifiés jusqu’à cinq fois.

Les ID de Post peuvent être utilisés pour hydrater et visualiser les versions précédentes d’un Post.

Exemple :

“edit_controls” :
“editable_until_ms” : 123
“edits_remaining” : 3
editableBooleanLorsque présent, indique si un Post était éligible à la modification lors de sa publication. Ce champ n’est pas dynamique et ne basculera pas de True à False lorsqu’un Post atteint sa limite de temps de modification, ou son nombre maximum de modifications. Les fonctionnalités de Post suivantes rendront ce champ false :

_ Le Post est promu
_ Le Post contient un sondage
_ Le Post est une réponse de fil non-personnel
_ Le Post est un Retweet (notez que les Quote Tweets sont éligibles à la modification)
_ Le Post est nullcast
_ Post de Communauté
_ Post Superfollow
_ Post Collaboratif

Attributs supplémentaires du Post

AttributTypeDescription
twitter_langstring
favoritesCountintNullable. Indique approximativement combien de fois ce Post a été like par des utilisateurs de X.

“favoritesCount”:298
retweetCountintNombre de fois où ce Post a été retweeté. Exemple :

“retweetCount”:153

Attributs obsolètes

ChampTypeDescription
geoobjetPosition ponctuelle où le Post a été créé.
twitter_filter_levelchaîneChamp obsolète conservé pour éviter toute rupture de compatibilité

Objets d’activité de Post imbriqués

Dans plusieurs cas, un Objet Post inclura d’autres Posts imbriqués. Si vous travaillez avec des objets imbriqués, la charge utile JSON contiendra alors plusieurs objets, et chaque Objet Post pourra contenir ses propres objets. L’objet au niveau racine contiendra des informations sur le type d’action effectuée, c’est‑à‑dire s’il s’agit d’un Retweet ou d’un Quote Tweet, et pourra également contenir un objet décrivant le Post « original » partagé. Les Posts étendus incluront un objet étendu imbriqué dépassant 140 caractères, utilisé pour éviter des changements incompatibles lors de la mise à jour de 2017. Chaque dictionnaire d’objets imbriqués est décrit ci‑dessous. Retweets Le format des streams d’activité pour les Retweets inclut un objet imbriqué avec le type “activity” et le verbe “note” pour représenter le Post original faisant l’objet d’un Retweet.
{
	"id": "tag:search.x.com,2005:222222222222",
	"objectType": "activity",
	"verb": "share",
	"body": "RT @TheOriginalTweeter: Café et art ☕️",
	"actor": {
		"displayName": "TheRetweeter"
	},
	"object": {
		"id": "tag:search.x.com,2005:11111111111",
		"objectType": "activity",
		"verb": "post",
		"body": "Café et art ☕️",
		"actor": {
			"displayName": "TheOriginalTweeter"
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:11111111111",
			"summary": "Café et art ☕️",
			"link": "http://x.com/originaltweeter/statuses/11111111111",
			"postedTime": "2020-12-04T11:00:01.000Z"
		},
		"twitter_entities": {},
		"twitter_extended_entities": {}
	},
	"twitter_entities": {},
	"twitter_extended_entities": {},
	"gnip": {}
}
Statut cité sur X Le format des streams d’activité intègre les Tweets cités { "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Quoting a Tweet: https://t.co/mxiFJ59FlB", "actor": { "displayName": "TheQuoter2" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111", "summary": "https://t.co/mxiFJ59FlB" }, "twitter_entities": {}, "twitter_extended_entities": {}, "gnip": {}, "twitter_quoted_status": { "id": "tag:search.x.com,2005:111111111", "objectType": "activity", "verb": "post", "body": "console.log('Happy birthday, JavaScript!');", "actor": { "displayName": "TheOriginalTweeter" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111" }, "twitter_entities": {} } } Retweet d’un Tweet cité :
    {
    	"id": "tag:search.x.com,2005:1293612267087384577",
    	"objectType": "activity",
    	"verb": "share",
    	"postedTime": "2020-08-12T18:16:13.000Z",
    	"generator": {},
    	"provider": {},
    	"link": "http://x.com/XDevelopers/statuses/1293612267087384577",
    	"body": "RT @compston: Tellement hâte de rendre ce premier ensemble d'endpoints disponible - beaucoup d'autres à venir avant d'avoir terminé. L'équipe @XDevelopers #DevRel…",
    	"actor": {},
    	"object": {},
    	"favoritesCount": 0,
    	"twitter_entities": {},
    	"twitter_lang": "en",
    	"retweetCount": 13,
    	"gnip": {},
    	"twitter_filter_level": "low",
    	"twitter_quoted_status": {}
    }

Objet long

Format activity streams de extended_tweet
{
  "id": "tag:search.x.com,2005:1050118621198921728",
  "objectType": "activity",
  "verb": "post",
  "postedTime": "2018-10-10T20:19:24.000Z",
  "generator": {
    "displayName": "Client Web X",
    "link": "http://x.com"
  },
  "provider": {
    "objectType": "service",
    "displayName": "X",
    "link": "http://www.x.com"
  },
  "link": "http://x.com/API/statuses/1050118621198921728",
  "body": "Pour laisser plus de place à l'expression, nous compterons désormais tous les emojis de manière égale—y compris ceux avec le genre‍‍‍ ‍‍et le teint… https://t.co/MkGjXf9aXm",
  "long_object": {
    "body": "Pour laisser plus de place à l'expression, nous compterons désormais tous les emojis de manière égale—y compris ceux avec le genre‍‍‍ ‍‍et les modificateurs de teint 👍🏻👍🏽👍🏿. Ceci est maintenant pris en compte dans Twitter-Text, notre bibliothèque Open Source. \n\nVous utilisez Twitter-Text ? Consultez le message du forum pour plus de détails : https://t.co/Nx1XZmRCXA",
    "display_text_range": [
      0,
      277
    ],
    "twitter_entities": {voir l'objet twitter_entities},
  "actor": {voir l'objet actor},
  "object": {
    "objectType": "note",
    "id": "object:search.x.com,2005:1050118621198921728",
    "summary": "Pour laisser plus de place à l'expression, nous compterons désormais tous les emojis de manière égale—y compris ceux avec le genre‍‍‍ ‍‍et le teint… https://t.co/MkGjXf9aXm",
    "link": "http://x.com/API/statuses/1050118621198921728",
    "postedTime": "2018-10-10T20:19:24.000Z"
  },
  "favoritesCount": 298,
  "twitter_entities": {voir l'objet twitter_entities},
  "twitter_lang": "en",
  "retweetCount": 153,
  "gnip": {voir l'objet gnip},
  "twitter_filter_level": "low"
}

Objet actor

L’objet actor contient les metadata du compte Utilisateur X qui décrivent l’Utilisateur X ayant créé l’activité.

Dictionnaire de données

AttributTypeDescription
objectTypestring”objectType”: “person”
idstringLa représentation sous forme de chaîne de l’identifiant unique de cet auteur. Exemple :

“id:x.com:2244994945”
linkhttp://www.x.com/XDeveloeprs
displayNameStringLe nom de l’utilisateur tel qu’il l’a défini. Pas nécessairement un nom de personne. Généralement limité à 50 caractères, mais susceptible d’évoluer. Exemple :

“displayName”: “XDevelopers”
preferredUsernamestringLe nom d’écran, identifiant ou alias avec lequel cet utilisateur s’identifie. Unique mais susceptible de changer. Utilisez id comme identifiant d’utilisateur lorsque possible. Généralement limité à 15 caractères, mais certains comptes historiques peuvent avoir des noms plus longs. Exemple :

“preferredUsername”: “XDevelopers”
locationobject**        “location”:

“objectType”:** “place”,

“displayName”: “127.0.0.1”

**        }**
linksarrayNullable. Une URL fournie par l’utilisateur et associée à son profil. Exemple :

**       “links”: [

          {

“href”:** “https://developer.x.com/en/community,

“rel”: “me”

**          }

        ]**
summarystringNullable. Chaîne UTF‑8 définie par l’utilisateur décrivant son compte. Exemple :

“summary”: “The voice of the #XDevelopers team…“
protectedBooleanLorsque true, indique que cet utilisateur a choisi de protéger ses Posts. Voir About Public and Protected Posts. Exemple :

“protected”: true
verifiedBooleanLorsque true, indique que l’utilisateur a un compte vérifié. Voir Verified Accounts. Exemple :

“verified”: false
followersCountIntLe nombre d’abonnés que ce compte a actuellement. Dans certaines conditions de forte contrainte, ce champ indiquera temporairement « 0 ». Exemple :

“followers_count”: 21
friendsCountIntLe nombre d’utilisateurs suivis par ce compte (également appelés « followings »). Dans certaines conditions de forte contrainte, ce champ indiquera temporairement « 0 ». Exemple :

“friends_count”: 32
listedCountIntLe nombre de Listes publiques dont cet utilisateur est membre. Exemple :

“listed_count”: 9274
favoritesCountIntLe nombre de Posts que cet utilisateur a indiqués comme like sur toute la durée de vie du compte. Orthographe britannique utilisée dans le nom du champ pour des raisons historiques. Exemple :

“favourites_count”: 13
statusesCountIntLe nombre de Posts (y compris les Retweets) publiés par l’utilisateur. Exemple :

“statuses_count”: 42
postedTimedateLa date et l’heure UTC de création du compte utilisateur sur X. Exemple :

“postedTime”: “2013-12-14T04:35:55.036Z”
imagestringUne URL HTTPS pointant vers l’image de profil de l’utilisateur. Exemple :

“image”:https://pbs.twimg.com/profile&#95;images/1283786620521652229/lEODkLTh&#95;normal.jpg

Attributs obsolètes (dépréciés)

ChampTypeDescription
utcOffsetnullLa valeur sera définie à null. Toujours disponible via GET account/settings
twitterTimeZonenullLa valeur sera définie à null. Toujours disponible via GET account/settings en tant que tzinfo_name
languagesnullLa valeur sera définie à null. Toujours disponible via GET account/settings en tant que language

Exemples :

			"actor": {
        "objectType": "person",
        "id": "id:twitter.com:2244994945",
        "link": "http://www.x.com/XDevelopers",
        "displayName": "X Dev",
        "postedTime": "2013-12-14T04:35:55.036Z",
        "image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
        "summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements relatifs à l'#XAPI.",
        "friendsCount": 2039,
        "followersCount": 512197,
        "listedCount": 1662,
        "statusesCount": 3632,
        "twitterTimeZone": null,
        "verified": true,
        "utcOffset": null,
        "preferredUsername": "XDevelopers",
        "languages": [],
        "links": [
          {
            "href": "https://developer.x.com/en/community",
            "rel": "me"
          }
        ],
        "location": {
          "objectType": "place",
          "displayName": "127.0.0.1"
        },
        "favoritesCount": 2147
      }
"actor": {
    "objectType": "person",
    "id": "id:twitter.com:6253282",
    "link": "http://www.x.com/API",
    "displayName": "X API",
    "postedTime": "2007-05-23T06:01:13.000Z",
    "image": "https://pbs.twimg.com/profile_images/942858479592554497/BbazLO9L_normal.jpg",
    "summary": "Tweets sur les changements et les problèmes de service. Suivez @XDevelopers pour en savoir plus.",
    "friendsCount": 39,
    "followersCount": 6054164,
    "listedCount": 12285,
    "statusesCount": 3689,
    "twitterTimeZone": null,
    "verified": true,
    "utcOffset": null,
    "preferredUsername": "API",
    "languages": [

    ],
    "links": [
      {
        "href": "https://developer.x.com",
        "rel": "me"
      }
    ],
    "favoritesCount": 4
  }

Objet Location

Les objets Location peuvent exister dans l’objet actor défini au niveau du compte X ou dans l’objet profileLocations de l’objet gnip. Les objets Location ont un type d’objet place et peuvent comporter un nom, une adresse ou des coordonnées géographiques. Les objets Location sont similaires à Geo au format enrichi natif.

Dictionnaire des données de localisation

ChampTypeDescription
objectTypestringVoir ici pour des informations plus détaillées. Exemple :

“objectType”: “place”
displayNamestringNom complet de l’emplacement.

****“displayName”:
“United States”
namestringNom de l’emplacement selon le format JSON des lieux de X.
linkstringLien vers la représentation JSON complète du lieu sur X.

“link”:https://api.x.com/1.1/geo/id/27c45d804c777999.json
geoobjectObjet des coordonnées géographiques provenant de X, soit un polygone, soit un point.

Voir geo
countryCodeStringCode pays abrégé représentant le pays dans lequel se trouve ce lieu. Exemple :

“countryCode”: “US”
countryStringNom du pays dans lequel se trouve ce lieu. Exemple :

“country”: “United States”

objets dérivés de profileLocations

ChampTypeDescription
addressobjectDans l’objet location de profileLocation au sein de l’objet gnip. Adresse de l’emplacement obtenue via l’enrichissement géographique du profil. Le niveau de granularité peut varier.

“address”: {

**          “country”: “United States”,

          “countryCode”: “US”,

          “locality”: “Providence”,

          “region”: “Rhode Island”,

          “subRegion”: “Providence County”

        }**
geoobjectDans l’objet location de profileLocation au sein de l’objet gnip. Coordonnées du centroïde de l’emplacement obtenues via l’enrichissement géographique du profil.

”geo”: {

**          “coordinates”: [

-98.5
,

39.76

          ],

          “type”: “point”

        }**
Exemples
	"location": {
    "objectType": "place",
    "displayName": "Kansas, États-Unis",
    "name": "Kansas",
    "country_code": "États-Unis",
    "twitter_country_code": "US",
    "twitter_place_type": "admin",
    "link": "https://api.x.com/1.1/geo/id/27c45d804c777999.json",
    "geo": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -102.051769,
            36.99311
          ],
          [
            -102.051769,
            40.003282
          ],
          [
            -94.588081,
            40.003282
          ],
          [
            -94.588081,
            36.99311
          ]
        ]
      ]
    }
    "location": {
      "objectType": "place",
      "displayName": "Californie, États-Unis"
    }

Objet entities de X

Pour le format Activity Streams, le champ twitter_entities utilise le même format et le même dictionnaire de données que ceux du format enrichi natif décrits dans l’objet entities ici.

Exemple :

"twitter_entities": {
	"hashtags": [{
		"text": "API",
		"indices": [
			228,
			239
		]
	}],
	"urls": [{
		"url": "https://t.co/r6z6CI7kEy",
		"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
		"display_url": "devcommunity.com/t/retiring-lab…",
		"indices": [
			250,
			273
		]
	}],
	"user_mentions": [],
	"symbols": []
}

Objet X extended entities

Pour le format Activity streams, le champ twitter_extended_entities utilise le même format et le même dictionnaire de données que ceux présentés dans le format enrichi natif extended_entities object here.

Exemple :

"twitter_extended_entities":{
	"media": [{
		"id": 1293565706408038400,
		"id_str": "1293565706408038401",
		"indices": [
			219,
			242
		],
		"additional_media_info": {
			"monetizable": false
		},
		"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
		"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
		"url": "https://t.co/KaFSbjWUA8",
		"display_url": "pic.x.com/KaFSbjWUA8",
		"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
		"type": "video",
		"video_info": {
			"aspect_ratio": [
				16,
				9
			],
			"duration_millis": 34875,
			"variants": [{
					"bitrate": 256000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
				},
				{
					"bitrate": 832000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
				},
				{
					"content_type": "application/x-mpegURL",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
				},
				{
					"bitrate": 2176000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
				}
			]
		},
		"sizes": {
			"thumb": {
				"w": 150,
				"h": 150,
				"resize": "crop"
			},
			"medium": {
				"w": 1200,
				"h": 675,
				"resize": "fit"
			},
			"small": {
				"w": 680,
				"h": 383,
				"resize": "fit"
			},
			"large": {
				"w": 1280,
				"h": 720,
				"resize": "fit"
			}
		}
	}]
}

Objet Gnip

L’objet gnip, dans le format Activity Streams, contient les métadonnées ajoutées par les enrichissements actifs, ainsi qu’une indication des règles de correspondance appliquées à l’activité.

Dictionnaire de données

ChampTypeDescription
matching_rulesarrayContient un tableau d’objets de règles de correspondance indiquant la règle correspondant à l’activité.
“matching_rules”: [

**      {

        “tag”: null,

“id”:** 1026514022567358500**,

“id_str”:** “1026514022567358464”

**      }

    ]**
urlsarrayContient un tableau des liens présents dans l’activité, ainsi que les métadonnées d’URL développée pour l’enrichissement de déroulage d’URL.

**    “urls”: [

      {

“url”:** “https://t.co/tGQqNxxyhU,

“expanded_url”:https://www.youtube.com/channel/UCwUxW2CV2p5mzjMBqvqLzJA,

“expanded_status”: 200**,

“expanded_url_title”:** “Birdys Daughter”,

“expanded_url_description”: “Premium, single-origin, handpicked Jamaica Blue Mountain Coffee”

**      }

    ]**
profileLocationsarray of location objectsContient l’objet d’emplacement dérivé de l’enrichissement Profile Geo.

**    “profileLocations”: [

      {

        “address”: {

“country”:** “Canada”,

“countryCode”: “CA”,

“locality”: “Toronto”,

“region”: “Ontario”

**        },

“displayName”:** “Toronto, Ontario, Canada”,

**        “geo”: {

          “coordinates”: [

-79.4163
,

43.70011

          ],

“type”:** “point”

**        },

“objectType”:** “place”

**      }

    ]

  }**

Exemple :

	"gnip": {
    "matching_rules": [
      {
        "tag": null
      }
    ],
    "urls": [
      {
        "url": "https://t.co/Nx1XZmRCXA",
        "expanded_url": "https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607",
        "expanded_status": 200,
        "expanded_url_title": null,
        "expanded_url_description": null
      }
    ]
  }

Exemples de charges utiles des streams d’activité

Activité de Post
{
	"id": "tag:search.x.com,2005:1307025659294674945",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-09-18T18:36:15.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1307025659294674945",
	"body": "Voici un article qui présente les mises à jour du nouveau payload Tweet v2 https://t.co/oeF3ZHeKQQ",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1307025659294674945",
		"summary": "Voici un article qui présente les mises à jour du nouveau payload Tweet v2 https://t.co/oeF3ZHeKQQ",
		"link": "http://x.com/XDevelopers/statuses/1307025659294674945",
		"postedTime": "2020-09-18T18:36:15.000Z"
	},
	"inReplyTo": {
		"link": "http://x.com/XDevelopers/statuses/1304102743196356610"
	},
	"favoritesCount": 70,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"display_url": "dev.to/twitterdev/und…",
			"indices": [
				74,
				97
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 11,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"expanded_status": 200,
			"expanded_url_title": "Comprendre le nouveau payload Tweet dans l'X API v2",
			"expanded_url_description": "X a récemment annoncé la nouvelle X API v2, reconstruite de A à Z pour offrir de nouvelles fonctionnalités..."
		}]
	},
	"twitter_filter_level": "low"
}
Activité des Posts de réponse
{
	"id": "tag:search.x.com,2005:1296887316556980230",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-21T19:10:05.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
	"body": "Découvrez comment @PennMedCDH utilise les données X pour comprendre la crise sanitaire du COVID-19 📊\n\nhttps://t.co/1tdA8uDWes",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#API.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296887316556980230",
		"summary": "Découvrez comment @PennMedCDH utilise les données X pour comprendre la crise sanitaire du COVID-19 📊\n\nhttps://t.co/1tdA8uDWes",
		"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
		"postedTime": "2020-08-21T19:10:05.000Z"
	},
	"inReplyTo": {
		"link": "http://x.com/XDevelopers/statuses/1296887091901718529"
	},
	"favoritesCount": 26,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 9,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"expanded_status": 200,
			"expanded_url_title": "Penn Medicine Center for Digital Health",
			"expanded_url_description": "Le Penn Med Center for Digital Health a créé une carte X du COVID-19 qui comprend des graphiques détaillant les sentiments, les symptômes signalés, les données par état et les données frontalières sur l'épidémie de COVID-19. De plus, leur initiative Penn Med With You utilise des informations régionales agrégées de X pour alimenter leur site web et leur service de messagerie texte. Le service utilise ces informations pour diffuser des ressources pertinentes et actuelles."
		}]
	},
	"twitter_filter_level": "low"
}
Activité de Post avec long_object
{
	"id": "tag:search.x.com,2005:1296121314218897408",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-19T16:26:16.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1296121314218897408",
	"body": "L'endpoint pour masquer les réponses est lancé aujourd'hui ! \n\nLes développeurs peuvent masquer les réponses aux Tweets - un moyen essentiel pour les développeurs de… https://t.co/VyfXs1RTXn",
	"long_object": {
		"body": "L'endpoint pour masquer les réponses est lancé aujourd'hui ! \n\nLes développeurs peuvent masquer les réponses aux Tweets - un moyen essentiel pour les développeurs d'améliorer la qualité de la conversation publique en utilisant l'#XAPI.\n\nhttps://t.co/khXhTurm9x",
		"display_text_range": [
			0,
			215
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					178,
					189
				]
			}],
			"urls": [{
				"url": "https://t.co/khXhTurm9x",
				"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
				"display_url": "devcommunity.com/t/hide-replies…",
				"indices": [
					192,
					215
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296121314218897408",
		"summary": "L'endpoint pour masquer les réponses est lancé aujourd'hui ! \n\nLes développeurs peuvent masquer les réponses aux Tweets - un moyen essentiel pour les développeurs de… https://t.co/VyfXs1RTXn",
		"link": "http://x.com/XDevelopers/statuses/1296121314218897408",
		"postedTime": "2020-08-19T16:26:16.000Z"
	},
	"favoritesCount": 172,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/VyfXs1RTXn",
			"expanded_url": "https://x.com/i/web/status/1296121314218897408",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 54,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/khXhTurm9x",
			"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
			"expanded_status": 200,
			"expanded_url_title": "Masquer les réponses désormais disponible dans la nouvelle X API",
			"expanded_url_description": "Aujourd'hui, nous sommes heureux d'annoncer la disponibilité générale de l'endpoint pour masquer les réponses dans la nouvelle X API. L'endpoint pour masquer les réponses vous permet de créer des outils qui aident les utilisateurs à masquer ou révéler les réponses à leurs Tweets. Les utilisateurs gèrent leurs réponses pour de nombreuses raisons, notamment pour accorder moins d'attention aux commentaires abusifs, perturbateurs, trompeurs, ou pour rendre les conversations plus engageantes. Grâce à cet endpoint, vous pouvez créer des outils pour aider les utilisateurs sur X à masquer ou révéler les réponses plus rapidement et plus..."
		}]
	},
	"twitter_filter_level": "low"
}
Activité des Posts avec twitter_extended_entities
{
	"id": "tag:search.x.com,2005:1293593516040269825",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-12T17:01:42.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
	"body": "C'est enfin là ! 🥁 Découvrez la nouvelle #XAPI.\n\nNous reconstruisons la X API v2 de zéro pour m… https://t.co/UeCndQGMjx",
	"long_object": {
		"body": "C'est enfin là ! 🥁 Découvrez la nouvelle #XAPI.\n\nNous reconstruisons la X API v2 de zéro pour mieux servir notre communauté de développeurs. Et le lancement d'aujourd'hui n'est que le commencement.\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"twitter_extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"display_text_range": [
		0,
		140
	],
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements relatifs à la #TwitterAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1293593516040269825",
		"summary": "C'est enfin arrivé ! 🥁 Découvrez la nouvelle #API.\n\nNous reconstruisons la X API v2 de zéro pour d… https://t.co/UeCndQGMjx",
		"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
		"postedTime": "2020-08-12T17:01:42.000Z"
	},
	"favoritesCount": 2844,
	"twitter_entities": {
		"hashtags": [{
			"text": "API",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 958,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/32VrwpGaJw",
			"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
			"expanded_status": 200,
			"expanded_url_title": "Présentation de la nouvelle X API améliorée",
			"expanded_url_description": "Présentation de la nouvelle X API - reconstruite de zéro pour offrir de nouvelles fonctionnalités plus rapidement afin que les développeurs puissent aider le monde à se connecter à la conversation publique qui se déroule sur X."
		}]
	},
	"twitter_filter_level": "low"
}
Activité des Retweets
{
	"id": "tag:search.x.com,2005:1229851574555508737",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-18T19:33:59.000Z",
	"generator": {
		"displayName": "Application Web X",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1229851574555508737",
	"body": "RT @suhemparack: J'ai créé une Skill Alexa pour X utilisant APL qui vous permet de consulter les Tweets et Tendances sur l'Echo Show !\n\nDécouvrez-la ici…",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"id": "tag:search.x.com,2005:1229843515603144704",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2020-02-18T19:01:58.000Z",
		"generator": {
			"displayName": "Application Web X",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/suhemparack/statuses/1229843515603144704",
		"body": "J'ai créé une Skill Alexa pour X utilisant APL qui vous permet de consulter les Tweets et Tendances sur l'Echo Show !\n\nDécouvrez-la… https://t.co/RP9NgltX7i",
		"long_object": {
			"body": "J'ai créé une Skill Alexa pour X utilisant APL qui vous permet de consulter les Tweets et Tendances sur l'Echo Show !\n\nDécouvrez-la ici 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"twitter_entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/XDevelopers/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:857699969263964161",
			"link": "http://www.x.com/suhemparack",
			"displayName": "Suhem Parack",
			"postedTime": "2017-04-27T20:56:22.883Z",
			"image": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"summary": "Relations Développeurs pour la Recherche Académique @X. Parlons recherche avec les données X. Précédemment : Amazon Alexa. Les opinions exprimées sont les miennes",
			"friendsCount": 501,
			"followersCount": 732,
			"listedCount": 12,
			"statusesCount": 458,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "suhemparack",
			"languages": [],
			"links": [{
				"href": "https://developer.x.com",
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "Seattle, WA"
			},
			"favoritesCount": 358
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1229843515603144704",
			"summary": "J'ai créé une Skill Alexa pour X utilisant APL qui vous permet de consulter les Tweets et Tendances sur l'Echo Show !\n\nDécouvrez-la… https://t.co/RP9NgltX7i",
			"link": "http://x.com/suhemparack/statuses/1229843515603144704",
			"postedTime": "2020-02-18T19:01:58.000Z"
		},
		"favoritesCount": 71,
		"twitter_entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	},
	"favoritesCount": 0,
	"twitter_entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 19,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/l5J8wq748G",
			"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
			"expanded_status": 200,
			"expanded_url_title": null,
			"expanded_url_description": null
		}]
	},
	"twitter_filter_level": "low"
}
Activité des Tweets cités
{
 	"id": "tag:search.x.com,2005:1328399838128467969",
 	"objectType": "activity",
 	"verb": "post",
 	"postedTime": "2020-11-16T18:09:36.000Z",
 	"generator": {
 		"displayName": "X Web App",
 		"link": "https://mobile.x.com"
 	},
 	"provider": {
 		"objectType": "service",
 		"displayName": "X",
 		"link": "http://www.x.com"
 	},
 	"link": "http://x.com/XDevelopers/statuses/1328399838128467969",
 	"body": "Comme prévu, les endpoints Labs v2 référencés ci-dessous ont maintenant été supprimés. Veuillez nous faire savoir sur les forums si vous a… https://t.co/ahQvTYaOcZ",
 	"long_object": {
 		"body": "Comme prévu, les endpoints Labs v2 référencés ci-dessous ont maintenant été supprimés. Veuillez nous faire savoir sur les forums si vous avez des questions ou besoin d'aide avec l'X API v2 ! https://t.co/JaxttUMmjX",
 		"display_text_range": [
 			0,
 			166
 		],
 		"twitter_entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/JaxttUMmjX",
 				"expanded_url": "https://x.com/XDevelopers/status/1327011423252144128",
 				"display_url": "x.com/XDevelopers/sta…",
 				"indices": [
 					167,
 					190
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		}
 	},
 	"display_text_range": [
 		0,
 		140
 	],
 	"actor": {
 		"objectType": "person",
 		"id": "id:twitter.com:2244994945",
 		"link": "http://www.x.com/XDevelopers",
 		"displayName": "X Dev",
 		"postedTime": "2013-12-14T04:35:55.036Z",
 		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
 		"friendsCount": 2038,
 		"followersCount": 512292,
 		"listedCount": 1666,
 		"statusesCount": 3634,
 		"twitterTimeZone": null,
 		"verified": true,
 		"utcOffset": null,
 		"preferredUsername": "XDevelopers",
 		"languages": [],
 		"links": [{
 			"href": "https://developer.x.com/en/community",
 			"rel": "me"
 		}],
 		"location": {
 			"objectType": "place",
 			"displayName": "127.0.0.1"
 		},
 		"favoritesCount": 2147
 	},
 	"object": {
 		"objectType": "note",
 		"id": "object:search.x.com,2005:1328399838128467969",
 		"summary": "Comme prévu, les endpoints Labs v2 référencés ci-dessous ont maintenant été supprimés. Veuillez nous faire savoir sur les forums si vous a… https://t.co/ahQvTYaOcZ",
 		"link": "http://x.com/XDevelopers/statuses/1328399838128467969",
 		"postedTime": "2020-11-16T18:09:36.000Z"
 	},
 	"favoritesCount": 29,
 	"twitter_entities": {
 		"hashtags": [],
 		"urls": [{
 			"url": "https://t.co/ahQvTYaOcZ",
 			"expanded_url": "https://x.com/i/web/status/1328399838128467969",
 			"display_url": "x.com/i/web/status/1…",
 			"indices": [
 				117,
 				140
 			]
 		}],
 		"user_mentions": [],
 		"symbols": []
 	},
 	"twitter_lang": "en",
 	"retweetCount": 7,
 	"gnip": {
 		"matching_rules": [{
 			"tag": null
 		}],
 		"urls": [{
 			"url": "https://t.co/r6z6CI7kEy",
 			"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
 			"expanded_status": 200,
 			"expanded_url_title": "Suppression des endpoints Labs v2 de recherche récente et de masquage des réponses",
 			"expanded_url_description": "Comme nous l'avons annoncé dans nos communications sur l'Accès Anticipé et le masquage des réponses, les endpoints X Developer Labs v2 suivants seront supprimés le 16 novembre. Labs v2 recherche récente Labs v2 masquage des réponses Si appelés, ces endpoints répondront avec un statut HTTP 410 et ne retourneront aucune donnée. Suite à vos retours sur Labs, nous avons intégré la fonctionnalité correspondante dans l'X API v2. La documentation pertinente peut être consultée via les liens ci-dessous. Cliquez ici pour vous inscrire à l'accès v2 si vous ne l'avez pas encore fait..."
 		}]
 	},
 	"twitter_filter_level": "low",
 	"twitter_quoted_status": {
 		"id": "tag:search.x.com,2005:1327011423252144128",
 		"objectType": "activity",
 		"verb": "post",
 		"postedTime": "2020-11-12T22:12:32.000Z",
 		"generator": {
 			"displayName": "X Web App",
 			"link": "https://mobile.x.com"
 		},
 		"provider": {
 			"objectType": "service",
 			"displayName": "X",
 			"link": "http://www.x.com"
 		},
 		"link": "http://x.com/XDevelopers/statuses/1327011423252144128",
 		"body": "👋 Rappel amical que X Developer Labs v2 masquage des réponses et recherche récente seront supprimés lundi prochain, nove… https://t.co/EEWN2Q9aXh",
 		"long_object": {
 			"body": "👋 Rappel amical que X Developer Labs v2 masquage des réponses et recherche récente seront supprimés lundi prochain, 16 novembre ! Nous vous encourageons à migrer vers les nouveaux endpoints de masquage des réponses et de recherche récente maintenant disponibles dans l'#XAPI v2. Détails : https://t.co/r6z6CI7kEy",
 			"display_text_range": [
 				0,
 				273
 			],
 			"twitter_entities": {
 				"hashtags": [{
 					"text": "API",
 					"indices": [
 						228,
 						239
 					]
 				}],
 				"urls": [{
 					"url": "https://t.co/r6z6CI7kEy",
 					"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
 					"display_url": "devcommunity.com/t/retiring-lab…",
 					"indices": [
 						250,
 						273
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			}
 		},
 		"actor": {
 			"objectType": "person",
 			"id": "id:twitter.com:2244994945",
 			"link": "http://www.x.com/XDevelopers",
 			"displayName": "X Dev",
 			"postedTime": "2013-12-14T04:35:55.036Z",
 			"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 			"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
 			"friendsCount": 2038,
 			"followersCount": 512292,
 			"listedCount": 1666,
 			"statusesCount": 3634,
 			"twitterTimeZone": null,
 			"verified": true,
 			"utcOffset": null,
 			"preferredUsername": "XDevelopers",
 			"languages": [],
 			"links": [{
 				"href": "https://developer.x.com/en/community",
 				"rel": "me"
 			}],
 			"location": {
 				"objectType": "place",
 				"displayName": "127.0.0.1"
 			},
 			"favoritesCount": 2147
 		},
 		"object": {
 			"objectType": "note",
 			"id": "object:search.x.com,2005:1327011423252144128",
 			"summary": "👋 Rappel amical que X Developer Labs v2 masquage des réponses et recherche récente seront supprimés lundi prochain, nove… https://t.co/EEWN2Q9aXh",
 			"link": "http://x.com/XDevelopers/statuses/1327011423252144128",
 			"postedTime": "2020-11-12T22:12:32.000Z"
 		},
 		"favoritesCount": 33,
 		"twitter_entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/EEWN2Q9aXh",
 				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"twitter_lang": "en",
 		"twitter_filter_level": "low"
 	}
 }
Activité de Retweet et de Tweet cité
{
	"id": "tag:search.x.com,2005:1225470895902412800",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-06T17:26:44.000Z",
	"generator": {
		"displayName": "X pour iPhone",
		"link": "http://x.com/download/iphone"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1225470895902412800",
	"body": "RT @AureliaSpecker: 📣 Si vous avez aimé le tutoriel sur les trajets Londres que j'ai écrit en novembre dernier, découvrez la version refactorisée qui utilise…",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "La voix de l'équipe #XDevelopers et votre source officielle pour les mises à jour, actualités et événements liés à l'#XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"id": "tag:search.x.com,2005:1224709550214873090",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2020-02-04T15:01:25.000Z",
		"generator": {
			"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1224709550214873090",
		"body": "📣 Si vous avez aimé le tutoriel sur les trajets Londres que j'ai écrit en novembre dernier, découvrez la version refactorisée qui u… https://t.co/cAepHunkFp",
		"long_object": {
			"body": "📣 Si vous avez aimé le tutoriel sur les trajets Londres que j'ai écrit en novembre dernier, découvrez la version refactorisée qui utilise le nouvel endpoint de recherche de X 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDevelopers @API https://t.co/dXrJYvn3hY",
			"display_text_range": [
				0,
				229
			],
			"twitter_entities": {
				"hashtags": [{
						"text": "DEVcommunity",
						"indices": [
							176,
							189
						]
					},
					{
						"text": "Pythontutorial",
						"indices": [
							190,
							205
						]
					}
				],
				"urls": [{
						"url": "https://t.co/87XIPZmZBJ",
						"expanded_url": "https://bit.ly/2OrnrCC",
						"display_url": "bit.ly/2OrnrCC",
						"indices": [
							151,
							174
						]
					},
					{
						"url": "https://t.co/dXrJYvn3hY",
						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
						"display_url": "x.com/AureliaSpecker…",
						"indices": [
							230,
							253
						]
					}
				],
				"user_mentions": [{
						"screen_name": "XDevelopers",
						"name": "X Dev",
						"id": 2244994945,
						"id_str": "2244994945",
						"indices": [
							206,
							217
						]
					},
					{
						"screen_name": "API",
						"name": "X API",
						"id": 6253282,
						"id_str": "6253282",
						"indices": [
							218,
							229
						]
					}
				],
				"symbols": []
			}
		},
		"display_text_range": [
			0,
			140
		],
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:1102321381",
			"link": "http://www.x.com/AureliaSpecker",
			"displayName": "Aurelia Specker",
			"postedTime": "2013-01-18T23:45:43.000Z",
			"image": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
			"summary": "devrel @TwitterUK • Suisse à Londres • maman de plantes vertes • coiffeuse personnelle de @_dormrod",
			"friendsCount": 1331,
			"followersCount": 1032,
			"listedCount": 26,
			"statusesCount": 854,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "AureliaSpecker",
			"languages": [],
			"links": [{
				"href": null,
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
			"displayName": "Londres, Royaume-Uni"
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1224709550214873090",
			"summary": "📣 Si vous avez aimé le tutoriel sur les trajets Londres que j'ai écrit en novembre dernier, découvrez la version refactorisée qui u… https://t.co/cAepHunkFp",
			"link": "http://x.com/AureliaSpecker/statuses/1224709550214873090",
			"postedTime": "2020-02-04T15:01:25.000Z"
		},
		"favoritesCount": 43,
		"twitter_entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/cAepHunkFp",
				"expanded_url": "https://x.com/i/web/status/1224709550214873090",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					117,
					140
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	},
	"favoritesCount": 0,
	"twitter_entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "AureliaSpecker",
			"name": "Aurelia Specker",
			"id": 1102321381,
			"id_str": "1102321381",
			"indices": [
				3,
				18
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 12,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
				"url": "https://t.co/87XIPZmZBJ",
				"expanded_url": "https://dev.to/XDevelopers/migrate-to-twitter-s-newly-released-labs-recent-search-endpoint-3npe",
				"expanded_status": 200,
				"expanded_url_title": null,
				"expanded_url_description": null
			},
			{
				"url": "https://t.co/sOjXW4YhbN",
				"expanded_url": "https://dev.to/XDevelopers/using-the-twitter-api-to-make-your-commute-easier-3od0",
				"expanded_status": 200,
				"expanded_url_title": null,
				"expanded_url_description": null
			}
		]
	},
	"twitter_filter_level": "low",
	"twitter_quoted_status": {
		"id": "tag:search.x.com,2005:1195000047089389573",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2019-11-14T15:26:27.000Z",
		"generator": {
			"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
		"body": "J'ai écrit un tutoriel sur comment obtenir des informations de trajet sur mesure en utilisant l'X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
		"long_object": {
			"body": "J'ai écrit un tutoriel sur comment obtenir des informations de trajet sur mesure en utilisant l'X API🚇\n\n#DEVcommunity #Pythontutorial \n\nJetez-y un œil ici 👇\nhttps://t.co/sOjXW4YhbN",
			"display_text_range": [
				0,
				160
			],
			"twitter_entities": {
				"hashtags": [{
						"text": "DEVcommunity",
						"indices": [
							85,
							98
						]
					},
					{
						"text": "Pythontutorial",
						"indices": [
							99,
							114
						]
					}
				],
				"urls": [{
					"url": "https://t.co/sOjXW4YhbN",
					"expanded_url": "https://dev.to/XDevelopers/using-the-twitter-api-to-make-your-commute-easier-3od0",
					"display_url": "dev.to/twitterdev/usi…",
					"indices": [
						137,
						160
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:1102321381",
			"link": "http://www.x.com/AureliaSpecker",
			"displayName": "Aurelia Specker",
			"postedTime": "2013-01-18T23:45:43.000Z",
			"image": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
			"summary": "devrel @TwitterUK • Suisse à Londres • mère de plantes d'intérieur • coiffeuse personnelle de @_dormrod",
			"friendsCount": 1331,
			"followersCount": 1032,
			"listedCount": 26,
			"statusesCount": 854,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "AureliaSpecker",
			"languages": [],
			"links": [{
				"href": null,
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "Londres, Royaume-Uni"
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1195000047089389573",
			"summary": "J'ai écrit un tutoriel sur comment obtenir des informations de trajet sur mesure en utilisant l'X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
			"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
			"postedTime": "2019-11-14T15:26:27.000Z"
		},
		"favoritesCount": 123,
		"twitter_entities": {
			"hashtags": [{
					"text": "DEVcommunity",
					"indices": [
						85,
						98
					]
				},
				{
					"text": "Pythontutorial",
					"indices": [
						99,
						114
					]
				}
			],
			"urls": [{
				"url": "https://t.co/pL0qJ4vhtE",
				"expanded_url": "https://x.com/i/web/status/1195000047089389573",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	}
}

Chronologie des métadonnées de Tweet

Aller à sur cette page Introduction Concepts clés Chronologie X Conseils de filtrage Étapes suivantes

Introduction**

Au cœur, X est un réseau de communication public, en temps réel et mondial. Depuis 2006, l’évolution de X a été guidée à la fois par les usages et conventions des utilisateurs et par les nouvelles fonctionnalités et améliorations du produit. Si vous utilisez des données X pour des recherches historiques, comprendre la chronologie de cette évolution est essentiel pour faire ressortir des Posts d’intérêt à partir de l’archive de données. X a été lancé comme une simple application SMS sur mobile et est devenu une plateforme de communication complète. Une plateforme avec un ensemble complet d’API. Les API ont toujours été un pilier du réseau X. La première API a été lancée peu après le lancement de X. Lorsque le géomarquage des Posts a été introduit pour la première fois en 2009, il a été rendu disponible via une Geo API (et plus tard, la possibilité de « géomarquer » un Post a été intégrée à l’interface utilisateur de X.com). Aujourd’hui, les API de X alimentent le réseau de communication bidirectionnel devenu une source d’actualités de dernière minute et de partage d’informations. Les opportunités de construire sur ce canal de communication mondial et en temps réel sont infinies. X met à disposition deux API historiques qui donnent accès à chaque Post disponible publiquement : Historical PowerTrack et la Full-Archive Search API. Ces deux API fournissent un ensemble d’opérateurs utilisés pour interroger et collecter des Posts d’intérêt. Ces opérateurs correspondent à une variété d’attributs associés à chaque Post, des centaines d’attributs tels que le contenu textuel du Post, le nom du compte de l’auteur et les liens partagés dans le Post. Les Posts et leurs attributs sont encodés en JSON, un format d’échange de données textuel courant. Ainsi, à mesure que de nouvelles fonctionnalités étaient introduites, de nouveaux attributs JSON apparaissaient et, en général, de nouveaux opérateurs d’API étaient ajoutés pour correspondre à ces attributs. Si votre cas d’usage consiste à écouter ce que le monde a dit sur X, plus vous comprenez à partir de quand les opérateurs ont disposé de métadonnées JSON sur lesquelles faire correspondre, plus vos filtres Historical PowerTrack pourront être efficaces. Ensuite, nous présenterons quelques concepts clés qui prépareront le terrain pour comprendre comment les mises à jour des métadonnées des Posts influencent la recherche de votre signal de données d’intérêt.

Concepts clés**

Des conventions utilisateur aux objets de première classe sur X

Les utilisateurs de X ont, de façon organique, introduit de nouveaux modes de communication désormais fondamentaux au sein du réseau X. Un exemple fondateur est le hashtag, aujourd’hui presque universel sur tous les réseaux sociaux. Les hashtags ont été introduits pour organiser les conversations et les sujets. Sur un réseau comptant des centaines de millions de messages par jour, les outils permettant de trouver des Posts d’intérêt sont essentiels, et les hashtags en sont devenus un moyen clé. Peu après la montée en puissance des hashtags, X leur a conféré un statut officiel et un support natif. Lorsque les hashtags sont devenus un « objet de première classe », cela a impliqué plusieurs choses. Ils sont devenus cliquables et recherchables dans l’interface utilisateur de X.com. Ils ont également intégré la famille des entities de X, aux côtés des @mentions, des médias joints, des symboles boursiers et des liens partagés. Ces entités sont commodément encodées dans un tableau JSON pré‑analysé, ce qui facilite leur traitement, leur exploration et leur stockage par les développeurs. Les Retweets sont un autre exemple de conventions issues des utilisateurs devenant des objets officiels. Le Retweet a émergé comme un moyen de « transférer » du contenu à d’autres. Il a d’abord consisté en un processus manuel de copier/coller d’un Post, précédé du motif « RT @ ». Ce processus a finalement été automatisé au moyen d’un nouveau bouton Retweet, accompagné de nouvelles metadata JSON. Le Retweet « officiel » est né. D’autres exemples incluent les « mentions », le partage de médias et de liens Web, ainsi que le partage d’une localisation avec votre Post. Chacun de ces schémas d’usage a donné lieu à de nouvelles fonctionnalités d’interface utilisateur sur x.com, à de nouveaux JSON de support et, par conséquent, à de nouvelles façons de faire correspondre des Posts. L’ensemble de ces attributs fondamentaux des Posts a abouti à des opérateurs PowerTrack permettant de les faire correspondre.

Métadonnées des Posts, mutabilité, mises à jour et actualité

Bien que les Posts puissent comporter jusqu’à un nombre fixe de caractères, la description JSON d’un Post comprend plus de 100 attributs. Des attributs tels que l’auteur de la publication, l’heure, s’il s’agit d’un Post original ou d’un Retweet, ainsi qu’un tableau d’objets de premier niveau comme les hashtags, les mentions et les liens partagés. Pour le compte ayant publié, il existe un objet User (ou Actor) avec une variété d’attributs qui fournissent le profil de l’utilisateur et d’autres métadonnées du compte. Les profils incluent une courte biographie, un lieu principal (texte libre), une langue préférée et un lien de site web facultatif. Certaines métadonnées de compte ne changent jamais (p. ex. l’id utilisateur numérique et la date de création), d’autres évoluent lentement, tandis que d’autres encore changent plus fréquemment. Les personnes changent d’emploi et déménagent. Les entreprises mettent à jour leurs informations. Lorsque vous collectez des Posts historiques, il est important de comprendre que certaines métadonnées sont telles qu’elles étaient au moment de la publication, tandis que d’autres sont telles qu’elles sont au moment de la soumission du query. Avec toutes les API historiques, la description du profil de l’utilisateur, le nom d’affichage et les attributs « home » du profil sont mis à jour avec les valeurs au moment du query.

Médias « natifs »

X.com et les apps mobiles X permettent d’ajouter des photos et des vidéos à un Post en appuyant sur un bouton et en parcourant vos galeries photo. Désormais intégrés comme actions de premier plan, les vidéos et photos partagées de cette manière sont appelées « médias natifs ». De nombreux opérateurs de requête fonctionnent avec ces ressources « natives », notamment has:videos, has:images et has:media. Ceux-ci ne correspondent qu’au contenu média partagé via les fonctionnalités de X. Pour faire correspondre d’autres médias hébergés en dehors de la plateforme X, vous devrez utiliser des opérateurs ciblant les métadonnées d’URL. Donc, avant d’examiner en détail les produits Historical PowerTrack et Full-Archive Search, faisons un tour d’horizon de l’évolution de X, en tant que produit et plateforme, au fil du temps. Chronologie de X Vous trouverez ci-dessous une chronologie sélective de X. La plupart de ces mises à jour de X ont, d’une manière ou d’une autre, profondément influé sur le comportement des utilisateurs, le contenu JSON des Posts, les opérateurs de query, ou les trois. En considérant X comme une plateforme d’API, les événements suivants ont, d’une manière ou d’une autre, affecté les charges utiles JSON utilisées pour encoder les Posts. En retour, ces détails JSON influencent la façon dont les API historiques de X les font correspondre. Notez que cette liste chronologique est généralement précise mais non exhaustive.

2006

  • octobre
    • @replies devient une convention.
    • Les cashtagsapparaissentpourlapremieˋrefois,maisleurutilisationpourmentionnerdestickersboursiersnedevientcourantequaudeˊbutde2009.Lescashtags apparaissent pour la première fois, mais leur utilisation pour mentionner des tickers boursiers ne devient courante qu’au début de 2009. Les cashtags deviennent des liens cliquables/recherchables en juin 2012.
  • novembre - Introduction des favoris.

2007

  • Janvier - les @replies deviennent un objet de première classe avec un bouton Répondre dans l’UI et la metadata in_reply_to.
  • Avril - les Retweets deviennent une convention.
  • Août - les #hashtags s’imposent comme un outil principal pour rechercher et organiser les Posts.

2009

  • Février - les $cashtags deviennent une convention courante pour discuter des symboles boursiers.
  • Mai - la phase « bêta » du Retweet est introduite avec « Via @ » ajouté en préfixe au corps du Post.
  • Juin - Comptes vérifiés introduits.
  • Août - Les Retweets deviennent un objet de première classe avec le motif « RT @ » et une nouvelle metadata retweet_status.
  • Octobre - Fonctionnalité List lancée.
  • Novembre - L’API de géolocalisation des Posts est lancée, fournissant la première méthode permettant aux utilisateurs de partager leur position via des applications tierces.

2010

  • Juin - X Places introduit pour le géomarquage des Posts.
  • Août - Lancement du bouton Post pour les sites web. Le partage de liens est devenu plus facile.

2011

  • Mai - Introduction du bouton « Follow », facilitant l’abonnement aux comptes associés aux sites web.
  • Août - Introduction des photos natives.

2012

  • Juin : les $Cashtags deviennent des liens cliquables et consultables.

2014

2015

  • Avril - Une modification de l’interface utilisateur de « Post » sur X entraîne une diminution du nombre de Posts géolocalisés.
  • Octobre - Lancement de X Polls. Les sondages prenaient initialement en charge deux choix avec une période de vote de 24 heures. En novembre, les sondages ont commencé à prendre en charge quatre choix avec des périodes de vote allant de 5 minutes à sept jours. Les metadata des sondages ont été mises à disposition (format natif enrichi uniquement) en février 2017.

2016

2017

  • Février - Les métadonnées des sondages X sont incluses dans les métadonnées des Posts (format natif enrichi uniquement).
  • Avril - « Simplified Replies » introduites avec les comptes répondus non comptabilisés dans la limite de 140 caractères (« dmw140, part 2 »).
2018 2022
  • 29 septembre - La possibilité de modifier des Posts est déployée auprès d’un petit groupe de test. Les métadonnées des Posts modifiés sont ajoutées à l’Objet Post le cas échéant. Cela inclut les objets edit_history et edit_controls. Ces métadonnées ne seront pas renvoyées pour les Posts créés avant l’ajout de la fonctionnalité d’édition. Aucun opérateur associé pour ces métadonnées. Pour en savoir plus sur le fonctionnement de l’édition de Posts, consultez les principes fondamentaux de l’édition de Posts
Conseils de filtrage Connaître la chronologie X de l’ajout des nouvelles fonctionnalités peut vous aider à créer des requêtes plus efficaces. Ici, query désigne un filtre ou une règle appliqué par les API historiques de X à l’archive des Posts, en utilisant des opérateurs PowerTrack pour faire correspondre le JSON du Post. Par exemple, l’opérateur lang: sert à faire correspondre des Posts dans une langue spécifiée. X fournit un service de classification des langues (plus de 50 langues prises en charge) et les X API exposent ces métadonnées dans le JSON généré pour chaque Post. Ainsi, si un Post est rédigé en espagnol, l’attribut JSON “lang” est défini sur “es”. Donc, si vous construisez un filtre avec la clause lang:es, il ne correspondra qu’aux Posts classés comme espagnols. Les informations de chronologie peuvent également aider à mieux interpréter les données des Posts reçues. Supposons que vous étudiiez le partage de contenu à propos des Jeux olympiques d’été de 2008 et de 2012. Si vous appliquiez uniquement l’opérateur is:retweet pour faire correspondre les Retweets, aucune donnée ne correspondrait en 2008. En revanche, pour 2012, il y aurait probablement des millions de Retweets. Vous pourriez en conclure à tort qu’en 2008 les Retweets n’étaient pas une pratique des utilisateurs, ou que tout simplement personne n’a fait de Retweet à propos de ces Jeux olympiques. Puisque les Retweets sont devenus un objet de première classe en 2009, vous devez ajouter une clause de règle ”RT @” pour aider à les identifier en 2008. Les Retweets et la classification linguistique des Posts sont deux exemples d’attributs de Post avec une longue histoire et de nombreux détails produit. Ci-dessous, nous aborderons plus en détail ces catégories d’attributs et d’autres importantes pour faire correspondre et comprendre les données X.

Reconnaître les faux négatifs

Lorsqu’il s’agit d’écrire des filtres, un point clé à retenir est que les opérateurs qui opèrent sur des metadata ont tous une « date d’apparition ». Si vous construisez un filtre avec un opérateur qui s’appuie sur des metadata introduites après la publication d’un Post, vous obtiendrez un faux négatif. Par exemple, disons que vous vous intéressez à tous les Posts qui mentionnent « snow » et partagent une vidéo. Si vous créez une règle avec l’opérateur has:videos, qui correspond aux Posts avec des vidéos natives, cette clause ne correspondra à aucun Post avant 2015. Cependant, le partage de vidéos était courant sur X bien avant 2015. Avant cette date, les utilisateurs partageaient des liens vers des vidéos hébergées ailleurs, mais en 2015, X a intégré de nouvelles fonctionnalités de partage de vidéos directement dans la plateforme. Pour trouver ces Posts antérieurs d’intérêt, vous incluriez une clause de règle telle que url:"youtube.com". Notez qu’avec les APIs de recherche, il existe des cas où des metadata ont été « réattribuées a posteriori » lors de la reconstruction de l’index. Un bon exemple est celui des cashtags,devenuslargementutiliseˊspourdiscuterdessymbolesboursiersen2009.Apreˋslintroductiondelopeˊrateurcashtags, devenus largement utilisés pour discuter des symboles boursiers en 2009. Après l’introduction de l’opérateur cashtag en 2015, l’index de recherche a été reconstruit et, au passage, l’entité de symbole a été extraite de tous les corps de Post, y compris au début de 2006 lorsque « »eˊtaitutiliseˊprincipalementcommeargot:«Ihopeit» était utilisé principalement comme argot : « I hope itnow oon! ».

Identifier et filtrer les attributs de Post importants pour votre cas d’usage

Certaines metadata, comme les id numériques de compte X, existent depuis le premier jour (et constituent un exemple de metadata de compte qui ne change jamais). D’autres metadata n’ont été introduites que bien après le lancement de X en 2006. Exemples de nouvelles metadata introduites : metadata de Retweet, emplacements de Post, titres et descriptions d’URL et médias « natifs ». Vous trouverez ci-dessous certains des types d’attributs de Post les plus courants qui ont été profondément affectés par ces mises à jour de la plateforme X. Le comportement de filtrage/correspondance pour ces attributs dépend, dans la plupart des cas, de l’API historique des Posts utilisée. Pour vous aider à déterminer quel produit convient le mieux à vos besoins de recherche et à votre cas d’usage, les détails d’attribut fournis ci-dessous incluent des informations produit de haut niveau.

Profils X

Puisqu’au cœur de X se trouve un canal de communication mondial en temps réel, la recherche menée sur les données de Post met souvent l’accent sur qui communique. Il est fréquemment utile de savoir où un utilisateur X se dit « chez lui ». Savoir qu’une bio de compte mentionne des centres d’intérêt et des loisirs peut aussi vous conduire à des Posts pertinents. Il est très courant de vouloir capter les Posts publiés par des comptes d’intérêt. Les attributs de profil sont essentiels pour tous ces cas d’usage. Chaque compte sur X possède un profil qui inclut des metadata telles que le @handle X, le nom d’affichage, une courte bio, la localisation (texte libre saisi par l’utilisateur), le nombre d’abonnés, et bien d’autres. Certains attributs ne changent jamais, comme l’id utilisateur numérique et la date de création du compte. D’autres évoluent généralement au jour le jour, de semaine en semaine ou de mois en mois, comme le nombre de Posts publiés et le nombre de comptes suivis et d’abonnés. D’autres attributs de compte peuvent également changer à tout moment, mais ont tendance à évoluer moins fréquemment : nom d’affichage, localisation et bio. La charge utile JSON pour chaque Post inclut des metadata de profil de compte pour l’auteur du Post. S’il s’agit d’un Retweet, elle inclut également les metadata de profil pour le compte qui a publié le Post original. La mutabilité des metadata de profil d’un Post dépend entièrement du produit historique utilisé. Les API Search fournissent des Posts historiques avec les paramètres de profil tels qu’ils sont au moment de la récupération. Pour Historical PowerTrack, le profil est tel qu’il était au moment où le Post a été publié, sauf pour les données antérieures à 2011. Pour les Posts antérieurs à 2011, les metadata de profil reflètent le profil tel qu’il était en septembre 2011.

Post original et Retweets

Les Retweets sont un autre exemple de conventions initiées par les utilisateurs devenues des objets officiels. Le Retweet est apparu comme un moyen de « transférer » du contenu à d’autres. Au départ, il s’agissait d’un processus manuel consistant à copier-coller un Post et à le faire précéder du motif « RT @ ». Ce processus a ensuite été automatisé via un nouveau bouton Retweet, accompagné de nouvelles metadata JSON. Le Retweet « officiel » est né et l’action de retweeter est devenue un événement de Post de premier ordre. Avec le nouveau bouton Retweet, de nouvelles metadata ont été introduites, comme la charge utile complète du Post original. Le fait qu’un Post soit original ou partagé est un critère de filtrage courant. Dans certains cas, seul le contenu original est nécessaire. Dans d’autres, l’engagement autour des Posts est primordial, donc les Retweets sont essentiels. L’opérateur PowerTrack is:retweet permet aux utilisateurs d’inclure ou d’exclure les Retweets. Si vous extrayez des data d’avant août 2009, vous devez disposer de deux stratégies pour faire correspondre (ou non) les Retweets. Avant août 2009, il faut vérifier le message du Post lui-même, en utilisant une correspondance exacte d’expression, pour repérer le motif « RT @ ». Pour les périodes postérieures à août 2009, l’opérateur is:retweet est disponible.

Classifications de langue des Posts

La langue dans laquelle un Post est rédigé suscite un intérêt courant. La langue du Post peut aider à inférer l’emplacement d’un Post et, souvent, une seule langue spécifique est nécessaire pour l’analyse ou l’affichage. (Les profils X disposent également d’un paramètre de langue préférée.) Pour filtrer selon la classification de langue d’un Post, les produits historiques de X (Search API et Historical PowerTrack) diffèrent sensiblement. Lors de la construction de l’archive Search, tous les Posts ont été rétro-remplis avec la classification de langue de X. Par conséquent, l’opérateur lang: est disponible pour l’ensemble de l’archive des Posts. Avec Historical PowerTrack, les métadonnées de classification de langue de X sont disponibles dans l’archive à partir du 26 mars 2013. 

Géoréférencement des Posts

Pouvoir indiquer où un Post a été publié (c’est‑à‑dire le géoréférencer) est important pour de nombreux cas d’usage. Il existe trois méthodes principales pour géoréférencer des Posts :
  • Références géographiques dans le contenu d’un Post
  • Posts géolocalisés par l’utilisateur
  • Localisation « domicile » du profil du compte définie par un utilisateur
Références géographiques dans un message Post
La correspondance sur des références géographiques dans le message Post, bien que souvent la méthode la plus complexe car elle dépend des connaissances locales, est possible sur l’ensemble de l’archive des Posts. Voici un exemple de correspondance géoréférencée datant de 2006 pour la région de San Francisco, basé sur un filtre « golden gate » : https://x.com/biz/statuses/28311
Posts géolocalisés par l’utilisateur
En novembre 2009, X a introduit son API de géolocalisation des Posts, qui permettait d’associer aux Posts une position exacte. En juin 2010, X a présenté X Places, qui représente une zone géographique à l’échelle d’un lieu, d’un quartier ou d’une ville. Environ 1 à 2 % des Posts sont géolocalisés via l’une ou l’autre méthode. L’historique de géolocalisation disponible dépend de l’API Historique que vous utilisez. Avec les API de recherche, la possibilité de commencer à faire correspondre des Posts à certains opérateurs géographiques a débuté en mars 2010, et à d’autres en février 2015. Si vous utilisez Historical PowerTrack, la géoréférenciation commence le 1er septembre 2011. Lors de la constitution de l’archive Historical PowerTrack, toute géolocalisation antérieure à cette date n’a pas été incluse.
Lieu « domicile » du profil de compte défini par l’utilisateur
Tous les utilisateurs de X peuvent définir le Lieu de leur profil, indiquant leur lieu de domicile. Des millions d’utilisateurs de X renseignent cette information, ce qui augmente considérablement la quantité de géodonnées dans le Firehose de X. Ces metadata de lieu sont une chaîne non normalisée, générée par l’utilisateur et en texte libre. Environ 30 % des comptes disposent de metadata Profile Geo pouvant être résolues au niveau du pays. Comme pour la géolocalisation des Posts, les méthodes de correspondance et les périodes disponibles dépendent de l’API Historique que vous utilisez. Historical PowerTrack permet aux utilisateurs d’effectuer leurs propres correspondances personnalisées sur ces chaînes en texte libre. Pour faciliter ce processus, X propose également un Profile Geo Enrichment qui réalise, lorsque c’est possible, le géocodage et fournit des metadata normalisées ainsi que les Operators correspondants. Les Profile Geo Operators sont disponibles à la fois dans Historical PowerTrack et dans les Search APIs. Avec Historical PowerTrack, ces metadata Profile Geo sont disponibles à partir de juin 2014. Avec les Search APIs, ces metadata sont disponibles à partir de février 2015. Le partage de liens vers des pages web, de photos et de vidéos a toujours été un cas d’usage fondamental de X. Au début, toutes ces actions consistaient à inclure une URL directement dans le message du Post. En 2011, X a intégré le partage de photos directement dans son interface utilisateur. En 2016, les vidéos natives ont été ajoutées. Compte tenu de cet historique, il existe divers Opérateurs de filtrage pour cibler ce contenu. Un ensemble d’Opérateurs permet de déterminer si des Posts contiennent des liens partagés, des photos ou des vidéos. De plus, comme la plupart des URL partagées sur X sont raccourcies afin d’utiliser moins de caractères dans un Post (par exemple via des services tels que bitly ou tinyurl), X propose des enrichissements de data qui génèrent une URL complète et développée sur laquelle il est possible de faire correspondre des règles. Par exemple, si vous souhaitez cibler des Posts contenant des liens évoquant X et les systèmes d’alerte précoce, un filtre faisant référence à « communication en cas d’intempéries sévères » correspondrait à un Post contenant cette URL : http://bit.ly/1XV1tG4. En mars 2012, l’enrichissement d’URL développée a été introduit. Avant cette date, les charges utiles des Posts incluaient uniquement l’URL fournie par l’utilisateur. Ainsi, si l’utilisateur incluait une URL raccourcie, il pouvait être difficile de faire correspondre les URL (développées) d’intérêt. Avec Historical PowerTrack et les Search APIs, ces metadata sont disponibles à partir de mars 2012. En juillet 2016, l’enrichissement d’URL améliorée a été introduit. Cette version enrichie fournit le titre HTML et la description d’un site web dans la charge utile du Post, ainsi que des Opérateurs pour effectuer des correspondances sur ces éléments. Avec Historical PowerTrack, ces metadata deviennent disponibles en juillet 2016. Avec les Search APIs, ces metadata commencent à apparaître en décembre 2014. En septembre 2016, X a introduit les « pièces jointes natives », où un lien partagé final n’est pas comptabilisé dans la limite de 140 caractères d’un Post. Les deux enrichissements d’URL s’appliquent toujours à ces liens partagés. Pour d’autres détails spécifiques au produit concernant le filtrage d’URL, consultez les articles correspondants.
I