X-embedgenerator (Twitter)
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:
- 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.
- 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.
- 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.
- 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>
— 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
- Plak de post-URL in het invoerveld – elk geaccepteerd formaat uit de tabel hierboven.
- Druk op Genereren (of Enter). De code verschijnt in het uitvoerveld en het voorbeeld opent automatisch met de echte X-render.
- Kies het tabblad – Bericht voor de standaardkaart, Clip voor clipgerichte posts. Wisselen hergeneereert met de opties en het breedtebereik van dat tabblad.
- Pas de opties aan – taal, thema, breedte, uitlijning, de zichtbaarheidsvinkjes. Elke wijziging vraagt en rendert opnieuw; het codevak wijkt nooit af van het voorbeeld.
- 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.
- 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