X-embedgenerator (Twitter)

Sociale Media Video Code
Thema
Uitlijning

Inleiding

De Toollect X-embedgenerator (Twitter) zet elke post-URL om in de officiële embedcode die X publiceert voor het tonen van posts op andere websites – de twitter-tweet-blockquote plus widgets.js – met één klik, een live voorbeeld vóór het kopiëren en alle weergaveopties die de interface van X biedt. Plak een link, kies uw opties, bekijk het voorbeeld, kopieer, plak. De hele cyclus duurt seconden.

De wrijving die hij wegneemt kent iedereen die al eens met de hand een post heeft ingesloten. Het publicatiedialoogvenster van X produceert wel de code, maar spreidt zijn keuzes over aparte schermen, toont geen bediening om media te verbergen of uit te lijnen, en biedt voor clips helemaal geen numerieke breedteregeling. Handmatig de blockquote schrijven werkt totdat één verkeerd gespeld attribuut de post voor eeuwig als naakte link laat staan. Dit gereedschap assembleert de exacte opmaak die widgets.js verwacht, vertaalt uw opties naar de juiste data-*-attributen en toont u het echte render voordat iets uw pagina bereikt.

De generator biedt twee modi achter een tabbladbalk. Bericht bouwt de klassieke kaart voor elke post – tekst, foto's, linkvoorbeelden – met thema, breedte van 220 tot 550 px, interfacetaal, uitlijning, zichtbaarheid van gesprek en media, Do Not Track en een optie om de gedeelde scripttag weg te laten. Clip optimaliseert dezelfde post voor zijn speler, met een breedte tot 1920 px in het attribuut data-media-max-width dat grote video's verdienen. Beide modi spreken rechtstreeks met het openbare oEmbed-eindpunt van X – geen API-sleutel, geen registratie en geen Toollect-server ertussen.

Toepassingen

X-inhoud insluiten verschijnt op meer plaatsen dan een blogpost, en de twee modi verdelen het werk op natuurlijke wijze.

Blogs en redactionele inhoud

Een commentaarartikel dat een publieke figuur citeert, een tech-artikel met de aankondigingspost ingesloten, een sportblog met de hoogtepuntclip – de klassieke gevallen. De berichtmodus met standaardinstellingen dekt tekstposts; schakel naar de clipmodus wanneer de post vooral een video is en de speler de kolom moet bezitten.

Nieuwsredacties en live verslaggeving

Journalisten halen ooggetuigenposten en officiële verklaringen in doorlopende verslaggeving. Snelheid telt, en verificatie ook – de generator normaliseert elke link die de contactpersoon ter plekke deelt, of nu een app-deellink met trackingparameters, legacy-vormen van twitter.com of fotoweergavevarianten, naar één canonieke postverwijzing, en het voorbeeld bevestigt dat de post nog rendert vóór het stuk verschijnt. Gesprek verbergen houdt een draad gericht op het geciteerde statement in plaats van de discussie erboven.

Documentatie en technisch schrijven

Releasenotes, changelogs en tutorials citen steeds vaker ontwikkelaardraden als primaire bronnen. Media verbergen vouwt linkvoorbeelden samen tot tekst voor rustiger lezen, de taalkiezer toont actieknoppen en tijdstempels in de taal van de documentatie, en Script weglaten houdt pagina's vrij van dubbele tags die widgets.js al globaal laden – componentbibliotheken, documentatiethema's.

Marketingsites en portfolio's

Lofposten van klanten als sociaal bewijs, oprichtersdraden als merkgeschiedenis. Uitlijning Gecentreerd plaatst één testimonial in een smalle kolom; Do Not Track signaleert privacyrespect aan Europees publiek; het voorbeeld controleert elke kaart vóór verzending.

Hoe het werkt

De tool draait in vier stappen:

  1. URL parsen en canonicaliseren – de invoer wordt gematcht tegen de X-linkgrammatica voor posts – een gebruikersnaam (zonder @, 1–15 letters, cijfers of underscores), de route status en een snowflake-ID van 15–19 cijfers op x.com of twitter.com met optionele prefixen www./mobile./m. Query-parameters zoals ?s=20&t=… worden genegeerd in plaats van opgeruimd – de herbouwde canonieke URL bevat ze simpelweg nooit. Routes zonder gebruikersnaam zoals /i/web/status/… van de webclient worden geweigerd met een eigen melding, want het oEmbed-eindpunt kan ze niet oplossen.
  2. Het officiële verzoek bouwen – uw opties worden query-parameters op het openbare oEmbed-eindpunt van X (publish.x.com/oembed?url=…) – maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script. Het eindpunt is sleutelvrij en bewust zonder ratelimiet – het bestaat juist zodat CMS'en URLs in embeds omzetten.
  3. De officiële opmaak ophalen – precies één HTTPS-GET levert de blockquote-HTML terug exact zoals X haar formatteert, met uw opties al ingebakken als data-*-attributen. Uw browser spreekt direct met X; geen enkele Toollect-server raakt het verzoek.
  4. Nabewerken en voorbeelden – de scripttag van de server wordt verwijderd en apart beheerd (zodat het voorbeeld widgets.js precies één keer laadt hoe vaak u ook hergeneereert), de clipmodus herschrijft het breedteattribuut client-side (zie hieronder waarom), en de blockquote gaat het voorbeeldgebied in. De tool bewaakt het gerenderde iframe en meldt eerlijk als het nooit verschijnt.

