API X (Twitter) Commenti
Stato di salute dell'API
- Operatività nelle ultime 24 ore
- Normale
- Buono / normale
- Disponibile
- Limitato
- Quasi del tutto inattivo
Ultime 24 ore
Ultimi 30 giorni
Raccogli le risposte sotto un post X (Twitter). Ogni risposta ha testo, autore, numero di follower dell'autore e i propri dati di engagement. Invia l'id numerico del post originale. L'intera conversazione non è garantita.
Invia POST https://api.everyinfra.com/api/v1/social con platform impostato su twitter e action impostato su comments. Prezzo $0.56 per 1.000 richieste ($0.000556 per chiamata). Le chiamate non riuscite e i risultati vuoti non vengono addebitati. Sincrona. Per i job più lenti, aggiungi "mode": "async" al corpo della richiesta, recupera il job_id ed esegui il polling.
X (Twitter) Comments legge le risposte pubblicate sotto un post di X, dato l'id numerico del post. Ogni riga è una risposta: il testo completo, il link, quanti like, repost, risposte e visualizzazioni ha ricevuto, quando è stata pubblicata e chi l'ha scritta, fino all'handle, al nome visualizzato, al link del profilo e alla dimensione del pubblico dell'autore. I team di brand, assistenza e ricerca la usano per capire come le persone rispondono a un post: le reazioni a un annuncio, i reclami dei clienti sotto il post di un brand o il tono della conversazione attorno a una dichiarazione pubblica.
L'id che invii identifica il post originale, mentre l'id di ogni riga restituita identifica una risposta. Il reply_count di una risposta indica se ha avviato una conversazione secondaria, e author_follower_count ti dice fin dove arriva la voce dell'autore della risposta. Per leggere il testo e i numeri del post originale, chiama la funzionalità X (Twitter) Post details con lo stesso id.
Prompt per l'AI
#Aiutami a scrivere uno script di raccolta dei dati con l'endpoint X (Twitter) Commenti di EveryInfra (twitter/comments).
Come funziona l'endpoint:
- Richiesta: POST https://api.everyinfra.com/api/v1/social con l'header Authorization: Bearer <chiave API>. Leggi la chiave dalla variabile d'ambiente EVERYINFRA_API_KEY e non scriverla mai direttamente nel codice.
- Nel corpo della richiesta imposta platform su twitter e action su comments, e inserisci i parametri in params.
- Parametri obbligatori:
- id: ID numerico del post per post o comments, corrispondente alle cifre dopo x.com/username/status/. È consigliabile memorizzarlo come stringa per evitare la perdita di precisione dei numeri interi grandi in JavaScript.
- Parametri facoltativi:
- tweet_id: Input di compatibilità per id, con priorità inferiore rispetto a id; non sostituisce il campo pubblico obbligatorio id.
- limit: Numero massimo di righe da restituire in questa chiamata: un intero da 1 a 50. Se lo ometti, viene applicato il valore predefinito; una chiamata può restituire meno righe. (predefinito: 20)
- Restituisce un elenco di record. Campi principali di ogni record: id, url, text, like_count, retweet_count, reply_count, view_count, posted_at, author_username, author_name, author_url, author_follower_count; 37 campi in totale, elenco completo su https://api.everyinfra.com/api/v1/social/catalog?platform=twitter.
- Esempio di corpo della richiesta:
{
"platform": "twitter",
"action": "comments",
"params": {
"id": "2103610284464316469"
}
}
- Prezzo: $0.56 per 1.000 richieste; le richieste non riuscite e i risultati vuoti non vengono addebitati.
- Per decine o centinaia di target, aggiungi "mode": "async" al corpo: ricevi subito un job_id ed esegui il polling su GET https://api.everyinfra.com/api/v1/jobs/{job_id} per ottenere il risultato.
- In caso di 422, correggi la richiesta usando i nomi dei parametri e i valori consentiti suggeriti nell'errore; in caso di 429 o 503, attendi il tempo indicato da Retry-After e riprova.
Prima di scrivere il codice, chiedimi quali target mi servono, quanti, quali campi e quale formato di output voglio; poi conferma con me il piano e il costo indicativo.Parametri della richiesta
#| Nome | Posizione | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|---|
Authorization | header | string | Sì | - | Bearer seguito dalla tua chiave API. Creala nella console; non inserirla mai in un URL o in un repository di codice. |
platform | body | string | Sì | twitter | Identificativo della piattaforma, valore fisso. |
action | body | string | Sì | comments | Identificativo della funzionalità, valore fisso. |
id | body.params | string | Sì | - | ID numerico del post per post o comments, corrispondente alle cifre dopo x.com/username/status/. È consigliabile memorizzarlo come stringa per evitare la perdita di precisione dei numeri interi grandi in JavaScript; non passare URL completi in id. |
tweet_id | body.params | string | No | - | Input di compatibilità per id, con priorità inferiore rispetto a id; non sostituisce il campo pubblico obbligatorio id. |
limit | body.params | integer (1–50) | No | 20 | Numero massimo di righe da restituire in questa chiamata: un intero da 1 a 50. Se lo ometti, viene applicato il valore predefinito; una chiamata può restituire meno righe. I valori più alti restituiscono 422 prima di qualsiasi addebito. |
Esempi di codice
#curl -X POST 'https://api.everyinfra.com/api/v1/social' \
-H "Authorization: Bearer $EVERYINFRA_API_KEY" \
-H 'Content-Type: application/json' \
--data-raw '{
"platform": "twitter",
"action": "comments",
"params": {
"id": "2103610284464316469"
}
}'Definizione OpenAPI (JSON)Gli esempi leggono la chiave dalla variabile d'ambiente EVERYINFRA_API_KEY; il codice copiato non contiene mai la tua chiave.
Esempio di risposta
#{ "id": "req_…", "platform": "twitter", "action": "comments", "results": [ { "id": "•••", "url": "https://x.com/SmellyCatGME/status/2104363945867825157", "text": "@••• @••• @••• here comes #buckrogers25centurymeme to join tokenised space 😂🚀💯🔥🥳 \nca: DRgbVreehxzR9AHNGHnuQPNAQDDFvCxjZbcBJRyJfwpK", "like_count": 2, "retweet_count": 0, "reply_count": 1, "view_count": 8, "posted_at": "2026-09-28T00:13:56+00:00", "author_username": "•••", "author_name": "•••", "author_url": "https://x.com/•••", "author_follower_count": 71, "quote_count": 0, "bookmark_count": 0, "language": "et", "conversation_id": "2103610284464316469", "is_reply": true, "is_pinned": false, "reply_to_id": "2103610284464316469", "reply_to_user_id": "•••", "reply_to": "NASA", "hashtags": [ "buckrogers25centurymeme" ], "mentions": [ "NASA", "BoeingSpace", "Space_Station" ], "author_id": "•••", "author_avatar_url": "https://pbs.twimg.com/•••", "author_is_verified": false, "author_following_count": 551, "author_post_count": 153, "author_media_count": 37, "author_created_at": "2026-09-27T17:40:39+00:00", "author_banner_url": "https://pbs.twimg.com/profile_banners/2104264552984530944/1790551488", "platform": "twitter" }, { "id": "•••", "url": "https://x.com/RohanArun/status/2103977186055336023", "text": "@••• Hey Super, build a\n\nThis request concerns an update from NASA regarding the Starliner development and its crewed missions to the International Space Station. The update was scheduled to be broadcast live on Monday, September 28th, at 3 PM Eastern Time.\n\nThe associated metric…", "like_count": 3, "retweet_count": 0, "reply_count": 5, "view_count": 59, "posted_at": "2026-09-26T22:37:05+00:00", "author_username": "•••", "author_name": "•••", "author_url": "https://x.com/•••", "author_follower_count": 4258, "quote_count": 0, "bookmark_count": 0, "language": "en", "conversation_id": "2103610284464316469", "is_reply": true, "is_pinned": false, "reply_to_id": "2103610284464316469", "reply_to_user_id": "•••", "reply_to": "NASA", "mentions": [ "Super_Powers_AI" ], "links": [ "https://app.getsupers.com/sites/orbital-docking-trainer-48/?card=19b18230f989e036fe86" ], "author_id": "•••", "author_avatar_url": "https://pbs.twimg.com/•••", "author_is_verified": true, "author_following_count": 2051, "author_post_count": 24863, "author_media_count": 900, "author_created_at": "2011-09-19T23:33:41+00:00", "author_banner_url": "https://pbs.twimg.com/profile_banners/376478209/1753025143", "platform": "twitter" } ], "count": 20, "billing": { "charged": …, "charged_usd": …, "balance_after_usd": …, … }, "quota": { … }}
Campi della risposta
#I dati di business si trovano in results. La tabella elenca i campi che un record può contenere; i valori che la piattaforma non mostra non vengono mai inventati.
| Campo | Significato |
|---|---|
id | ID univoco del record sulla piattaforma. È univoco solo all'interno di una piattaforma; gli ID possono ripetersi tra piattaforme diverse. |
url | Link al record sulla piattaforma. |
text | Testo del contenuto senza HTML, restituito per intero e mai troncato (su alcune piattaforme i risultati degli elenchi contengono solo un estratto; lo indicano le note sui campi della piattaforma). |
like_count | Like. null significa che la piattaforma o questa funzionalità non li rende noti; non equivale a 0. |
retweet_count | Mantiene il significato attribuito dalla piattaforma |
reply_count | Risposte, di solito a un commento. null significa non rese note. |
view_count | Visualizzazioni o riproduzioni. null significa non rese note, non 0. |
posted_at | Data e ora di pubblicazione in formato ISO 8601, UTC (ad esempio 2026-08-07T12:34:56+00:00). Le stringhe non standard della piattaforma vengono passate così come sono, quindi esegui il parsing in modo difensivo. null significa che la piattaforma non le rende note. |
author_username | Username dell'autore (@handle), di solito utilizzabile negli URL. |
author_name | Nome visualizzato dell'autore. |
author_url | Link al profilo dell'autore sulla piattaforma. |
author_follower_count | Numero di follower dell'autore. null significa non reso noto. |
quote_count | Mantiene il significato attribuito dalla piattaforma |
bookmark_count | Mantiene il significato attribuito dalla piattaforma |
language | Codice della lingua del contenuto (ad esempio zh, en) secondo la piattaforma; può essere errato. |
conversation_id | Mantiene il significato attribuito dalla piattaforma |
is_reply | Mantiene il significato attribuito dalla piattaforma |
is_quote | Mantiene il significato attribuito dalla piattaforma |
is_repost | Mantiene il significato attribuito dalla piattaforma |
is_pinned | Mantiene il significato attribuito dalla piattaforma |
reply_to_id | Mantiene il significato attribuito dalla piattaforma |
reply_to_user_id | Mantiene il significato attribuito dalla piattaforma |
reply_to | Mantiene il significato attribuito dalla piattaforma |
source | Mantiene il significato attribuito dalla piattaforma |
media | Mantiene il significato attribuito dalla piattaforma |
hashtags | Hashtag presenti nel testo, in ordine di apparizione; assente se non ce ne sono. |
mentions | Mantiene il significato attribuito dalla piattaforma |
links | Mantiene il significato attribuito dalla piattaforma |
author_id | ID univoco dell'autore sulla piattaforma. |
author_avatar_url | Mantiene il significato attribuito dalla piattaforma |
author_bio | Mantiene il significato attribuito dalla piattaforma |
author_is_verified | Mantiene il significato attribuito dalla piattaforma |
author_following_count | Mantiene il significato attribuito dalla piattaforma |
author_post_count | Mantiene il significato attribuito dalla piattaforma |
author_media_count | Mantiene il significato attribuito dalla piattaforma |
author_created_at | Mantiene il significato attribuito dalla piattaforma |
author_banner_url | Mantiene il significato attribuito dalla piattaforma |
platform | Identificativo della piattaforma di origine, uguale a platform nella richiesta (ad esempio xiaohongshu, tiktok). |
FAQ
#Posso passare il link del post invece dell'ID?
#Non in id, che accetta solo il numero. Da un link come x.com/<handle>/status/<number>, copia il numero e invialo come stringa, così le cifre restano esatte. tweet_id è accettato come alias per compatibilità, ma id resta obbligatorio e ha la precedenza.
Quali risposte conviene leggere per prime?
#Ordina per like_count per vedere con quali risposte gli altri lettori sono d'accordo, e controlla author_follower_count per individuare le risposte di account con un pubblico ampio. Le risposte con un reply_count alto segnalano dove si è formato un sotto-thread attorno a un punto specifico.
Cosa significa un risultato vuoto?
#Nessuna riga significa che non sono arrivate risposte pubbliche per quell'ID del post: il post potrebbe non avere risposte, oppure il numero potrebbe non corrispondere a un post. Verifica l'id con il link del post prima di fare un nuovo tentativo. Le chiamate che restituiscono un risultato vuoto non vengono addebitate.
Errori e addebiti
#- 401
- Chiave mancante o non valida.
- 402
- Saldo insufficiente. Effettua prima una ricarica.
- 422
- Nome o valore del parametro non valido. Correggilo seguendo i suggerimenti dell'errore. Nessun addebito.
- 429
- Raggiunto il limite di richieste al minuto. Attendi il tempo indicato da Retry-After, poi riprova.
- 503
- Impossibile completare. L'importo trattenuto torna sul tuo saldo. Se l'esito è incerto, verificalo prima di riprovare.
- Risposta 200 vuota
- Nessun dato. Nessun addebito.
Riferimenti ufficiali
#Usati solo per verificare oggetti e terminologia. Non implicano alcuna autorizzazione o approvazione di EveryInfra da parte della piattaforma.
- X: ID del post originale, ID della conversazione e relazioni tra le risposte ↗
X usa conversation_id per indicare l'ID del post originale che ha avviato una conversazione, condiviso anche dalle risposte su più livelli; per ricostruire le relazioni padre-figlio servono gli identificatori dei post padre. Questo endpoint non espone questi campi di relazione, quindi nell'output attuale non aspettarti alberi di risposte come quelli degli esempi ufficiali.
Verificato il 2026-09-04