X-embedgenerator (Twitter)
Introduktion
Toollects X-embedgenerator (Twitter) omvandlar valfri inläggs-URL till den officiella embedkoden som X publicerar för att visa inlägg på andra webbplatser – twitter-tweet-blockquoten plus widgets.js – med ett klick, en förhandsvisning innan du kopierar och alla visningsalternativ som X:s eget gränssnitt erbjuder. Klistra in en länk, välj alternativ, förhandsgranska, kopiera, klistra in. Hela cykeln tar sekunder.
Friktionen den tar bort är bekant för alla som har bäddat in ett inlägg för hand. X:s egen utgivardialog producerar visserligen koden men sprider sina val över separata skärmar, exponerar ingen kontroll för att dölja media eller justera, och ger klippembeds ingen numerisk breddreglering alls. Att skriva blockquoten för hand fungerar tills ett felstavat attribut lämnar inlägget som en naken länk för alltid. Detta verktyg monterar exakt den uppmärkning som widgets.js förväntar sig, översätter dina alternativ till rätt data-*-attribut och visar dig den verkliga renderingen innan något når din sida.
Generatorn erbjuder två lägen bakom en flikrad. Inlägg bygger det klassiska kortet för vilket inlägg som helst – text, foton, länkförhandsvisningar – med tema, bredd från 220 till 550 px, gränssnittsspråk, justering, synlighet för konversation och media, Do Not Track och ett alternativ att utelämna den delade script-taggen. Klipp optimerar samma inlägg för sin spelare, med en bredd upp till 1920 px i attributet data-media-max-width som stora videor förtjänar. Båda lägena talar direkt med X:s offentliga oEmbed-slutpunkt – ingen API-nyckel, ingen registrering och ingen Toollect-server mittemellan.
Användningsområden
Att bädda in X-innehåll dyker upp på fler ställen än i ett blogginlägg, och de två lägena delar arbetet naturligt.
Bloggar och redaktionellt innehåll
Ett kommentarinlägg som citerar en offentlig profil, en teknikartikel med annonseringstweeten inbäddad, en sportblogg med höjdpunksklippet – de klassiska fallen. Inläggsläget med standardinställningarna täcker textinlägg; växla till klipläget när inlägget mestadels är en video och spelaren ska äga kolumnen.
Nyhetsredaktioner och livebevakning
Journalister drar in ögonvittnesinlägg och officiella uttalanden i löpande bevakning. Fart räknas, och verifiering likaså – generatorn normaliserar vilken länk kontaktpersonen på plats än delar, vare sig det är en app-dellänk med spårningsparametrar, legacy-former från twitter.com eller fotovisningsvarianter, till en kanonisk referens för inlägget, och förhandsvisningen bekräftar att inlägget fortfarande renderas innan artikeln går ut. Dölj konversation håller en tråd fokuserad på det citerade uttalandet istället för grälet ovanför det.
Dokumentation och tekniskt skrivande
Release notes, changelogs och handledningar citerar allt oftare utvecklingstrådar som primärkällor. Dölj media vecker ihop länkförhandsvisningar till text för en lugnare läsning, språkväljaren visar åtgärdsknappar och tidsstämplar på dokumentationens språk, och Utelämna skript håller sidor fria från dubblerade taggar när widgets.js redan laddas globalt – komponentbibliotek, dokumentationsteman.
Marknadssajter och portföljer
Berömminlägg från kunder som socialt bevis, grundartrådar som varumärkeberättelse. Justering Centrerad placerar ett enskilt vittnesmål i en smal kolumn; Do Not Track signalerar integritetsrespekt till europeisk publik; förhandsvisningen kontrollerar varje kort innan leverans.
Hur det fungerar
Verktyget körs i fyra steg:
- Parsa och kanonisera URL:en – inmatningen matchas mot X-länkgrammatiken för inlägg – ett användarnamn (utan @, 1–15 bokstäver, siffror eller understreck), rutten status och ett snowflake-ID på 15–19 siffror på x.com eller twitter.com med valfria prefix www./mobile./m. Frågeparametrar som ?s=20&t=… ignoreras istället för att städas – den återuppbyggda kanoniska URL:en inkluderar dem helt enkelt aldrig. Rutter utan användarnamn som /i/web/status/… i webbklienten avvisas med ett eget meddelande eftersom oEmbed-slutpunkten inte kan lösa dem.
- Bygg den officiella begäran – dina alternativ blir frågeparametrar på X:s offentliga oEmbed-slutpunkt (publish.x.com/oembed?url=…) – maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script. Slutpunkten är nyckelfri och medvetet utan hastighetsgräns – den finns just för att CMS:er ska kunna omvandla URLs till embeds.
- Hämta den officiella uppmärkningen – exakt en HTTPS-GET returnerar blockquote-HTML:en exakt som X formaterar henne, med dina alternativ redan inbakade som data-*-attribut. Din webbläsare talar direkt med X; ingen Toollect-server vidrör begäran.
- Efterbearbeta och förhandsvisa – serverns script-tagg tas bort och hanteras separat (så att förhandsvisningen laddar widgets.js exakt en gång oavsett hur ofta du omgenererar), klipläget skriver om breddattributet på klientsidan (se nedan varför), och blockquoten går in i förhandsvisningsområdet. Verktyget bevakar det renderade iframen och rapporterar ärligt om den aldrig visas.
Att ändra något alternativ kör hela kedjan igen – ny begäran, färsk uppmärkning, omrenderad förhandsvisning – så koden du kopierar motsvarar alltid det du tittar på.
Stödda URL-format
Generatorn accepterar varje URL-form som identifierar ett inlägg med sitt användarnamn, och avvisar allt annat med ett specifikt meddelande.
Accepterade format
| Format | Exempel | Resultat |
|---|---|---|
| Kanoniskt inlägg | x.com/anvandarnamn/status/1234567890123456789 |
Embed av det inlägget |
| Legacy-domän | twitter.com/jack/status/20 |
Embed av det inlägget |
| Mobilsubdomän | mobile.twitter.com/anvandarnamn/status/… |
Embed av det inlägget |
| www-prefix | www.x.com/anvandarnamn/status/… |
Embed av det inlägget |
| Utan schema | x.com/anvandarnamn/status/… |
Embed av det inlägget |
| Fotovisningsvariant | x.com/anvandarnamn/status/…/photo/1 |
Embed av det inlägget |
| Videovisningsvariant | x.com/anvandarnamn/status/…/video/1 |
Embed av det inlägget |
| Med spårningsparametrar | …?s=20&t=…&ref_src=twsrc%5Etfw |
Embed av det inlägget – parametrar ignorerade |
Visningsvarianter och skräpparametrar efter inläggets ID ignoreras helt enkelt – embeden pekar alltid på inlägget själv, som renderar sina egna media. Prefixet https:// och det avslutande snedstrecket är valfria.
Avvisade format
| URL-form | Avvisningsgrund |
|---|---|
x.com/i/web/status/1234567890123456789 |
Webbklientens rout utan användarnamn – oEmbed-slutpunkten svarar 404. Öppna länken och kopiera den fullständiga adressen med användarnamn |
x.com/anvandarnamn |
En profil – inget inlägg att bädda in |
x.com/intent/tweet?text=… eller x.com/intent/retweet?tweet_id=… |
Delningsintents – handlingar, inte innehåll |
x.com/hashtag/amne eller x.com/search?q=… |
Hashtag- och söksidor – inget enskilt inlägg |
facebook.com/…, vilken annan host som helst |
Ingen X-domän |
Fallet utan användarnamn under /i/web/status/… förtjänar betoning eftersom det är den vanligaste överraskningen. X levererar den formen när en inläggs-URL kopieras från webbklienten utan att öppna den. Generatorn vägrar den medvetet – att skicka den till slutpunkten skulle ge ett tyst misslyckande – och ber dig om den fullständiga länken. X (Twitter)-URL-parsern på denna sajt löser sådana länkar till deras kanoniska form om du hellre lagar URL:en än kopierar om henne.
Embedkodens anatomi
Utdata är samma kod som X:s maskineri producerar, med dina alternativ tillämpade. En inläggsembed med standardinställningarna ser ut så här (innehåll förkortat):
<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>
Genomgång av delarna:
- Blockquote-klassen – twitter-tweet är den krok widgets.js söker efter. Varje element med denna klass på sidan blir ett renderat kort.
- data-width (inlägg) – den maximala renderingsbredden i pixlar. X klämmer värdet internt till cirka 250–550 oavsett vad som står – generatorn håller därför ditt valda värde inom det ärliga intervallet.
- data-media-max-width (klipp) – hur breda medierna får växa inom kortet, upp till 1920 px. Endast närvarande i klipläget – se Inlägg mot klipp för varför generatorn skriver detta attribut själv.
- data-theme="dark" – endast närvarande när Mörk är valt. Renderar ljus text på mörk botten med kortets mörka utseende.
- data-lang – närvarande så snart ett konkret språk är valt, engelska inkluderat. Lokaliserar widgetens egna texter – tidsstämpelformat, bron Läs mer, åtgärdsetiketter – men aldrig själva inläggstexten. Endast Automatisk utelämnar attributet; widgets.js faller då tillbaka på sidans språk.
- data-conversation="none" – tillagd av Dölj konversation på ett svar. Utan detta attribut förutsätter widgets.js en ihopvikad sammanfattning av det överordnade inlägget.
- data-cards="hidden" – tillagd av Dölj media. Länkförhandsvisningar, foton och videor förblir ihopvikta; bara texten renderas.
- data-align – låter kortet flyta vänster eller höger, eller centrerar det, relativt sin behållare. Frånvarande vid justering Ingen.
- data-dnt="true" – tillagd av opt-out från personalisering. Säger till X att inte använda embeden och dess sidvisningar för personliga förslag eller personlig reklam.
- Stycket med attributionraden – det synliga innehållet innan widgets.js kör – inläggstext, författare, och en länk till inlägget. Detta är den permanenta upplevelsen för besökare utan JavaScript eller med blockerat skript, och degraderar graciöst till en vanlig citering.
- Script-taggen – widgets.js från platform.x.com, asynkront laddad. En per sida räcker för hur många embeds som helst – exakt syftet med alternativet Utelämna skript.
Inlägg mot klipp
Två flikar, ett inlägg, två olika jobb. Tabbyte omgenererar omedelbart – det finns ingen inaktuell status.
| Fliken Inlägg | Fliken Klipp | |
|---|---|---|
| Bäst för | Textinlägg, foton, länkförhandsvisningar | Inlägg vars poäng är videon |
| Breddintervall | 220–550 px (standard 550) | 560–1920 px (standard 560) |
| Breddattribut | data-width från servern | data-media-max-width, omskriven av verktyget |
| Tema (ljust/mörkt) | Tillgängligt | Gömt – spelaren har ingen ljus variant |
| Dölj konversation | Tillgängligt | Gömt – en answers föräldrakontext är text, inte videon |
| Dölj media | Tillgängligt | Gömt – medierna är poängen |
| Språk, justering, Do Not Track, Utelämna skript | Tillgängligt | Tillgängligt |
Varför skriver verktyget data-media-max-width själv? För att X:s oEmbed-slutpunkt inte kan det. Tester bekräftar att slutpunkten klämmer varje parameter maxwidth – inklusive videoinlägg – till inläggsintervallet 220–550, och aldrig sänder attributet data-media-max-width som klippembeds bär. Det attributet hör till flödet inuti publish.x.com, där Embedded Video-generatorn dekorerar uppmärkningen i efterhand. Generatorn reproducerar exakt den dekorationen – den tar bort serverns avklämda data-width och skriver din valda bredd i data-media-max-width, så att en 1200-px-klippembed verkligen är 1200 px bred på din sida.
I praktiken är beslutsregeln enkel. Om inlägget läses bra som kort – Inlägg. Om att ta bort spelaren tömmer det – Klipp, och ge spelaren utrymmet den behöver.
Embedinställningar
Varje kontroll mappar till ett attribut eller en begäransparameter. Standardvärden inom parentes.
Språk (standard: sidans språk) – erbjuder Automatisk plus de 34 språk X levererar med för widgettexter. Varje konkret val, engelska inkluderat, sänts som parametern lang och skrivs i data-lang – så förblir widgetens krom identisk var du än klistrar in koden. Det lokaliserar tidsstämplar och åtgärdsetiketter runt inlägget, aldrig inläggets ord. Automatisk utelämnar både parameter och attribut – widgets.js renderar då i det språk värdsidan deklarerar; det passar flerspråkiga webbplatser men gör utdatan beroende av inklistringsstället.
Tema (Ljust, endast fliken Inlägg) – Mörkt skickar theme=dark och skriver data-theme="dark". Ljust är attributets frånvaro.
Bredd (550 inlägg, 560 klipp) – skriven som exakt tal,klämd till det giltiga intervallet så snart du lämnar fältet. Inlägg skickar maxwidth; klipp driver klientomskrivningen av data-media-max-width. Värden utanför en fliks intervall överlever inte fältet – 9999 i Inlägg blir 550, 100 i Klipp blir 560.
Justering (Ingen) – Vänster, Höger eller Centrerad skriver align i begäran och data-align i blockquoten. Centrerad är det tysta sättet att placera ett enskilt kort i en bred artikel; Höger låser artikeltexten flyta runt den.
Dölj konversation (av, endast fliken Inlägg) – skickar hide_thread=true, som servern översätter till data-conversation="none". Meningsfullt bara på svar; på ett fristående inlägg ändrar det ingenting.
Dölj media (av, endast fliken Inlägg) – skickar hide_media=true, översatt till data-cards="hidden". Embeden blir en ren citering.
Utelämna widgets.js-skripttaggen (av) – skickar omit_script=true och undertrycker script-taggen i utdatan. För sajter som redan laddar widgets.js en gång globalt – flera embeds, ett skript. Har din sida ingen widgets.js, lämna detta av; blockquoten ensam renderas för alltid som statisk text.
Avstå från X-personalisering (av) – skickar dnt=true och skriver data-dnt="true". X dokumenterar detta som att utesluta embeden och dess sidor från personaliserade förslag och personaliserad reklam.
Användning
- Klistra in inläggets URL i inmatningsfältet – valfritt accepterat format från tabellen ovan.
- Tryck Generera (eller Enter). Koden visas i utdatarutan och förhandsvisningen öppnas automatiskt med den verkliga X-renderingen.
- Välj flik – Inlägg för standardkortet, Klipp för klippcentrerade inlägg. Byte omgenererar med den flikens alternativ och breddintervall.
- Justera alternativen – språk, tema, bredd, justering, synlighetskryssrutorna. Varje ändring frågar och renderar på nytt; kodrutan avviker aldrig från förhandsvisningen.
- Kontrollera diagnostiken – om inget kort visas säger varningen över utdatan om X:s skript var blockerat eller om inlägget inte kan bäddas in.
- Kopiera koden och klistra in den i din sidas HTML där inlägget ska visas.
Inmatning som matchar inget stött format rensar utdatan och förklarar sig – antingen meddelandet om ogiltig länk eller, för rutter utan användarnamn, begäran om den fullständiga länken. Rensa nollställer inmatning, kod och förhandsvisning i ett steg.
Handledning
Följ en verklig länk genom båda flikarna.
Steg 1 – Klistra in en app-dellänk. Kopiera en inläggs-URL som mobilappen delar den, spårningsparametrar och allt:
https://twitter.com/new27brigade/status/2090248985391014324?s=20&t=FakeNonce
Tryck Generera. Parsaren läser förbi legacy-domänen och parametrarna s och t direkt till inlägget själv – new27brigade, status 2090248985391014324 – och den genererade koden pekar på den kanoniska formen. Förhandsvisningen öppnas och kortet renderas.
Steg 2 – Mörka ner. Sätt Temat till Mörkt. Koden får data-theme="dark" och förhandsvisningen renderas i mörk palett. Notera den nya anropet – temat bakas in serverside, därför ringer varje alternativändring slutpunkten igen istället för att redigera strängen lokalt.
Steg 3 – Försmalna. Skriv 350 i Bredd och tryck Enter. Attributet blir data-width="350" och kortet krymper. Testa att skriva 9999 och klicka någon annanstans – fältet studsar tillbaka till 550, för X skulle klämma där ändå.
Steg 4 – Lokalisera gränssnittet. Sätt Språket till japanska (日本語). Koden får data-lang="ja" och tidsstämpeln i förhandsvisningen omformateras enligt japansk konvention. Inläggstexten förblir exakt som skriven – inställningen styr bara X:s egna etiketter.
Steg 5 – Växla till Klipp. Klicka på fliken Klipp. Verktyget anropar igen med klippparametersättet och skriver om uppmärkningen – data-width försvinner, data-media-max-width="560" dyker upp, och temaväljaren försvinner från panelen. Dra bredden till 1200 – spelaren expanderar. Detta inlägg är ett militärt övningsklipp, så klipläget passar det; för ett textmeddelande skulle du växla tillbaka.
Steg 6 – Kopiera och skeppa. Tryck Kopiera och klistra in i en enkel HTML-sida. Öppna den – spelaren renderas i full bredd. Det är hela kontraktet – samma kod, samma rendering, på din sida.
Förhandsvisning och diagnostik
Förhandsvisningen kör X:s äkta widgets.js mot din exakta blockquote, så den faller exakt där din sida kommer att falla. Två varningar, två olika betydelser:
| Varning | Vad det betyder | Vad man gör |
|---|---|---|
| „X widgets.js kunde inte laddas – ofta en annonsblockerare” | Webbläsaren kunde inte alls hämta platform.x.com/widgets.js | Tillåt domänen i blockeraren eller prova ett rent privat fönster. Den publicerade embeden kommer att falla likadant för besökare med den blockeraren |
| „Den officiella embeden renderades inte” | Skriptet körde men producerade inget kort | Inlägget kan vara raderat, kontot skyddat, URL:en fel eller upphovspersonen har inaktiverat inbäddning. Verifiera på x.com; spelar den där men inte här är inbäddning avstängd hos upphovspersonen |
Båda varningarna utlöses först efter generösa väntan – tjugo sekunder för skriptnedladdningen, femton till för renderingen – så långsamma uppkopplingar inte ger falska larm. Ett inbäddningsbart inlägg renderas gott inom dessa fönster.
En mekanisk detalj värd att känna till – första genereringen laddar widgets.js och behåller den för sessionen. Omgenereringar – nya alternativ, flikbyten – återanvänder den och bjuder in den att processa den nya blockquoten, så att senare förhandsvisningar visas snabbare än den första.
Proffstips
- Para ihop den med URL-parsern. Parsern analyserar och städar en länk – typ, snowflake-ID, spårningsnycklar; generatorn omvandlar den rena länken till kod. Arkivera med parsern, publicera med generatorn.
- En script-tagg, många embeds. Sidor med flera inlägg bör ladda widgets.js en gång – kryssa Utelämna skript vid varje utdata utom den första, eller ladda den själv i sajtmallen och utelämna överallt.
- Dölj media gör inlägget till ett citat. För redaktionella citat där en länkförhandsvisning distraherar lämnar Dölj media plus Dölj konversation bara orden och attributionen.
- Centrera enskilda vittnesmål. Justering Centrerad i en bred layout läses som medveten design; vänsterställning, defaulten i varje CMS, är sällan vad en marknadssida vill ha.
- Matcha widgetspråket mot sidans språk. En japansk sida med engelska RETWEET-knappar ser ofullständig ut – konkreta språk fäster krommet, den del du ansvarar för; körs samma embed på flerspråkiga mallar över flera språk, välj i stället Automatisk och låt widgets.js följa varje värdsida.
- Sätt Do Not Track för EU-vända sidor. Flaggan är dokumenterad av X och planterar sig genom embeden – en signal av ett klick att kortet respekterar besökarens integritet.
- Designa för kolumnen, sätt sedan bredden. Inlägg slutar fysiskt på 550 px; förhandsvisningen visar det verkliga resultatet vid din behållares storlek innan du binder dig.
Alternativ
Hur annars kan du få ett inlägg på en sida?
| Metod | Officiell uppmärkning | Alternativtäckning | Live-förhandsvisning | Beroenden |
|---|---|---|---|---|
| Detta verktyg | Ja – servergenererat | Full uppsättning, båda lägena | Ja | Inga |
| Delningsmenyn på x.com → Bädda in inlägg (publish.x.com) | Ja | Partiell – ingen media-döljning, ingen justering, ingen script-utelämning, ingen numerisk klippbredd | Endast i dialogrutan | Inga |
| Handskriven blockquote + widgets.js | Korrekt format om du är noggrann | Allt du skriver – lätt att felskriva | Nej | widgets.js |
| X API v2 + egen renderer | Nej – bara JSON | Totalt, byggt av dig | Bygg det själv | Betald API-åtkomst |
| Tredjeparts-embedtjänster | Deras egen insvepta uppmärkning | Varierar | Ibland | Deras skript och spårning |
X:s egen delningsdialog är närmaste alternativ och källan till samma blockquote – men dess anpassning stannar vid språk, dölj konversation, opt-out av personalisering och en grov klippstorlek, och erbjuder ingen väg till hide_media, align eller en exakt maxwidth. API-rutten köper total kontroll till pay-per-use-priser och lämnar ändå renderingen åt dig. Tredjepartstjänster skjuter in sina egna skript. Generatorn ockuperar det praktiska mittläget – officiell uppmärkning, fullständiga alternativ, omedelbar visuell bekräftelse.
Mot de officiella API:erna
Tre officiella ytor rör inbäddning av inlägg, och generatorn är byggd direkt på den vänligaste.
| Kapacitet | Offentlig oEmbed-slutpunkt | Dialogrutan publish.x.com | X API v2 |
|---|---|---|---|
| Syfte | URL → embed-HTML, programmatiskt | URL → embed-HTML, för hand | Fullständiga plattformsdata och postning |
| Autentisering | Ingen | Ingen | Nycklar + pay-per-use-fakturering |
| Kostnad | Gratis | Gratis | Cirka $0,005 per läst inlägg sedan februari 2026 – ingen gratisnivå |
| Hastighetsgränser | Inga dokumenterade | Endast praktiska gränser | Mätta credits |
| Returnerar färdig kod att klistra in | Ja – blockquote + skript | Ja | Nej – JSON du renderar själv |
| Parameter täckning | maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script | Delmängd – se Alternativ | Irrelevant – du bygger vyn |
Generatorn anropar oEmbed-slutpunkten exakt som dokumenterat – samma begäran som ett CMS-plugin skulle göra, gjord av din webbläsare. Den lägger till vad slutpunkten saknar – inmatningsnormalisering, data-media-max-width-dekorationen för klipläget, skripttagghantering och diagnostik. X API v2 är medvetet utanför – sedan dess prisändring i februari 2026 strök gratisnivån kostar läsning av inlägg genom den pengar för kapaciteter som den gratis slutpunkten redan täcker för inbäddningsändamål.
Embedgenerator mot URL-parsern
Toollect levererar två X-verktyg som accepterar samma länkar, och arbetsfördelningen förtjänar en blick:
| Fråga | URL-parsern | Denna generator |
|---|---|---|
| Vilka linktyper? | Alla sju typer – inlägg, profiler, listor, spaces, evenemang, hashtags, sökningar | Bara inlägg |
| Vad levererar den? | Rena kanoniska URLs, widget-iframe-URLs, delningsintents | Färdig embedkod att klistra in |
| Städar spårningsparametrar? | Ja – och listar varje borttagen nyckel | Onödigt – utdatan är nyskapad kod |
| Löser /i/web/status/…? | Ja – mappar till den kanoniska formen med användarnamn | Nej – ber om den fullständiga länken |
| Nätverksförfrågningar? | Noll – all parsning lokal | En oEmbed-GET per generering, plus X:s skript för förhandsvisningen |
| Visar inläggsmetadata? | Bara struktur – inget innehåll | Förhandsvisningen visar det faktiskt renderade inlägget |
Parsern är analitikern; generatorn är byggmästaren. En publiceringsarbetsflöde använder legitimt båda i ordning – analysera för att identifiera och normalisera vart en kaotisk länk pekar, sedan generera för att få den på sidan. De är grammatiskt ense genom konstruktion – en länk parsern accepterar som inlägg är en länk generatorn bäddar in.
Vad den inte gör
Gränserna, namngivna så att verktyget aldrig övertros:
- Den bäddar inte in tidslinjer, profiler, listor, space eller hashtags. Det är andra X-ytor med annan uppmärkning; slutpunktens profilstöd producerar tidslinjeankare, inte inläggskort, och generatorn vägrar dem. Ett dedikerat verktyg vore det ärliga fordonet om efterfrågan finns.
- Den löser inte länkar utan användarnamn. /i/web/status/… anländer utan användarnamnet som den kanoniska formen kräver, och verktyget gissar inte. Öppna länken, kopiera fullständiga URL:en.
- Den löser inte t.co-förkortare. En naken förkortad länk bär ingen inläggsidentitet; klistra in destinationen.
- Den kringgår varken integritet eller radering. Skyddade konton, raderade inlägg och upphovspersoner som inaktiverat inbäddning producerar korrekt kod som inte renderar något. Inget verktyg kan ändra det.
- Den verifierar inte inlägg före begäran. Valideringen är grammatisk. Om inlägget finns svarar bara slutpunktens svar – ett otillgängligt inlägg framträder som misslyckad begäran.
- Den stylar inte widgeten. Färger, typsnitt och krom inne i det renderade kortet är X:s affär. Endast placering (justering, bredd) och närvaro (konversation, media) är dina.
- Den installerar inte koden. Det du kopierar är det du klistrar in; verktyget kan inte nå in i ditt CMS eller page builder.
Felsökning
| Problem | Orsak | Lösning |
|---|---|---|
| „Inget inlägg hittades i den URL:en” | Profil-, intent-, sök- eller främmande länk – eller ett felformat ID | Använd fullständiga formen anvandarnamn/status/id; kontrollera att ID:t har 15–19 siffror |
| „Använd den fullständiga inläggslänken” vid inklistring av /i/web/status/… | Webbklientens rout utan användarnamn | Öppna länken i webbläsaren och kopiera fullständiga adressen med användarnamn |
| „Det gick inte att nå X” vid generering | Offline, blockerad eller slutpunkten svarade ett fel – inklusive inlägg som inte längre finns | Kontrollera uppkopplingen; tillåt publish.x.com i blockerare; öppna inlägget på x.com för att bekräfta dess existens |
| „X widgets.js kunde inte laddas” | Annonsblockerare eller integritetstillägg blockerar platform.x.com | Tillåt domänen för denna sida – och testa igen för dina besökare skull |
| „Den officiella embeden renderades inte” med en till synes giltig länk | Raderat inlägg, skyddat konto eller av upphovspersonen inaktiverad inbäddning | Verifiera på x.com; inbäddningstillståndet är upphovspersonens inställning, inte din |
| Fliken Klipp vägrar en bredd på 400 px | Klippbredder börjar på 560 av design | Använd fliken Inlägg för 220–550; de två intervallen tjänar olika layouts |
| Min inskrivna bredd hoppade till 550 eller 560 | Värden utanför intervallet kläms när fältet tappar fokus | Medvetet – X klämmer dem serverside ändå; skriv inom intervallet |
| Fungerar i förhandsvisningen, död på min sida | Sajtens CSP blockerar X:s domäner, eller CMS:et sanerade script-taggen | Lägg till https://platform.x.com (och https://platform.twitter.com för legacy-snuttar) till script-src och frame-src; klistra in i rå HTML |
| Jag bytte språk men inläggstexten blev engelska | Av design – data-lang lokaliserar widgetens krom, aldrig innehållet | Förväntat beteende; inlägget visas som det skrevs |
Integritet och datahantering
Detta verktyg är ärligt om sin trafik, större än dess syskons med noll förfrågningar men fortfarande direkt till X.
- Generering skickar inläggets URL till X, en gång per handling. Att trycka Generera eller ändra ett alternativ gör exakt en HTTPS-GET till publish.x.com/oembed med inläggets kanoniska URL och dina alternativ. Begäran går från din webbläsare till X:s infrastruktur – ingen Toollect-server proxyar, loggar eller ser den.
- Förhandsvisningen laddar X:s eget maskineri. Att rendera kortet hämtar widgets.js från platform.x.com, det renderade iframe:n från X:s syndikeringsinfrastruktur och media från dess bildvärdar – precis den trafik den kopierade koden kommer att producera på dina läsares webbläsare.
- Do Not Track planterar sig vidare. Med alternativet på bär den genererade koden data-dnt="true", den av X dokumenterade signalen att utesluta embeden och dess sidvisningar från personliga förslag och personlig reklam.
- Inget konto, ingen lagring, ingen analys. Verktyget behåller ingen status mellan besök; att stänga fliken avslutar allt.
- Att publicera koden betyder att dina besökare talar med X. Det är inbäddningens natur – värt att sägas klart. Behöver du ett strikt offline X-arbetsflöde utför X (Twitter)-URL-parsern på denna sajt hela sitt jobb med noll nätverksförfrågningar.
Teknisk specifikation
Detaljer:
- Slutpunkt – GET https://publish.x.com/oembed?url={canonical}, nyckelfri, JSON-svar, inga dokumenterade hastighetsgränser; parametrar maxwidth, theme, lang, hide_thread, hide_media, align, dnt, omit_script
- Ingangsgrammatik – värdar x.com / twitter.com med valfria prefix www. / mobile. / m.; användarnamn [A-Za-z0-9_]{1,15}; inläggs-ID på 15–19 siffror; schema, avslutande snedstreck, visningsvarianter (/photo/1, /video/1, …) och frågesträngar tolererade och slängda
- Kanonisk utdata-URL – https://x.com/{username}/status/{id}
- Inläggsbreddskontrakt – 220–550 px inklusive (slutpunkten klämmer yttervärden; historisk default 325, verktygsdefault 550); klippbredd 560–1920 px tillämpad klientside på data-media-max-width eftersom slutpunkten inte kan sända den
- Språk – Automatisk eller valfri av 34 X-widgetlokaler; varje konkret val skriver data-lang, engelska inkluderat – endast Automatisk utelämnar det
- Skripthantering – serverns script-taggar tas bort; https://platform.x.com/widgets.js laddas en gång per session med en timeout på 20 sekunder; renderbevakaren frågar iframe:n var 500:e ms upp till 15 sekunder, och rapporterar sedan
- Omgenereringspolicy – varje alternativ- eller flikändring gör en ny oEmbed-begäran; identiska begäranden i luften kollapsas av en busy-guard
- Self-hosting av utdatan kräver – script-src och frame-src som tillåter https://platform.x.com (plus https://platform.twitter.com för legacy-snuttar) och img-src som tillåter https://abs.twimg.com och https://pbs.twimg.com
- Webbbläsarstöd – alla moderna webbläsare (clipboard-API; ES5-runtime som widgets.js själv kräver)
Funktioner
- Genererar officiell X (Twitter)-embedkod från valfri inläggs-URL med ett klick – lägena inlägg och klipp i ett enda verktyg
- Spegelar X:s egna utgivarealternativ – ljust/mörkt tema, Automatisk plus 34 gränssnittsspråk, exakt bredd, justering, dölj konversation, dölj media
- Se en förhandsvisning i realtid renderad av X:s officiella widgets.js innan du klistrar in koden
- Styr bredden precist – 220–550 px för inlägg, 560–1920 px för klipp via data-media-max-width
- Respektera dina besökare – inbyggd Do Not Track-brytare och ett alternativ för att utelämna dubblerade widgets.js-taggar
- Gratis webbgenerator med tydlig diagnostik när X:s skript är blockerat – ingen API-nyckel, ingen registrering