Elke optiewijziging doorloopt de hele keten opnieuw – nieuw verzoek, verse opmaak, opnieuw gerenderd voorbeeld – zodat de code die u kopieert altijd overeenkomt met wat u ziet.

Ondersteunde URL-formaten

De generator accepteert elke URL-vorm die een post met zijn gebruikersnaam identificeert, en weigert alles anders met een specifieke melding.

Geaccepteerde formaten

Formaat Voorbeeld Resultaat
Canonieke post x.com/gebruikersnaam/status/1234567890123456789 Embed van die post
Legacy-domein twitter.com/jack/status/20 Embed van die post
Mobiel subdomein mobile.twitter.com/gebruikersnaam/status/… Embed van die post
www-prefix www.x.com/gebruikersnaam/status/… Embed van die post
Zonder schema x.com/gebruikersnaam/status/… Embed van die post
Fotoweergavevariant x.com/gebruikersnaam/status/…/photo/1 Embed van die post
Videoweergavevariant x.com/gebruikersnaam/status/…/video/1 Embed van die post
Met trackingparameters …?s=20&t=…&ref_src=twsrc%5Etfw Embed van die post – parameters genegeerd

Weergavevarianten en rommelige parameters na de post-ID worden simpelweg genegeerd – de embed wijst altijd naar de post zelf, die zijn eigen media rendert. Het https://-prefix en de sluisslash zijn optioneel.

Geweigerde formaten

URL-vorm Weigeringsgrond
x.com/i/web/status/1234567890123456789 De route zonder gebruikersnaam van de webclient – het oEmbed-eindpunt antwoordt 404. Open de link en kopieer het volledige adres met gebruikersnaam
x.com/gebruikersnaam Een profiel – geen post om in te sluiten
x.com/intent/tweet?text=… of x.com/intent/retweet?tweet_id=… Deel-intents – acties, geen inhoud
x.com/hashtag/onderwerp of x.com/search?q=… Hashtag- en zoekpagina's – geen enkele post
facebook.com/…, elke andere host Geen X-domein

Het geval zonder gebruikersnaam onder /i/web/status/… verdient nadruk omdat het de meest voorkomende verrassing is. X levert die vorm wanneer een post-URL uit de webclient wordt gekopieerd zonder haar te openen. De generator weigert haar bewust – haar doorgeven aan het eindpunt zou stil falen opleveren – en vraagt u om de volledige link. De X (Twitter)-URL-parser op deze site lost zulke links op naar hun canonieke vorm als u liever de URL repareert dan haar opnieuw te kopiëren.

Anatomie van de embedcode

De output is dezelfde code die de machinerie van X produceert, met uw opties toegepast. Een bericht-embed met de standaardinstellingen ziet er zo uit (inhoud ingekort):

<blockquote class="twitter-tweet" data-width="550">
  <p lang="en" dir="ltr">Just setting up my twttr</p>
  &mdash; Jack (@jack)
  <a href="https://x.com/jack/status/20?ref_src=twsrc%5Etfw">21 maart 2006</a>
</blockquote>
<script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>

