Générateur d'insertion X (Twitter)
Introduction
Le Générateur d'insertion X (Twitter) de Toollect transforme n'importe quelle URL de post en code d'intégration officiel que X publie pour afficher des publications sur d'autres sites web – le blockquote twitter-tweet plus widgets.js – en un clic, avec un aperçu en direct avant de copier et toutes les options d'affichage que l'interface de X propose. Collez un lien, choisissez vos options, prévisualisez, copiez, collez. Tout le cycle prend quelques secondes.
La friction qu'il élimine est familière à quiconque a déjà intégré un post à la main. La boîte de dialogue du publisher de X produit bien le code, mais disperse ses choix sur des écrans séparés, n'expose aucun contrôle pour masquer les médias ni pour l'alignement, et n'offre aucun contrôle numérique de largeur pour les vidéos. Écrire le blockquote à la main fonctionne jusqu'à ce qu'un attribut mal orthographié laisse le post comme un lien nu pour toujours. Cet outil assemble le balisage exact que widgets.js attend, traduit vos options en attributs data-* corrects et vous montre le rendu réel avant que quoi que ce soit n'atteigne votre page.
Le générateur propose deux modes derrière une barre d'onglets. Publication construit la carte classique pour n'importe quel post – texte, photos, aperçus de liens – avec thème, largeur de 220 à 550 px, langue d'interface, alignement, visibilité de la conversation et des médias, Do Not Track et une option pour omettre la balise script partagée. Vidéo optimise le même post pour son lecteur, avec une largeur jusqu'à 1920 px écrite dans l'attribut data-media-max-width que méritent les grands clips. Les deux modes parlent directement au point final oEmbed public de X – sans clé API, sans inscription et sans serveur Toollect entre les deux.
Cas d'usage
Intégrer du contenu de X apparaît à plus d'endroits qu'un billet de blog, et les deux modes se partagent naturellement le travail.
Blogs et contenu éditorial
Un billet de commentaire citant une figure publique, un article tech intégrant le post d'annonce, un blog sportif montrant le clip marquant – les cas classiques. Le mode Publication avec les réglages par défaut couvre les posts texte ; passez en mode Vidéo quand le post est principalement un clip et que le lecteur doit occuper la colonne.
Rédactions et couverture en direct
Les journalistes intègrent les publications de témoins et les déclarations officielles dans une couverture continue. La vitesse compte, et la vérification aussi – le générateur normalise tout lien partagé sur le vif, qu'il s'agisse d'un lien de partage d'application avec paramètres de suivi, de formes legacy twitter.com ou de variantes de vue photo, en une référence canonique du post, et l'aperçu confirme que le post se rend encore avant la mise en ligne. Masquer la conversation garde un fil centré sur la déclaration citée plutôt que sur la dispute qui la précède.
Documentation et rédaction technique
Les notes de version, changelogs et tutoriels citent de plus en plus des fils d'ingénieurs comme sources primaires. Masquer les médias replie les aperçus de liens en texte pour une lecture plus calme, le sélecteur de langue affiche les boutons d'action et horodatages dans la langue de la documentation, et Omettre le script garde exemptes de balises dupliquées les pages qui chargent déjà widgets.js globalement – bibliothèques de composants, thèmes de documentation.
Sites marketing et portefolios
Les posts d'éloges clients comme preuve sociale, les fils de fondateurs comme histoire de marque. L'alignement Centré place un unique témoignage dans une colonne étroite ; Do Not Track signale le respect de la vie privée au public européen ; l'aperçu vérifie chaque carte avant l'expédition.
Comment ça marche
L'outil tourne en quatre étapes :
- Analyser et canonicaliser l'URL – l'entrée est comparée à la grammaire des liens X pour les posts – un nom d'utilisateur (sans @, 1–15 lettres, chiffres ou underscores), la route status et un ID snowflake de 15 à 19 chiffres sur x.com ou twitter.com avec préfixes optionnels www./mobile./m. Les paramètres de requête comme ?s=20&t=… sont ignorés plutôt que nettoyés – l'URL canonique reconstruite ne les inclut simplement jamais. Les routes sans nom d'utilisateur comme /i/web/status/… du client web sont rejetées avec un message dédié car le point final oEmbed ne peut pas les résoudre.
- Construire la requête officielle – vos options deviennent des paramètres de requête sur le point final oEmbed public de X (publish.x.com/oembed?url=…) – maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script. Le point final est sans clé et conçu sans limite de taux – il existe justement pour que les CMS convertissent des URLs en intégrations.
- Récupérer le balisage officiel – un unique GET HTTPS renvoie le HTML du blockquote exactement comme X le formate, avec vos options déjà cuites en attributs data-*. Votre navigateur parle directement à X ; aucun serveur Toollect ne touche la requête.
- Post-traiter et prévisualiser – la balise script du serveur est retirée et gérée séparément (pour que l'aperçu charge widgets.js exactement une fois quel que soit le nombre de régénérations), le mode Vidéo réécrit l'attribut de largeur côté client (voir ci-dessous pourquoi), et le blockquote entre dans la zone d'aperçu. L'outil surveille l'iframe rendu et rapporte honnêtement s'il n'apparaît jamais.
Changer n'importe quelle option régénère toute la chaîne – nouvelle requête, balisage frais, aperçu refait – si bien que le code que vous copiez correspond toujours à ce que vous regardez.
Formats d'URL pris en charge
Le générateur accepte toute forme d'URL qui identifie un post avec son nom d'utilisateur, et rejette tout le reste avec un message spécifique.
Formats acceptés
| Format | Exemple | Résultat |
|---|---|---|
| Publication canonique | x.com/utilisateur/status/1234567890123456789 |
Intégration de ce post |
| Domaine legacy | twitter.com/jack/status/20 |
Intégration de ce post |
| Sous-domaine mobile | mobile.twitter.com/utilisateur/status/… |
Intégration de ce post |
| Préfixe www | www.x.com/utilisateur/status/… |
Intégration de ce post |
| Sans schéma | x.com/utilisateur/status/… |
Intégration de ce post |
| Variante de vue photo | x.com/utilisateur/status/…/photo/1 |
Intégration de ce post |
| Variante de vue vidéo | x.com/utilisateur/status/…/video/1 |
Intégration de ce post |
| Avec paramètres de suivi | …?s=20&t=…&ref_src=twsrc%5Etfw |
Intégration de ce post – paramètres ignorés |
Les variantes de vue et paramètres indésirables après l'ID du post sont simplement ignorés – l'intégration pointe toujours vers le post lui-même, qui rend ses propres médias. Le préfixe https:// et la barre oblique finale sont optionnels.
Formats rejetés
| Forme d'URL | Motif du rejet |
|---|---|
x.com/i/web/status/1234567890123456789 |
La route sans nom d'utilisateur du client web – le point final oEmbed répond 404. Ouvrez le lien et copiez l'adresse complète avec le nom d'utilisateur |
x.com/utilisateur |
Un profil – aucun post à intégrer |
x.com/intent/tweet?text=… ou x.com/intent/retweet?tweet_id=… |
Intents de partage – des actions, pas du contenu |
x.com/hashtag/sujet ou x.com/search?q=… |
Pages hashtag et recherche – aucun post individuel |
facebook.com/…, tout autre hôte |
Pas un domaine X |
Le cas sans nom d'utilisateur sous /i/web/status/… mérite d'être souligné car c'est la surprise la plus courante. X livre cette forme quand une URL de post est copiée depuis le client web sans l'ouvrir. Le générateur la refuse délibérément – la passer au point final produirait un échec silencieux – et vous demande le lien complet. L'analyseur d'URL X (Twitter) de ce site résout ces liens vers leur forme canonique si vous préférez réparer l'URL plutôt que la recopier.
Anatomie du code d'insertion
La sortie est le même code que produit la machinerie de X, avec vos options appliquées. Une insertion de publication aux réglages par défaut ressemble à ceci (contenu abrégé) :
<blockquote class="twitter-tweet" data-width="550">
<p lang="en" dir="ltr">Just setting up my twttr</p>
— Jack (@jack)
<a href="https://x.com/jack/status/20?ref_src=twsrc%5Etfw">21 mars 2006</a>
</blockquote>
<script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>
Parcours des parties :
- La classe du blockquote – twitter-tweet est l'hameçon que widgets.js cherche. Chaque élément portant cette classe sur la page devient une carte rendue.
- data-width (publications) – la largeur de rendu maximale en pixels. X rogne la valeur en interne autour de 250–550 quelle que soit celle écrite – le garde donc dans la plage honnête.
- data-media-max-width (vidéos) – la largeur maximale d'expansion des médias dans la carte, jusqu'à 1920 px. Présente uniquement en mode Vidéo – voir Publication contre vidéo pour savoir pourquoi le générateur écrit cet attribut lui-même.
- data-theme="dark" – présent uniquement si Sombre est choisi. Rend du texte clair sur fond sombre avec le chrome de carte sombre.
- data-lang – présent dès qu'une langue précise est sélectionnée, anglais compris. Localise les propres textes du widget – format d'horodatage, pont Lire plus, libellés d'actions – mais jamais le texte du post lui-même. Seul Automatique omet l'attribut ; widgets.js retombe alors sur la langue de la page.
- data-conversation="none" – ajouté par Masquer la conversation sur une réponse. Sans lui, widgets.js préfixe un résumé replié du post parent.
- data-cards="hidden" – ajouté par Masquer les médias. Les aperçus de liens, photos et vidéos restent repliés ; seul le texte se rend.
- data-align – flotte la carte à gauche ou à droite, ou la centre, relativement à son conteneur. Absent avec l'alignement Aucun.
- data-dnt="true" – ajouté par l'opt-out de personnalisation. Indique à X de ne pas utiliser l'intégration ni ses vues de page pour des suggestions personnalisées ou de la publicité personnalisée.
- Le paragraphe avec la ligne d'attribution – le contenu visible avant que widgets.js tourne – texte du post, auteur, et un lien vers la publication. C'est l'expérience permanente pour les visiteurs sans JavaScript ou avec le script bloqué, et elle se dégrade élégamment en citation normale.
- La balise script – widgets.js depuis platform.x.com, chargée async. Une seule par page suffit pour autant d'intégrations que voulu – c'est exactement le rôle de l'option Omettre le script.
Publication contre vidéo
Deux onglets, un post, deux tâches différentes. Changer d'onglet régénère immédiatement – il n'y a pas d'état périmé.
| Onglet Publication | Onglet Vidéo | |
|---|---|---|
| Idéal pour | Posts texte, photos, aperçus de liens | Posts dont l'essentiel est le clip |
| Plage de largeur | 220–550 px (défaut 550) | 560–1920 px (défaut 560) |
| Attribut de largeur | data-width du serveur | data-media-max-width, réécrit par l'outil |
| Thème (clair/sombre) | Disponible | Masqué – le lecteur n'a pas de variante claire |
| Masquer la conversation | Disponible | Masqué – le contexte parent d'une réponse est du texte, pas le clip |
| Masquer les médias | Disponible | Masqué – les médias sont l'essentiel |
| Langue, alignement, Do Not Track, Omettre le script | Disponibles | Disponibles |
Pourquoi l'outil écrit-il data-media-max-width lui-même ? Parce que le point final oEmbed de X ne le peut pas. Les tests confirment que le point final rogne chaque paramètre maxwidth – y compris les posts vidéo – dans la plage publication 220–550, et n'émet jamais l'attribut data-media-max-width que portent les intégrations vidéo. Cet attribut appartient au flux interne de publish.x.com, où le générateur vidéo embarqué décore le balisage après coup. Le générateur reproduit exactement cette décoration – il retire le data-width rogné du serveur et écrit votre largeur choisie dans data-media-max-width, si bien qu'une intégration vidéo de 1200 px mesure réellement 1200 px sur votre page.
En pratique la règle de décision est simple. Si le post se lit bien comme une carte – Publication. Si retirer le lecteur le vide – Vidéo, et donnez au lecteur la place dont il a besoin.
Options d'insertion
Chaque contrôle correspond à un attribut ou un paramètre de requête. Défauts entre parenthèses.
Langue (par défaut : la langue de la page) – propose Automatique plus les 34 langues que X fournit pour les textes du widget. Chaque sélection précise, anglais compris, est envoyée comme paramètre lang et écrite dans data-lang – le chrome du widget reste ainsi identique où que vous colliez le code. Elle localise horodatages et libellés d'actions autour du post, jamais les mots du post. Automatique omet à la fois le paramètre et l'attribut – widgets.js rend alors dans la langue déclarée par la page hôte ; cela convient aux sites multilingues, mais rend la sortie dépendante de l'endroit du collage.
Thème (Clair, onglet Publication uniquement) – Sombre envoie theme=dark et écrit data-theme="dark". Clair est l'absence de l'attribut.
Largeur (550 publication, 560 vidéo) – saisie comme nombre exact, rognée à la plage valide dès que vous quittez le champ. Les publications envoient maxwidth ; les vidéos pilotent la réécriture côté client de data-media-max-width. Les valeurs hors de la plage d'un onglet ne survivent pas au champ – 9999 en Publication devient 550, 100 en Vidéo devient 560.
Alignement (Aucun) – Gauche, Droite ou Centré écrit align dans la requête et data-align dans le blockquote. Centré est la manière discrète de placer une seule carte dans un article large ; Droite laisse le texte de l'article couler autour.
Masquer la conversation (désactivé, onglet Publication uniquement) – envoie hide_thread=true, que le serveur traduit en data-conversation="none". Pertinent uniquement sur une réponse ; sur un post autonome cela ne change rien.
Masquer les médias (désactivé, onglet Publication uniquement) – envoie hide_media=true, traduit en data-cards="hidden". L'intégration devient une pure citation.
Omettre la balise script widgets.js (désactivé) – envoie omit_script=true et supprime la balise script de la sortie. Pour les sites qui chargent déjà widgets.js une fois globalement – plusieurs intégrations, un script. Si votre page n'a pas de widgets.js, laissez-le désactivé ; le blockquote seul se rend pour toujours comme texte statique.
Désactiver la personnalisation X (désactivé) – envoie dnt=true et écrit data-dnt="true". X documente ceci comme excluant l'intégration et ses pages des suggestions personnalisées et de la publicité personnalisée.
Utilisation
- Collez l'URL du post dans le champ – tout format accepté du tableau ci-dessus.
- Appuyez sur Générer (ou Entrée). Le code apparaît dans la boîte de sortie et l'aperçu s'ouvre automatiquement avec le rendu réel de X.
- Choisissez l'onglet – Publication pour la carte standard, Vidéo pour les posts centrés clip. Changer régénère avec les options et la plage de largeur de cet onglet.
- Ajustez les options – langue, thème, largeur, alignement, cases de visibilité. Chaque changement re-solicite et re-rend ; la boîte de code ne diverge jamais de l'aperçu.
- Vérifiez les diagnostics – si aucune carte n'apparaît, l'avertissement au-dessus de la sortie dit si le script de X était bloqué ou si le post ne peut pas être intégré.
- Copiez le code et collez-le dans le HTML de votre page là où le post doit apparaître.
Une entrée ne correspondant à aucun format pris en charge vide la sortie et s'explique – soit le message de lien invalide, soit, pour les routes sans nom d'utilisateur, la demande du lien complet. Effacer réinitialise entrée, code et aperçu en une étape.
Tutoriel
Suivez un lien réel à travers les deux onglets.
Étape 1 – Collez un lien de partage d'application. Copiez l'URL d'un post telle que l'app mobile la partage, paramètres de suivi compris :
https://twitter.com/new27brigade/status/2090248985391014324?s=20&t=FakeNonce
Appuyez sur Générer. L'analyseur lit au-delà du domaine legacy et des paramètres s et t jusqu'au post même – new27brigade, statut 2090248985391014324 – et le code généré pointe vers la forme canonique. L'aperçu s'ouvre et la carte se rend.
Étape 2 – Assombrissez. Mettez le Thème sur Sombre. Le code gagne data-theme="dark" et l'aperçu se rend en palette sombre. Notez la nouvelle requête – le thème est cuit côté serveur, c'est pourquoi chaque changement d'option rappelle le point final au lieu d'éditer la chaîne localement.
Étape 3 – Rétrécissez. Tapez 350 dans Largeur et appuyez sur Entrée. L'attribut devient data-width="350" et la carte rétrécit. Essayez de taper 9999 puis cliquez ailleurs – le champ revient à 550, parce que X y rognerait de toute façon.
Étape 4 – Localisez l'interface. Mettez la Langue sur japonais (日本語). Le code gagne data-lang="ja" et l'horodatage de l'aperçu se reformate selon la convention japonaise. Le texte du post reste exactement tel quel – le réglage gouverne seulement les libellés propres de X.
Étape 5 – Passez en Vidéo. Cliquez sur l'onglet Vidéo. L'outil re-solicite avec le jeu de paramètres vidéo et réécrit le balisage – data-width disparaît, data-media-max-width="560" apparaît, et le sélecteur de thème quitte le panneau. Glissez la largeur à 1200 – le lecteur s'étend. Ce post est un clip d'exercice militaire, donc le mode Vidéo lui va ; pour une annonce texte vous reviendriez en arrière.
Étape 6 – Copiez et expédiez. Appuyez sur Copier et collez dans une simple page HTML. Ouvrez-la – le lecteur se rend en pleine largeur. C'est le contrat complet – le même code, le même rendu, sur votre page.
Aperçu et diagnostic
L'aperçu exécute le véritable widgets.js de X sur votre blockquote exact, si bien qu'il échoue exactement là où votre page échouera. Deux avertissements, deux significations distinctes :
| Avertissement | Ce que ça signifie | Que faire |
|---|---|---|
| « Le chargement de widgets.js de X a échoué — souvent un bloqueur de publicités » | Le navigateur n'a pas pu télécharger platform.x.com/widgets.js du tout | Autorisez le domaine dans le bloqueur ou essayez une fenêtre privée propre. L'intégration publiée échouera pareillement pour les visiteurs avec ce bloqueur |
| « L'intégration officielle ne s'est pas affichée » | Le script a tourné mais n'a produit aucune carte | Le post est peut-être supprimé, le compte protégé, l'URL erronée ou l'auteur a désactivé l'intégration. Vérifiez sur x.com ; si là il joue mais pas ici, l'intégration est désactivée côté auteur |
Les deux avertissements ne se déclenchent qu'après des attentes généreuses – vingt secondes pour le téléchargement du script, quinze de plus pour le rendu – afin que les connexions lentes ne produisent pas de fausses alarmes. Un post intégrable se rend bien à l'intérieur de ces fenêtres.
Un détail mécanique digne d'intérêt – la première génération télécharge widgets.js et le conserve pour la session. Les régénérations – nouvelles options, changements d'onglet – le réutilisent et l'invitent à traiter le nouveau blockquote, si bien que les aperçus suivants apparaissent plus vite que le premier.
Conseils de pro
- Associez-le à l'analyseur d'URL. L'analyseur examine et nettoie un lien – type, ID snowflake, clés de suivi ; le générateur transforme le lien propre en code. Archivez avec l'analyseur, publiez avec le générateur.
- Une balise script, beaucoup d'intégrations. Les pages avec plusieurs posts devraient charger widgets.js une fois – cochez Omettre le script sur chaque sortie sauf la première, ou chargez-le vous-même dans le gabarit du site et omettez-le partout.
- Masquer les médias transforme le post en citation. Pour les citations éditoriales où un aperçu de lien distrait, Masquer les médias plus Masquer la conversation ne laissent que les mots et l'attribution.
- Centrez les témoignages isolés. L'alignement Centré dans une mise en page large se lit comme un design intentionnel ; l'alignement à gauche par défaut de chaque CMS est rarement ce que veut une page marketing.
- Accordez la langue du widget à la langue de la page. Une page japonaise avec des boutons RETWEET anglais semble inachevée – les langues précises épinglent le chrome, la partie dont vous êtes responsable ; si le même embed tourne sur des gabarits multilingues, choisissez plutôt Automatique et laissez widgets.js suivre chaque page hôte.
- Activez Do Not Track pour les pages orientées UE. Le flag est documenté par X et se propage à travers l'intégration – un signal en un clic que la carte respecte la vie privée du visiteur.
- Concevez pour la colonne, puis fixez la largeur. Les publications finissent physiquement à 550 px ; l'aperçu montre le vrai résultat à la taille de votre conteneur avant de vous engager.
Alternatives
Comment d'autres moyens permettent-ils de mettre un post sur une page ?
| Méthode | Balisage officiel | Couverture d'options | Aperçu en direct | Dépendances |
|---|---|---|---|---|
| Cet outil | Oui – généré côté serveur | Ensemble complet, les deux modes | Oui | Aucune |
| Menu partager de x.com → Intégrer le post (publish.x.com) | Oui | Partiel – pas de masquage des médias, pas d'alignement, pas d'omission de script, pas de largeur vidéo numérique | Dans la boîte de dialogue seulement | Aucune |
| Blockquote écrit à la main + widgets.js | Bien formé si vous êtes soigneux | Tout ce que vous tapez – facile de se tromper | Non | widgets.js |
| X API v2 + moteur de rendu maison | Non – JSON seulement | Total, construit par vous | À construire | Accès API payant |
| Services d'intégration tiers | Leur propre balisage enveloppé | Variable | Parfois | Leur script et leur suivi |
La boîte de dialogue de partage de X est l'alternative la plus proche et la source du même blockquote – mais sa personnalisation s'arrête à la langue, au masquage de la conversation, à l'opt-out de personnalisation et à une taille vidéo grossière, et n'offre aucun chemin vers hide_media, align ou un maxwidth précis. La voie API achète le contrôle total à des tarifs payants et vous laisse quand même le rendu. Les services tiers interposent leurs propres scripts. Le générateur occupe le juste milieu pratique – balisage officiel, options complètes, confirmation visuelle immédiate.
Face aux API officielles
Trois surfaces officielles touchent à l'intégration des posts, et le générateur est construit directement sur la plus aimable.
| Capacité | Point final oEmbed public | Boîte de dialogue publish.x.com | X API v2 |
|---|---|---|---|
| Objectif | URL → HTML d'intégration, programmatique | URL → HTML d'intégration, à la main | Données complètes de plateforme et publication |
| Authentification | Aucune | Aucune | Clés + facturation à l'usage |
| Coût | Gratuit | Gratuit | Environ $0,005 par lecture de post depuis février 2026 – pas de niveau gratuit |
| Limites de taux | Aucune documentée | Seulement des limites pratiques | Crédits mesurés |
| Renvoie du code prêt à coller | Oui – blockquote + script | Oui | Non – JSON que vous rendez vous-même |
| Couverture des paramètres | maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script | Sous-ensemble – voir Alternatives | Sans objet – vous construisez la vue |
Le générateur appelle le point final oEmbed exactement comme documenté – la même requête qu'un plugin CMS ferait, faite par votre navigateur. Il ajoute ce qui manque au point final – normalisation d'entrée, la décoration data-media-max-width du mode vidéo, gestion des balises script et diagnostics. La X API v2 est délibérément hors jeu – depuis que son changement de tarification de février 2026 a supprimé le niveau gratuit, lire des posts via elle coûte de l'argent pour des capacités que le point final gratuit couvre déjà à des fins d'intégration.
Générateur d'insertion contre analyseur d'URL
Toollect livre deux outils X qui acceptent les mêmes liens, et la division du travail mérite un coup d'œil :
| Question | Analyseur d'URL | Ce générateur |
|---|---|---|
| Quels types de liens ? | Les sept types – posts, profils, listes, spaces, événements, hashtags, recherches | Posts uniquement |
| Que livre-t-il ? | URL canoniques propres, URL iframe de widget, intents de partage | Code d'intégration prêt à coller |
| Nettoie les paramètres de suivi ? | Oui – et liste chaque clé retirée | Inutile – la sortie est du code fraîchement généré |
| Résout /i/web/status/… ? | Oui – le mappe vers la forme canonique avec nom d'utilisateur | Non – demande le lien complet |
| Requêtes réseau ? | Zéro – tout l'analyse est local | Un GET oEmbed par génération, plus les scripts de X pour l'aperçu |
| Montre les métadonnées du post ? | Structure seulement – pas de contenu | L'aperçu montre le post réellement rendu |
L'analyseur est l'analyste ; le générateur est le bâtisseur. Un flux de publication utilise légitimement les deux dans l'ordre – analyser pour identifier et normaliser vers quoi un lien chaotique pointe, puis générer pour le mettre sur la page. Ils concordent grammaticalement par construction – un lien que l'analyseur accepte comme post est un lien que le générateur intègre.
Ce qu'il ne fait pas
Les limites, nommées pour que l'outil ne soit jamais surestimé :
- Il n'intègre pas les chronologies, profils, listes, spaces ni hashtags. Ce sont d'autres surfaces de X avec un autre balisage ; le support des profils du point final oEmbed produit des ancres de chronologie, pas des cartes de post, et le générateur les refuse. Un outil dédié serait le véhicule honnête s'il y a de la demande.
- Il ne résout pas les liens sans nom d'utilisateur. /i/web/status/… arrive sans le nom d'utilisateur que la forme canonique exige, et l'outil ne devine pas. Ouvrez le lien, copiez l'URL complète.
- Il ne résout pas les raccourcisseurs t.co. Un lien raccourci nu ne porte aucune identité de post ; collez la destination.
- Il ne contourne ni la vie privée ni la suppression. Comptes protégés, posts supprimés et auteurs ayant désactivé l'intégration produisent un code correct qui ne rend rien. Aucun outil ne peut changer cela.
- Il ne vérifie pas les posts avant la requête. La validation est grammaticale. Si le post existe, seul le point final le répond – un post indisponible émerge comme requête échouée.
- Il ne stylise pas le widget. Couleurs, polices et chrome à l'intérieur de la carte rendue sont l'affaire de X. Seuls le placement (alignement, largeur) et la présence (conversation, médias) sont à vous.
- Il n'installe pas le code. Ce que vous copiez est ce que vous collez ; l'outil ne peut pas atteindre votre CMS ou votre page builder.
Dépannage
| Problème | Cause | Solution |
|---|---|---|
| « Aucun post trouvé dans cette URL » | Lien profil, intent, recherche ou étranger – ou un ID mal formé | Utilisez la forme complète utilisateur/status/id ; vérifiez que l'ID a 15–19 chiffres |
| « Utilisez le lien complet du post » lors du collage de /i/web/status/… | Route du client web sans nom d'utilisateur | Ouvrez le lien dans le navigateur et copiez l'adresse complète avec le nom d'utilisateur |
| « Impossible de joindre X » à la génération | Hors ligne, bloqué ou le point final a répondu une erreur – y compris des posts qui n'existent plus | Vérifiez la connexion ; autorisez publish.x.com dans les bloqueurs ; ouvrez le post sur x.com pour confirmer son existence |
| « Le chargement de widgets.js de X a échoué » | Bloqueur de publicités ou extension de confidentialité bloquant platform.x.com | Autorisez le domaine pour cette page – et retestez pour le bien de vos visiteurs |
| « L'intégration officielle ne s'est pas affichée » avec un lien apparemment valide | Post supprimé, compte protégé ou intégration désactivée par l'auteur | Vérifiez sur x.com ; la permission d'intégration est un réglage de l'auteur, pas le vôtre |
| L'onglet Vidéo refuse une largeur de 400 px | Les largeurs vidéo commencent à 560 par conception | Utilisez l'onglet Publication pour 220–550 ; les deux plages servent des mises en page différentes |
| Ma largeur saisie a sauté à 550 ou 560 | Les valeurs hors plage sont rognées quand le champ perd le focus | Volontaire – X les rogne côté serveur de toute façon ; tapez dans la plage |
| Fonctionne dans l'aperçu, mort sur mon site | La CSP du site bloque les domaines de X, ou le CMS a assaini la balise script | Ajoutez https://platform.x.com (et https://platform.twitter.com pour les snippets legacy) à script-src et frame-src ; collez en HTML brut |
| J'ai changé la langue mais le texte du post est resté anglais | Par conception – data-lang localise le chrome du widget, jamais le contenu | Comportement attendu ; le post est affiché tel qu'il a été écrit |
Confidentialité et traitement des données
Cet outil est honnête quant à son trafic, plus important que celui de ses sœurs à zéro requête mais toujours direct vers X.
- Générer envoie l'URL du post à X, une fois par action. Appuyer sur Générer ou changer une option fait exactement un GET HTTPS vers publish.x.com/oembed avec l'URL canonique du post et vos options. La requête va de votre navigateur à l'infrastructure de X – aucun serveur Toollect ne la relaie, ne l'enregistre ni ne la voit.
- L'aperçu charge la machinerie propre de X. Rendre la carte récupère widgets.js depuis platform.x.com, l'iframe rendu depuis l'infrastructure de syndication de X et les médias depuis ses hôtes d'images – précisément le trafic que le code copié produira sur les navigateurs de vos lecteurs.
- Do Not Track se propage. Avec l'option activée, le code généré porte data-dnt="true", le signal documenté par X pour exclure l'intégration et ses vues de page des suggestions et publicités personnalisées.
- Pas de compte, pas de stockage, pas d'analytique. L'outil ne conserve aucun état entre les visites ; fermer l'onglet termine tout.
- Publier le code signifie que vos visiteurs parlent à X. C'est la nature de l'intégration – cela mérite d'être dit franchement. Si vous avez besoin d'un flux de travail X strictement hors ligne, l'analyseur d'URL X (Twitter) de ce site accomplit tout son travail avec zéro requête réseau.
Spécifications techniques
Détails :
- Point final – GET https://publish.x.com/oembed?url={canonical}, sans clé, réponse JSON, pas de limites de taux documentées ; paramètres maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script
- Grammaire d'entrée – hôtes x.com / twitter.com avec préfixes optionnels www. / mobile. / m. ; nom d'utilisateur [A-Za-z0-9_]{1,15} ; ID de post de 15–19 chiffres ; schéma, barre oblique finale, variantes de vue (/photo/1, /video/1, …) et chaînes de requête tolérés et abandonnés
- URL canonique de sortie – https://x.com/{username}/status/{id}
- Contrat de largeur publication – 220–550 px inclus (le point final rogne les valeurs extérieures ; historique par défaut 325, défaut de l'outil 550) ; largeur vidéo 560–1920 px appliquée côté client à data-media-max-width car le point final ne peut pas l'émettre
- Langues – Automatique ou l'une des 34 locales de widget X ; chaque sélection précise écrit data-lang, anglais compris – seul Automatique l'omet
- Gestion des scripts – les balises script du serveur sont retirées ; https://platform.x.com/widgets.js chargé une fois par session avec un timeout de 20 secondes ; le surveillant de rendu interroge l'iframe toutes les 500 ms jusqu'à 15 secondes, puis rapporte
- Politique de nouvelle requête – chaque changement d'option ou d'onglet émet une nouvelle requête oEmbed ; les requêtes identiques en vol sont fusionnées par un garde d'occupation
- Héberger soi-même la sortie nécessite – script-src et frame-src autorisant https://platform.x.com (plus https://platform.twitter.com pour les snippets legacy) et img-src autorisant https://abs.twimg.com et https://pbs.twimg.com
- Prise en charge des navigateurs – tous les navigateurs modernes (API clipboard ; runtime ES5 requis par widgets.js lui-même)
Fonctionnalités
- Génère le code d'intégration officiel de X (Twitter) depuis n'importe quelle URL de post en un clic – modes publication et vidéo dans un seul outil
- Reproduit les options du publisher de X – thème clair/sombre, Automatique plus 34 langues d'interface, largeur précise, alignement, masquer la conversation, masquer les médias
- Visualisez un aperçu en direct rendu par le widgets.js officiel de X avant de coller le code
- Contrôlez la largeur avec précision – 220–550 px pour les publications, 560–1920 px pour les vidéos via data-media-max-width
- Respectez vos visiteurs – interrupteur Do Not Track intégré et une option pour omettre les balises widgets.js en double
- Générateur gratuit dans le navigateur avec diagnostics clairs quand le script de X est bloqué – pas de clé API, pas d'inscription