Gebeurtenissen
Envelop
Elke gebeurtenis heeft dezelfde envelop; d bevat de typespecifieke payload die hieronder wordt beschreven.
| Veld | Type | Betekenis |
|---|---|---|
v | int | Envelopversie. Vandaag 1 |
t | string | Gebeurtenistype, uit de tabel hieronder |
op | create | update | delete | create, update (verrijking van hetzelfde id) of delete |
id | string | Stabiele identiteit. Ontdubbel hierop |
ts | int (ms) | Wanneer het op X gebeurde, in ms sinds de epoch. X geeft geen tijdstip voor profielwijzigingen, volgen en ontvolgen, nieuwe geverifieerde volgers en verwijderde berichten: bij die gebeurtenissen is het het moment waarop wij het detecteerden |
sid | string | Streampositie voor replay; aanwezig op de stream en in de historie |
target.id | string | Numeriek X-id van het gevolgde account (voor search.match: van de auteur van het bericht) |
target.screen_name | string | Handle van het gevolgde account |
target.name | string | De weergavenaam van het account |
d | object | Typespecifieke payload |
Gebeurtenistypen
| Type | Categorie | Betekenis |
|---|---|---|
tweet.create | Berichten | Het account plaatste iets nieuws |
tweet.reply | Berichten | Het reageerde op iemand; reply_to bevat het bericht waarop werd gereageerd, met tekst en media |
tweet.retweet | Berichten | Het repostte iemand; retweet_of bevat het oorspronkelijke bericht volledig |
tweet.quote | Berichten | Het citeerde iemand; quoted bevat het geciteerde bericht volledig |
tweet.edit | Berichten | Het bewerkte een bericht; de gebeurtenis bevat de nieuwe versie, en edit_of de versie die ze vervangt |
tweet.delete | Berichten | Een bericht dat het account had gepubliceerd is verdwenen |
profile.name | Profiel | Weergavenaam gewijzigd |
profile.screen_name | Profiel | Handle gewijzigd |
profile.bio | Profiel | Bio gewijzigd |
profile.location | Profiel | Locatie gewijzigd |
profile.url | Profiel | Profiellink gewijzigd |
profile.avatar | Profiel | Avatar gewijzigd; old en new zijn afbeeldings-URL's |
profile.banner | Profiel | Banner gewijzigd; old en new zijn afbeeldings-URL's |
profile.pinned | Profiel | Vastgezet bericht gewijzigd; tweet en old_tweet bevatten de berichten zelf |
profile.verified | Profiel | Verificatiebadge verschenen of verdwenen |
follow.add | Volgrelaties | Het account is iemand gaan volgen; user is het volledige profiel van dat account |
follow.remove | Volgrelaties | Het account volgt iemand niet meer |
followers.verified.add | Volgrelaties | Een geverifieerd account is het gaan volgen; user bevat bio, aantallen, locatie en registratiedatum |
account.status | Account | Het account werd beschermd, geschorst of niet beschikbaar, of weer actief |
search.match | Zoeken | Iemand plaatste iets dat overeenkomt met een van uw trefwoorden; keyword zegt welk, author is diens volledige profiel |
X geeft geen tijdstempel voor "is iemand gaan volgen" of "heeft een volger gekregen", dus voor die gebeurtenissen is ts het moment waarop wij de wijziging opmerkten.
Payloads
Vijf payloadvormen dekken alle achttien typen.
Tweet-payload
De d van tweet.create, tweet.reply, tweet.retweet en tweet.quote, en de basis van search.match.
| Veld | Type | Betekenis |
|---|---|---|
tweet_id | string | Het id van het bericht, als string |
kind | tweet | reply | retweet | quote | Wat voor soort bericht het is |
text | string | Volledige tekst (inclusief lange berichten) |
lang | string | null | Taal die X heeft gedetecteerd |
author | User | Het account dat het plaatste, als volledige User — hetzelfde object als de auteur van een search.match: handle, naam, bio, avatar, banner, tellers, verificatie, locatie, link en aanmelddatum. Op een mager eerste frame is het het account zoals laatst gelezen; de update bevat het zoals gelezen met het bericht |
reply_to | Brief+ | null | Voor reacties: het bericht waarop wordt gereageerd — een Brief plus screen_name, tweet_id en user_id van de auteur ervan |
retweet_of | Brief | null | Voor reposts: het oorspronkelijke bericht |
quoted | Brief | null | Voor citaten: het geciteerde bericht |
media | string[] | Kale afbeeldings-URL's, één per media-item |
media_items | Media[] | Elk media-item met type, videovarianten en afmetingen |
urls | string[] | Uitgevouwen links in het bericht |
article | Article | null | Bij posts die naar een X-artikel linken: het artikel |
counts | {reply, rt, like, quote, bookmark} | Aantal reacties, reposts, likes, citaten en bladwijzers op het moment dat we het lazen |
views | int | null | Aantal weergaven, wanneer X dat vrijgeeft |
url | string | Canonieke link naar het bericht |
full | bool | false op een eerste, mager create-frame; true zodra de gebeurtenis het hele bericht bevat |
kind_final | bool | true als kind vaststaat. false alleen op een mager eerste frame waarvan kind tweet is: het bericht kan nog een citaat blijken, en de update op hetzelfde id beslist |
kind_was | tweet | null (update only) | Alleen op de update die het soort bericht vastlegt, en alleen als het eerste frame iets anders zei: het soort dat dat frame had (tweet voor een bericht dat een citaat bleek) |
edit_of | Brief | null | Bij tweet.edit: de versie die deze vervangt (haar id, en tekst en auteur als we die hadden) |
{
"v": 1,
"t": "tweet.create",
"op": "create",
"id": "tweet:2097879002992070835",
"ts": 1789012345678,
"sid": "1789012346012-0",
"target": {
"id": "1652541",
"screen_name": "Reuters",
"name": "Reuters"
},
"d": {
"tweet_id": "2097879002992070835",
"kind": "tweet",
"text": "Ash-covered shoes and a president in crisis…",
"lang": "en",
"author": {
"id": "1652541",
"screen_name": "Reuters",
"name": "Reuters",
"bio": "Top and breaking news, pictures and videos from Reuters.",
"avatar": "https://pbs.twimg.com/profile_images/1874154135869616128/nJDmubGJ_normal.jpg",
"banner": "https://pbs.twimg.com/profile_banners/1652541/1573687397",
"followers": 25900000,
"following": 1150,
"tweets": 1080000,
"location": "Around the world",
"url": "https://www.reuters.com",
"verified": true,
"verified_type": "Business",
"protected": false,
"created_at": "2007-03-20T17:46:05Z",
"category": null
},
"reply_to": null,
"retweet_of": null,
"quoted": null,
"media": [
"https://pbs.twimg.com/media/….jpg"
],
"media_items": [
{
"type": "photo",
"url": "https://pbs.twimg.com/media/….jpg",
"expanded_url": "https://x.com/Reuters/status/2097879002992070835/photo/1",
"width": 1200,
"height": 675
}
],
"urls": [
"https://reut.rs/…"
],
"counts": {
"reply": 12,
"rt": 40,
"like": 131,
"quote": 3,
"bookmark": 9
},
"views": 20411,
"url": "https://x.com/Reuters/status/2097879002992070835",
"full": true,
"kind_final": true
}
}Een eerste create-frame is bewust mager: het bevat het id, de auteur (author, het account zoals het laatst gelezen is) en de tekst, mogelijk ingekort, zodat het kan vertrekken zodra het bericht gezien wordt; url wijst al naar het bericht. Op dat moment is een citaat niet altijd te onderscheiden van een origineel bericht, dus zo'n frame zegt tweet.create met kind_final: false. De update die volgt op hetzelfde id bevat de volledige payload hierboven en het vastgestelde type: tweet.quote met kind_was: "tweet" als het een citaat was.
{
"v": 1,
"t": "tweet.create",
"op": "create",
"id": "tweet:2097879002992070835",
"ts": 1789012345678,
"sid": "1789012346012-0",
"target": {
"id": "1652541",
"screen_name": "Reuters",
"name": "Reuters"
},
"d": {
"tweet_id": "2097879002992070835",
"kind": "tweet",
"text": "Ash-covered shoes and a president in crisis…",
"author": {
"id": "1652541",
"screen_name": "Reuters",
"name": "Reuters",
"bio": "Top and breaking news, pictures and videos from Reuters.",
"avatar": "https://pbs.twimg.com/profile_images/1874154135869616128/nJDmubGJ_normal.jpg",
"banner": "https://pbs.twimg.com/profile_banners/1652541/1573687397",
"followers": 25900000,
"following": 1150,
"tweets": 1080000,
"location": "Around the world",
"url": "https://www.reuters.com",
"verified": true,
"verified_type": "Business",
"protected": false,
"created_at": "2007-03-20T17:46:05Z",
"category": null
},
"url": "https://x.com/Reuters/status/2097879002992070835",
"full": false,
"kind_final": false
}
}Delete-payload
De d van tweet.delete. Wordt alleen verstuurd voor een bericht dat we hadden gezien en dat nu weg is. De ts is wanneer de verwijdering werd gedetecteerd; de tijd van het bericht zelf staat in het eerdere create-frame.
| Veld | Type | Betekenis |
|---|---|---|
tweet_id | string | Het id van het verwijderde bericht |
url | string | Waar het vroeger stond |
{
"v": 1,
"t": "tweet.delete",
"op": "delete",
"id": "tweet:2097879002992070835:delete",
"ts": 1789012345678,
"sid": "…",
"target": {
"id": "1652541",
"screen_name": "Reuters",
"name": "Reuters"
},
"d": {
"tweet_id": "2097879002992070835",
"url": "https://x.com/Reuters/status/2097879002992070835"
}
}Profielwijziging-payload
De d van elke profile.*-gebeurtenis. op is hiervoor update.
| Veld | Type | Betekenis |
|---|---|---|
field | string | Welk profielveld is gewijzigd; hetzelfde woord als na profile. in het type |
old | any | De vorige waarde |
new | any | De nieuwe waarde |
tweet | Brief (pinned only) | Voor profile.pinned: het nieuw vastgezette bericht |
old_tweet | Brief (pinned only) | Voor profile.pinned: het eerder vastgezette bericht, als we het hadden |
{
"v": 1,
"t": "profile.bio",
"op": "update",
"id": "profile:1652541:bio:9c1d2e3f4a5b",
"ts": 1789012400000,
"sid": "…",
"target": {
"id": "1652541",
"screen_name": "Reuters",
"name": "Reuters"
},
"d": {
"field": "bio",
"old": "Top news and analysis from around the world.",
"new": "Top news, analysis and video from around the world."
}
}Follow-payload
De d van follow.add, follow.remove en followers.verified.add.
| Veld | Type | Betekenis |
|---|---|---|
user | User | Het andere account, als volledige User |
{
"v": 1,
"t": "follow.add",
"op": "create",
"id": "follow:44196397:12:add:496948",
"ts": 1789012400000,
"sid": "…",
"target": {
"id": "44196397",
"screen_name": "elonmusk",
"name": "Elon Musk"
},
"d": {
"user": {
"id": "12",
"screen_name": "jack",
"name": "jack",
"bio": "…",
"avatar": "https://pbs.twimg.com/profile_images/…",
"banner": null,
"followers": 6400000,
"following": 4200,
"tweets": 29000,
"location": "",
"url": null,
"verified": true,
"verified_type": "blue",
"protected": false,
"created_at": "2006-03-21T20:50:14Z",
"category": null
}
}
}Accountstatus-payload
De d van account.status. Een status is active, protected (berichten alleen zichtbaar voor goedgekeurde volgers), suspended (door X) of unavailable (gedeactiveerd, verwijderd of om een andere reden niet zichtbaar). ts is wanneer wij de wijziging detecteerden.
| Veld | Type | Betekenis |
|---|---|---|
old | active | protected | suspended | unavailable | De status ervoor |
new | active | protected | suspended | unavailable | De status nu |
reason | string | null | De bewoording van X, als die er is (bijvoorbeeld Suspended) |
{
"v": 1,
"t": "account.status",
"op": "update",
"id": "account:9000002:status:active>suspended:497010",
"ts": 1789236000000,
"sid": "…",
"target": {
"id": "9000002",
"screen_name": "some_account",
"name": "Some Account"
},
"d": {
"old": "active",
"new": "suspended",
"reason": "Suspended"
}
}Zoektreffer-payload
De d van search.match: een Tweet-payload plus drie velden over de treffer. De target van de envelop is de auteur van het bericht, die niet een van uw targets hoeft te zijn.
| Veld | Type | Betekenis |
|---|---|---|
keyword.id | int | Id van het trefwoord dat overeenkwam |
keyword.query | string | De query ervan |
keyword.label | string | null | Het label ervan, als u er een hebt ingesteld |
author | User | Het volledige profiel van de auteur |
author_is_target | bool | true als de auteur ook een account is dat op dit systeem wordt gevolgd |
… | TweetPayload | Elk veld van de Tweet-payload |
{
"v": 1,
"t": "search.match",
"op": "create",
"id": "search:12:2097900000000000000",
"ts": 1789012500000,
"sid": "…",
"target": {
"id": "9000001",
"screen_name": "some_trader",
"name": "Some Trader"
},
"d": {
"tweet_id": "2097900000000000000",
"kind": "tweet",
"text": "$SOL breaking out…",
"lang": "en",
"author": {
"id": "9000001",
"screen_name": "some_trader",
"name": "Some Trader",
"bio": "…",
"followers": 1200,
"verified": false,
"…": "…"
},
"keyword": {
"id": 12,
"query": "($SOL OR \"Solana\") -filter:retweets",
"label": "solana"
},
"author_is_target": false,
"media": [],
"media_items": [],
"urls": [],
"url": "https://x.com/some_trader/status/2097900000000000000",
"full": true
}
}