Langs de delen:

  • De blockquote-klasse – twitter-tweet is de haak waar widgets.js naar zoekt. Elk element met deze klasse op de pagina wordt een gerenderde kaart.
  • data-width (berichten) – de maximale renderbreedte in pixels. X knipt de waarde intern bij rond 250–550 ongeacht wat er staat – de generator houdt uw gekozen waarde daarom in het eerlijke bereik.
  • data-media-max-width (clips) – hoe breed de media binnen de kaart mogen uitgroeien, tot 1920 px. Alleen in de clipmodus aanwezig – zie Bericht versus clip voor waarom de generator dit attribuut zelf schrijft.
  • data-theme="dark" – alleen aanwezig wanneer Donker is gekozen. Rendert lichte tekst op donkere achtergrond met het donkere kaart-uiterlijk.
  • data-lang – aanwezig zodra een concrete taal is gekozen, Engels inbegrepen. Lokaliseert de eigen teksten van de widget – tijdstempelformaat, de Lees meer-brug, actielabels – maar nooit de posttekst zelf. Alleen Automatisch laat het attribuut weg; widgets.js valt dan terug op de paginataal.
  • data-conversation="none" – toegevoegd door Gesprek verbergen bij een antwoord. Zonder dit attribuut plaatst widgets.js een samengevouwen samenvatting van de bovenliggende post vooraf.
  • data-cards="hidden" – toegevoegd door Media verbergen. Linkvoorbeelden, foto's en video's blijven samengevouwen; alleen de tekst rendert.
  • data-align – laat de kaart links of rechts zweven, of centreert haar, ten opzichte van haar container. Afwezig bij uitlijning Geen.
  • data-dnt="true" – toegevoegd door de personalisatie-opt-out. Zegt tegen X dat de embed en zijn paginaweergaven niet gebruikt mogen worden voor gepersonaliseerde suggesties of advertenties.
  • De paragraaf met auteursregel – de zichtbare inhoud vóórdat widgets.js draait – posttekst, auteur, en een link naar de post. Dit is de permanente ervaring voor bezoekers zonder JavaScript of met geblokkeerd script, en degradeert sierlijk naar een normaal citaat.
  • De scripttag – widgets.js vanaf platform.x.com, asynchroon geladen. Eén per pagina volstaat voor zoveel embeds als u wilt – precies het doel van de optie Script weglaten.

Bericht- versus clip-embeds

Twee tabbladen, één post, twee verschillende taken. Tabbladen wisselen genereert onmiddellijk – er is geen verouderde toestand.

Tabblad Bericht Tabblad Clip
Ideaal voor Tekstposts, foto's, linkvoorbeelden Posts waarvan de kern de video is
Breedtebereik 220–550 px (standaard 550) 560–1920 px (standaard 560)
Breedteattribuut data-width van de server data-media-max-width, herschreven door de tool
Thema (licht/donker) Beschikbaar Verborgen – de speler heeft geen lichte variant
Gesprek verbergen Beschikbaar Verborgen – de bovenliggende context van een antwoord is tekst, niet de clip
Media verbergen Beschikbaar Verborgen – de media zijn de kern
Taal, uitlijning, Do Not Track, Script weglaten Beschikbaar Beschikbaar

Waarom schrijft de tool data-media-max-width zelf? Omdat het oEmbed-eindpunt van X dat niet kan. Tests bevestigen dat het eindpunt elke parameter maxwidth – inclusief videoposten – in het berichtbereik 220–550 knijpt, en nooit het attribuut data-media-max-width uitzendt dat clip-embeds dragen. Dat attribuut hoort bij de flow binnen publish.x.com, waar de Embedded Video-generator de opmaak achteraf decoreert. De generator reproduceert exact die decoratie – hij verwijdert de bijgesneden data-width van de server en schrijft uw gekozen breedte in data-media-max-width, zodat een clip-embed van 1200 px echt 1200 px breed is op uw pagina.

In de praktijk is de beslisregel simpel. Als de post goed leest als kaart – Bericht. Als het wegnemen van de speler hem leeg maakt – Clip, en geef de speler de ruimte die hij nodig heeft.

Embedopties

Elke bediening wijst op één attribuut of verzoekparameter. Standaarden tussen haakjes.

Taal (standaard: de paginataal) – biedt Automatisch plus de 34 talen die X meelevert voor widgetteksten. Elke concrete keuze, Engels inbegrepen, wordt als parameter lang verzonden en in data-lang geschreven – zo blijft het chroom van de widget overal gelijk, waar u de code ook plakt. Ze lokaliseert tijdstempels en actielabels rond de post, nooit de woorden van de post. Automatisch laat zowel parameter als attribuut weg – widgets.js rendert dan in de taal die de gastpagina aangeeft; dat past bij meertalige sites, maar maakt de uitvoer afhankelijk van de plek waar u plakt.

Thema (Licht, alleen tabblad Bericht) – Donker stuurt theme=dark en schrijft data-theme="dark". Licht is de afwezigheid van het attribuut.

Breedte (550 bericht, 560 clip) – getypt als exact getal, bij het verlaten van het veld bijgewerkt naar het geldige bereik. Berichten sturen maxwidth; clips sturen de client-side herschrijving van data-media-max-width aan. Waarden buiten het bereik van een tabblad overleven het veld niet – 9999 bij Bericht wordt 550, 100 bij Clip wordt 560.

Uitlijning (Geen) – Links, Rechts of Gecentreerd schrijft align in het verzoek en data-align in de blockquote. Gecentreerd is de stille manier om één kaart in een breed artikel te plaatsen; Rechts laat de artikeltekst eromheen stromen.

Gesprek verbergen (uit, alleen tabblad Bericht) – stuurt hide_thread=true, wat de server vertaalt naar data-conversation="none". Alleen zinvol bij antwoorden; op een losse post verandert het niets.

Media verbergen (uit, alleen tabblad Bericht) – stuurt hide_media=true, vertaald naar data-cards="hidden". De embed wordt een zuiver citaat.

De widgets.js-scripttag weglaten (uit) – stuurt omit_script=true en onderdrukt de scripttag in de output. Voor sites die widgets.js al een keer globaal laden – meerdere embeds, één script. Heeft uw pagina geen widgets.js, laat deze optie dan uit; de blockquote alleen rendert voor altijd als statische tekst.

Personalisatie door X uitschakelen (uit) – stuurt dnt=true en schrijft data-dnt="true". X documenteert dit als het uitsluiten van de embed en zijn pagina's van gepersonaliseerde suggesties en gepersonaliseerde advertenties.

Gebruik

  1. Plak de post-URL in het invoerveld – elk geaccepteerd formaat uit de tabel hierboven.
  2. Druk op Genereren (of Enter). De code verschijnt in het uitvoerveld en het voorbeeld opent automatisch met de echte X-render.
  3. Kies het tabblad – Bericht voor de standaardkaart, Clip voor clipgerichte posts. Wisselen hergeneereert met de opties en het breedtebereik van dat tabblad.
  4. Pas de opties aan – taal, thema, breedte, uitlijning, de zichtbaarheidsvinkjes. Elke wijziging vraagt en rendert opnieuw; het codevak wijkt nooit af van het voorbeeld.
  5. Controleer de diagnoses – verschijnt er geen kaart, dan zegt de waarschuwing boven de output of het script van X geblokkeerd was of dat de post niet ingesloten kan worden.
  6. Kopieer de code en plak haar in de HTML van uw pagina waar de post moet verschijnen.

Invoer die met geen enkel ondersteund formaat overeenkomt, wist de output en legt zichzelf uit – óf de melding over de ongeldige link, óf, voor routes zonder gebruikersnaam, het verzoek om de volledige link. Wissen reset invoer, code en voorbeeld in één stap.

Handleiding

Volg één echte link langs beide tabbladen.

Stap 1 – Plak een app-deellink. Kopieer de URL van een post zoals de mobiele app haar deelt, trackingparameters incluis:

https://twitter.com/new27brigade/status/2090248985391014324?s=20&t=FakeNonce

Druk op Genereren. De parser leest langs het legacy-domein en de parameters s en t heen direct naar de post zelf – new27brigade, status 2090248985391014324 – en de gegenereerde code wijst naar de canonieke vorm. Het voorbeeld opent en de kaart rendert.

Stap 2 – Maak hem donker. Zet het Thema op Donker. De code krijgt data-theme="dark" en het voorbeeld rendert in het donkere palet. Let op de nieuwe opvraag – het thema wordt server-side ingebakken, daarom roept elke optiewijziging het eindpunt opnieuw aan in plaats van de tekenreeks lokaal te bewerken.

Stap 3 – Versmal. Typ 350 bij Breedte en druk op Enter. Het attribuut wordt data-width="350" en de kaart krimpt. Typ testsgewijs 9999 en klik elders – het veld springt terug naar 550, want X zou daar toch bijknippen.

Stap 4 – Localiseer de interface. Zet de Taal op Japans (日本語). De code krijgt data-lang="ja" en de tijdstempel in het voorbeeld hervormt zich naar Japanse conventie. De posttekst blijft precies zoals geschreven – de instelling regelt alleen Xs eigen labels.

Stap 5 – Schakel naar Clip. Klik op het tabblad Clip. De tool vraagt opnieuw op met de clipparameterset en herschrijft de opmaak – data-width verdwijnt, data-media-max-width="560" verschijnt, en de themakiezer verlaat het paneel. Sleep de breedte naar 1200 – de speler zet uit. Deze post is een militaire oefenvideo, dus de clipmodus past; voor een tekstankondiging zou u terugwisselen.

Stap 6 – Kopieer en verzend. Druk op Kopiëren en plak in een eenvoudige HTML-pagina. Open haar – de speler rendert op volle breedte. Dat is het complete contract – dezelfde code, dezelfde render, op uw pagina.

Voorbeeld en diagnose

Het voorbeeld voert Xs echte widgets.js uit tegen uw exacte blockquote, dus hij faalt exact waar uw pagina zal falen. Twee waarschuwingen, twee verschillende betekenissen:

Waarschuwing Wat het betekent Wat te doen
„X widgets.js kon niet worden geladen – vaak een advertentieblokkeerder” De browser kon platform.x.com/widgets.js helemaal niet downloaden Sta het domein toe in de blokkeerder of probeer een schoon privévenster. De gepubliceerde embed zal voor bezoekers met die blokkeerder net zo falen
„De officiële embed werd niet weergegeven” Het script draaide maar produceerde geen kaart De post kan verwijderd zijn, het account beschermd, de URL verkeerd of de auteur heeft insluiten uitgeschakeld. Controleer op x.com; speelt hij dáár maar niet hier, dan staat insluiten aan auteurskant uit

Beide waarschuwingen gaan pas af na royale wachttijden – twintig seconden voor de scriptdownload, nog eens vijftien voor het renderen – zodat trage verbindingen geen valse alarmen geven. Een insluitbare post rendert ruim binnen die vensters.

Eén mechanisch detail dat het noemen waard is – de eerste generatie downloadt widgets.js en houdt hem voor de sessie vast. Hergeneraties – nieuwe opties, tabbladwissels – hergebruiken hem en vragen hem de nieuwe blockquote te verwerken, zodat latere voorbeelden sneller verschijnen dan de eerste.

Pro-tips

  • Paar hem met de URL-parser. De parser analyseert en ruimt een link op – soort, snowflake-ID, trackingsleutels; de generator zet de schone link om in code. Archiveer met de parser, publiceer met de generator.
  • Één scripttag, veel embeds. Pagina's met meerdere posts moeten widgets.js één keer laden – vink Script weglaten aan bij elke uitvoer behalve de eerste, of laad hem zelf in de sitesjabloon en laat hem overal weg.
  • Media verbergen maakt van de post een citaat. Voor redactionele citaten waarin een linkvoorbeeld afleidt, laten Media verbergen plus Gesprek verbergen alleen de woorden en de naamsvermelding over.
  • Centreer enkelvoudige testimonials. Uitlijning Gecentreerd in een breed layout leest als bewust ontwerp; linkslijnig, het default van elk CMS, is zelden wat een marketingpagina wil.
  • Stem de widgettaal af op de paginataal. Een Japanse pagina met Engelse RETWEET-knoppen oogt onaf – concrete talen pinnen het chroom vast, het deel waarvoor u verantwoordelijk bent; draait dezelfde embed op meertalige sjablonen over meerdere talen, kies dan Automatisch en laat widgets.js elke gastpagina volgen.
  • Zet Do Not Track aan voor EU-gerichte pagina's. De flag is door X gedocumenteerd en plant zich door de embed voort – een signaal van één klik dat de kaart de privacy van de bezoeker respecteert.
  • Ontwerp voor de kolom, stel daarna de breedte in. Berichten eindigen fysiek op 550 px; het voorbeeld toont het echte resultaat op de grootte van uw container voordat u zich committeert.

Alternatieven

Hoe anders kunt u een post op een pagina krijgen?

Methode Officiële opmaak Optiedekking Live voorbeeld Afhankelijkheden
Deze tool Ja – servergegenereerd Volledige set, beide modi Ja Geen
Deelmenu op x.com → Post insluiten (publish.x.com) Ja Gedeeltelijk – geen media verbergen, geen uitlijning, geen script weglaten, geen numerieke clipbreedte Alleen in het dialoogvenster Geen
Handgeschreven blockquote + widgets.js Correct gevormd als u zorgvuldig bent Alles wat u typt – makkelijk vergetypt Nee widgets.js
X API v2 + eigen renderer Nee – alleen JSON Totaal, door u gebouwd Bouw het zelf Betaalde API-toegang
Embeddiensten van derden Hun eigen wikkelopmaak Variabel Soms Hun script en tracking

Het deeldialoogvenster van X is het dichtste alternatief en de bron van dezelfde blockquote – maar zijn aanpassing stopt bij taal, gesprek verbergen, personalisatie-opt-out en een grove clipgrootte, en biedt geen pad naar hide_media, align of een precieze maxwidth. De API-route koopt totale controle tegen pay-per-use-tarieven en laat het renderen desalniettemin aan u. Diensten van derden schuiven hun eigen scripts ertussen. De generator bezet het praktische midden – officiële opmaak, volledige opties, onmiddellijke visuele bevestiging.

Tegenover de officiële API's

Drie officiële oppervlakken raken het insluiten van posts, en de generator is rechtstreeks gebouwd op het vriendelijkste ervan.

Capaciteit Openbaar oEmbed-eindpunt Dialoogvenster publish.x.com X API v2
Doel URL → embed-HTML, programmatisch URL → embed-HTML, met de hand Volledige platformgegevens en posten
Authenticatie Geen Geen Sleutels + pay-per-use-facturering
Kosten Gratis Gratis Ongeveer $0,005 per gelezen post sinds februari 2026 – geen gratis tier
Ratelimieten Geen gedocumenteerd Alleen praktische grenzen Gemeten credits
Geeft kant-en-klare code terug Ja – blockquote + script Ja Nee – JSON die u zelf rendert
Parameterdekking maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script Deelverzameling – zie Alternatieven Irrelevant – u bouwt de weergave

De generator roept het oEmbed-eindpunt exact zoals gedocumenteerd aan – hetzelfde verzoek dat een CMS-plug-in zou doen, gedaan door uw browser. Hij voegt toe wat het eindpunt mist – invoernormalisatie, de data-media-max-width-decoratie voor de clipmodus, scripttag-beheer en diagnoses. De X API v2 is bewust buiten beeld – sinds zijn prijswijziging van februari 2026 de gratis tier schrapte, kost het lezen van posts via haar geld voor capaciteiten die het gratis eindpunt voor insluitdoeleinden al dekt.

Embedgenerator tegenover URL-parser

Toollect levert twee X-gereedschappen die dezelfde links accepteren, en de taakverdeling verdient één blik:

Vraag URL-parser Deze generator
Welke linksoorten? Alle zeven soorten – posts, profielen, lijsten, spaces, evenementen, hashtags, zoekopdrachten Alleen posts
Wat levert hij op? Schone canonieke URLs, widget-iframe-URLs, deel-intents Kant-en-klare embedcode
Ruimt trackingparameters op? Ja – en somt elke verwijderde sleutel op Overbodig – de output is vers gegenereerde code
Lost /i/web/status/… op? Ja – mapt naar de canonieke vorm met gebruikersnaam Nee – vraagt om de volledige link
Netwerkverzoeken? Nul – alles lokaal parsen Één oEmbed-GET per generatie, plus de scripts van X voor het voorbeeld
Toont post-metadata? Alleen structuur – geen inhoud Het voorbeeld toont de werkelijk gerenderde post

De parser is de analist; de generator is de bouwer. Een publicatieworkflow gebruikt beide legitiem achter elkaar – analyseren om te identificeren en normaliseren waar een chaotische link heenwijst, dan genereren om hem op de pagina te zetten. Ze zijn grammaticaal het eens bij constructie – een link die de parser als post accepteert, is een link die de generator insluit.

Wat het niet doet

De grenzen, benoemd zodat de tool nooit te veel wordt vertrouwd:

  • Het sluit geen tijdlijnen, profielen, lijsten, spaces of hashtags in. Dat zijn andere X-oppervlakken met andere opmaak; de profielondersteuning van het oEmbed-eindpunt produceert tijdlijnankers, geen postkaarten, en de generator weigert ze. Een eigen gereedschap zou het eerlijke voertuig zijn als er vraag is.
  • Het lost links zonder gebruikersnaam niet op. /i/web/status/… komt zonder de gebruikersnaam aan die de canonieke vorm vereist, en de tool gokt niet. Open de link, kopieer de volledige URL.
  • Het lost t.co-verkorters niet op. Een naakte verkorte link draagt geen post-identiteit; plak de bestemming.
  • Het omzeilt privacy noch verwijdering niet. Beschermde accounts, verwijderde posts en auteurs die insluiten hebben uitgeschakeld produceren correcte code die niets rendert. Geen gereedschap kan dat veranderen.
  • Het verifieert posts niet vóór het verzoek. De validatie is grammaticaal. Of de post bestaat beantwoordt alleen het antwoord van het eindpunt – een onbeschikbare post verschijnt als mislukt verzoek.
  • Het styleert de widget niet. Kleuren, lettertypen en chroom binnen de gerenderde kaart zijn Xs zaak. Alleen plaatsing (uitlijning, breedte) en aanwezigheid (gesprek, media) zijn van u.
  • Het installeert de code niet. Wat u kopieert is wat u plakt; de tool kan niet in uw CMS of page builder reiken.

Problemen oplossen

Probleem Oorzaak Oplossing
„Geen post gevonden in die URL” Profiel-, intent-, zoek- of vreemde link – of een misvormde ID Gebruik de volledige vorm gebruiker/status/id; controleer dat de ID 15–19 cijfers heeft
„Gebruik de volledige postlink” bij het plakken van /i/web/status/… Rout zonder gebruikersnaam van de webclient Open de link in de browser en kopieer het volledige adres met gebruikersnaam
„Kon X niet bereiken” bij genereren Offline, geblokkeerd of het eindpunt antwoordde een fout – inclusief posts die niet meer bestaan Controleer de verbinding; sta publish.x.com toe in blokkeerders; open de post op x.com om haar bestaan te bevestigen
„X widgets.js kon niet worden geladen” Advertentieblokkeerder of privacy-extensie blokkeert platform.x.com Sta het domein voor deze pagina toe – en test opnieuw, ook met het oog op uw bezoekers
„De officiële embed werd niet weergegeven” bij een ogenschijnlijk geldige link Verwijderde post, beschermd account of door de auteur uitgeschakeld insluiten Verifieer op x.com; de insluitmachtiging is de instelling van de auteur, niet de uwe
Het tabblad Clip weigert een breedte van 400 px Clipbreedten beginnen bij ontwerp op 560 Gebruik het tabblad Bericht voor 220–550; de twee bereiken dienen verschillende layouts
Mijn getypte breedte sprong naar 550 of 560 Buiten bereik liggende waarden worden bij het verlaten van het veld bijgeknipt Bewust – X knipt ze sowieso server-side bij; typ binnen het bereik
Werkt in het voorbeeld, dood op mijn site De CSP van de site blokkeert de domeinen van X, of het CMS heeft de scripttag gesaneerd Voeg https://platform.x.com (en https://platform.twitter.com voor legacy-snippets) toe aan script-src en frame-src; plak in rauwe HTML
Taal gewijzigd maar de posttekst bleef Engels Bij ontwerp – data-lang lokaliseert het chroom van de widget, nooit de inhoud Verwacht gedrag; de post wordt getoond zoals hij geschreven is

Privacy en gegevensverwerking

Deze tool is eerlijk over zijn verkeer, ruimer dan dat van zijn nul-verzoeks-zussen maar nog steeds rechtstreeks naar X.

  • Genereren stuurt de post-URL één keer per actie naar X. Op Genereren drukken of een optie wijzigen doet precies één HTTPS-GET naar publish.x.com/oembed met de canonieke post-URL en uw opties. Het verzoek gaat van uw browser naar de infrastructuur van X – geen enkele Toollect-server proxyt, logt of ziet hem.
  • Het voorbeeld laadt de eigen machinerie van X. De kaart renderen haalt widgets.js op vanaf platform.x.com, het gerenderde iframe vanuit de syndicatie-infrastructuur van X en media vanaf zijn image-hosts – precies het verkeer dat de gekopieerde code op de browsers van uw lezers zal produceren.
  • Do Not Track plant zich voort. Met de optie aan draagt de gegenereerde code data-dnt="true", het door X gedocumenteerde signaal om de embed en zijn paginaweergaven uit te sluiten van gepersonaliseerde suggesties en advertenties.
  • Geen account, geen opslag, geen analytics. De tool houdt geen status bij tussen bezoeken; het sluiten van het tabblad beëindigt alles.
  • De code publiceren betekent dat uw bezoekers met X praten. Dat is de natuur van insluiten – de moeite van duidelijk zeggen waard. Hebt u een strikt offline X-workflow nodig, dan verricht de X (Twitter)-URL-parser op deze site zijn hele taak met nul netwerkverzoeken.

Technische specificaties

Details:

  • Eindpunt – GET https://publish.x.com/oembed?url={canonical}, sleutelvrij, JSON-antwoord, geen gedocumenteerde ratelimieten; parameters maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script
  • Invoergrammatica – hosts x.com / twitter.com met optionele prefixen www. / mobile. / m.; gebruikersnaam [A-Za-z0-9_]{1,15}; post-ID van 15–19 cijfers; schema, sluisslash, weergavevarianten (/photo/1, /video/1, …) en query-strings getolereerd en weggegooid
  • Canonieke output-URL – https://x.com/{username}/status/{id}
  • Berichtbreedtecontract – 220–550 px inclusief (het eindpunt knijpt buitenwaarden bij; historisch default 325, tooldefault 550); clipbreedte 560–1920 px client-side toegepast op data-media-max-width omdat het eindpunt haar niet kan uitzenden
  • Talen – Automatisch of een van 34 X-widgetlocales; elke concrete keuze schrijft data-lang, Engels inbegrepen – alleen Automatisch laat het weg
  • Scriptbeheer – scripttags van de server worden verwijderd; https://platform.x.com/widgets.js een keer per sessie geladen met een time-out van 20 seconden; de renderwachter bevraagt het iframe elke 500 ms tot 15 seconden, en rapporteert dan
  • Herhaalbeleid – elke optie- of tabbladwijziging doet een nieuw oEmbed-verzoek; identieke verzoeken in de lucht worden samengevouwen door een bezet-wacht
  • Self-hosting van de output vereist – script-src en frame-src met https://platform.x.com toegestaan (plus https://platform.twitter.com voor legacy-snippets) en img-src met https://abs.twimg.com en https://pbs.twimg.com toegestaan
  • Browserondersteuning – alle moderne browsers (clipboard-API; ES5-runtime die widgets.js zelf vereist)

Functies

  • Genereert officiële X (Twitter)-embedcode vanuit elke post-URL met één klik – bericht- en clipmodus in één gereedschap
  • Spiegelt de eigen publiceropties van X – licht/donker thema, Automatisch plus 34 interfacetalen, exacte breedte, uitlijning, gesprek verbergen, media verbergen
  • Bekijk een live voorbeeld gerenderd door de officiële widgets.js van X voordat u de code plakt
  • Beheer de breedte nauwkeurig – 220–550 px voor berichten, 560–1920 px voor clips via data-media-max-width
  • Respecteer uw bezoekers – ingebouwde Do Not Track-schakelaar en een optie om dubbele widgets.js-tags weg te laten
  • Gratis browsergenerator met duidelijke diagnoses wanneer het script van X geblokkeerd is – geen API-sleutel, geen registratie

Veelgestelde vragen

Wat is een X (Twitter)-embedcode?
Het is het HTML-fragment dat X publiceert om een post op een andere website te tonen. De code is een blockquote met de klasse twitter-tweet plus een klein script-tag dat de widgets.js van X laadt. Wanneer een bezoeker uw pagina opent, vindt widgets.js de blockquote, haalt de post bij X op en vervangt haar door de volledig gerenderde kaart met auteur, media en actieknoppen binnen een iframe.
Wat is het verschil tussen bericht- en clip-embeds?
Beide modi embedden dezelfde post, maar optimaliseren hem voor verschillende inhouden. Een bericht-embed toont de vertrouwde kaart met tekst, auteur en media, ondersteunt het lichte/donkere thema en accepteert een breedte tussen 220 en 550 px geschreven in het attribuut data-width. Een clip-embed geeft prioriteit aan de speler, verbergt de thema- en gespreksbediening omdat die niet van toepassing zijn, en draagt zijn breedte tot 1920 px in een attribuut data-media-max-width zodat grote clips verder groeien dan de standaardkaart. Bij het wisselen van tabblad wordt de code automatisch opnieuw gegenereerd.
Waarom wordt mijn embed niet gerenderd in het voorbeeld?
De tool toont een van twee waarschuwingen. „X widgets.js kon niet worden geladen” betekent dat de browser het script van X helemaal niet kon downloaden, meestal geblokkeerd door een advertentieblokkeerder of privacy-extensie. „De officiële embed werd niet weergegeven” betekent dat widgets.js wel draaide maar geen enkele kaart produceerde – de post kan verwijderd zijn of geplaatst vanaf een beschermd account, de URL kan verkeerd zijn of de auteur heeft insluiten uitgeschakeld voor die post. Het voorbeeld voert precies het script uit dat uw pagina zal uitvoeren, dus het vangt dit op vóór publicatie.
Waarom is mijn berichtbreedte beperkt tot 550 px?
Die limiet komt van X. Het officiële oEmbed-eindpunt accepteert alleen een maximale breedte tussen 220 en 550 px voor bericht-embeds en knipt waarden buiten bereik stilletjes af – een grotere waarde zou toch een kaart van 550 px opleveren. Clips zijn anders – hun speler kan veel breder uitgroeien, en de generator schrijft die ruimere waarde rechtstreeks in het attribuut data-media-max-width, tot 1920 px.
Heeft de tool een API-sleutel nodig of uploadt hij mijn gegevens?
Geen API-sleutel en geen account. Wanneer u op Genereren drukt, stuurt uw browser precies één HTTPS-verzoek rechtstreeks naar het openbare oEmbed-eindpunt van X op publish.x.com – de post-URL reist van uw browser naar X, nooit via een Toollect-server. Daarna laadt het voorbeeld de widgets.js van X en de embed-iframe, precies zoals de gekopieerde code op uw site zal doen. Niets wordt opgeslagen en het sluiten van het tabblad laat niets achter.
Hoe verschilt dit van de X (Twitter)-URL-parser?
De parser neemt een link uit elkaar – soort, gebruikersnaam, snowflake-ID, weergavevariant – reinigt zijn trackingparameters en bouwt schone URLs op. Deze generator werkt andersom – hij zet een herkende post-link om in kant-en-klare embedcode. Laat dezelfde post door beide gereedschappen gaan en elk geeft een ander antwoord voor een andere taak – analyse tegenover output.
ESC