X v11.90 Articles Scraper: threadgrab Long-Form 2026
Se você extrai Artigos do X com um script que funcionava em março de 2026, esse script provavelmente parou de funcionar no final de maio. A versão v11.90 do aplicativo móvel do X moveu a entrada Ver Todos os Artigos de uma aba oculta na página de perfil para um controle segmentado no topo, e nos bastidores trocou o endpoint REST público por uma nova rota GraphQL. Scrapers que hard-codaram a URL antiga agora recebem 200 com corpo vazio, o formato do id do artigo mudou de numérico de 18 dígitos para base64 de 19 dígitos, e o corpo do artigo agora é um JSON com spans de entidades nomeadas em vez de texto simples. Este post explica o que mudou, por que seu scraper antigo quebrou e como usar a API do threadgrab para buscar o novo layout v11.90 como Markdown limpo em uma única chamada.
O threadgrab foi atualizado para lidar com as mudanças do v11.90 nativamente. Abaixo está a nova referência de campos, dois exemplos de código prontos para usar e uma comparação lado a lado com as duas outras abordagens que desenvolvedores tentaram (GraphQL puro do X e o projeto tweet.md). Se você mantém uma ferramenta pública de arquivamento do X ou constrói dados de treinamento para LLMs a partir de criadores de conteúdo longo, este é o caminho mais curto para uma saída funcional em 2026.
Resumo. O X v11.90 descontinuou /Articles/search.json, trocou o id do artigo para base64 de 19 dígitos e transformou o corpo do artigo em uma lista JSON de entidades nomeadas. A API do threadgrab resolve todas as três mudanças: passe uma URL de artigo público e ela retorna um corpo Markdown limpo com **negrito**, [links], @menções e #hashtags preservados. Captura de artigo único: um GET, sem autenticação, ~1,2s. Extração em lote de perfil: pagine com ?cursor= a 20 artigos por página.
O que o X v11.90 Mudou no Layout de Artigos
Três coisas mudaram, e elas são independentes — um scraper pode sobreviver a uma ou duas delas, mas não às três ao mesmo tempo.
1. A entrada Ver Todos os Artigos foi movida
Antes do v11.90, o link "Ver Todos os Artigos" era uma aba na página de perfil do criador, três linhas abaixo de Posts, Respostas, Mídia e Curtidas. No v11.90, tornou-se o primeiro item em um novo controle segmentado no topo do cabeçalho do perfil, ao lado de Posts / Respostas / Mídia. A mudança visível é pequena, mas a requisição subjacente mudou: a aba antiga chamava /Articles/search.json?include_replies=false, a nova entrada chama /i/api/graphql/<hash>/ArticleTimeline. Qualquer coisa hard-codada para o caminho antigo agora recebe 200 com um array vazio.
2. O formato do id do artigo mudou
O id de artigo legado era uma string numérica de 18 dígitos (por exemplo 1823456789012345678). O novo id é uma string base64 de 19 caracteres com maiúsculas, minúsculas e dígitos (por exemplo a1B2c3D4e5F6g7H8i9J0). O novo id também é opaco — ele não codifica o timestamp de publicação como o antigo fazia, então um scraper não pode inferir a data de publicação apenas pelo id. URLs que funcionavam em março agora retornam 404 porque o fragmento do id é rejeitado pela camada de roteamento.
3. O corpo do artigo agora é uma lista JSON de entidades nomeadas
O corpo antigo era texto simples com asteriscos para negrito (**texto**) e padrões de URL com colchetes angulares para links. O novo corpo é um array JSON de spans de entidades, onde cada span tem um campo type (text, bold, link, mention, hashtag, media_ref) e um payload. Scrapers ingênuos perdem a formatação porque concatenam os spans text sem percorrer os spans bold, link e mention. Uma frase em negrito como **Liberdade de Alcance chega como três spans separados: um span text contendo a string vazia, um span bold contendo Liberdade de Alcance e um span text final. Se você os remontar errado, o negrito desaparece.
Como o threadgrab Lida com o Novo Layout
A API de perfil do threadgrab encapsula todas as três mudanças. Você passa uma URL de artigo público ou um nome de usuário, e o threadgrab retorna um corpo Markdown simples mais metadados. A lógica de conversão percorre os spans de entidades nomeadas na ordem do documento e produz Markdown padrão: text vira texto simples, bold vira **texto**, link vira [texto](url), mention vira @usuario, hashtag vira #tag e media_ref vira  com o texto alternativo extraído do campo alt_text do span quando presente.
O resultado é uma string Markdown que funciona perfeitamente em qualquer renderizador (md2rich, GitHub, Obsidian, visualização VS Code, md2pdf). O threadgrab não inventa formatação que o autor original não escreveu — se o autor não usou negrito em uma frase, a saída não usa negrito nela.
Captura de artigo único (curl)
curl -s "https://threadgrab.com/api/profile?url=https://x.com/jack/status/a1B2c3D4e5F6g7H8i9J0" \
| jq '.article | {title, author, published_at, body_markdown}'
A resposta é um objeto JSON com cinco campos principais: title (string), author (objeto com username, display_name, verified), published_at (string ISO 8601), body_markdown (o Markdown formatado) e media (array de objetos {type, url, alt_text} para imagens, vídeos e enquetes). Tempo médio de resposta em uma borda Cloudflare do leste dos EUA: 1,1 a 1,4 segundos para um artigo de 2.000 palavras, 0,6 a 0,9 segundos para um artigo de 500 palavras.
Extração em lote de perfil (curl com paginação por cursor)
USERNAME="naval"
CURSOR=""
LIMIT=20
while true; do
RESP=$(curl -s "https://threadgrab.com/api/profile/${USERNAME}/articles?cursor=${CURSOR}&limit=${LIMIT}")
echo "$RESP" | jq '.articles[] | {title, published_at, id: .article_id}'
CURSOR=$(echo "$RESP" | jq -r '.next_cursor')
[ -z "$CURSOR" ] || [ "$CURSOR" = "null" ] && break
sleep 1
done
Este loop percorre o feed completo de Artigos do criador página por página. Cada chamada retorna 20 artigos mais uma string next_cursor; quando next_cursor está vazio ou null, você chegou ao final do feed público. A pausa de um segundo entre chamadas mantém a taxa de requisições no limite suave de 1 req/s/IP. Um criador com 200 artigos leva cerca de 11 segundos do início ao fim, incluindo a sobrecarga das pausas.
Referência de Campos: Formato da Resposta do threadgrab v11.90
O objeto JSON completo retornado pelo endpoint de artigo único tem a estrutura abaixo. Os campos estão estáveis a partir do threadgrab v1.18 (junho de 2026).
| Campo | Tipo | Descrição |
|---|---|---|
article_id |
string | Novo id base64 de 19 caracteres (formato v11.90). Use para cache ou para buscar novamente depois. |
title |
string | Título do artigo definido pelo autor. Pode estar vazio para artigos muito curtos. |
author.username |
string | O handle do autor no X sem o @ inicial. |
author.display_name |
string | O nome de exibição do autor, pode incluir emoji e espaçamento incomum. |
author.verified |
boolean | True se o autor tinha algum selo de verificação do X no momento da captura. |
published_at |
string (ISO 8601) | Timestamp UTC da publicação original. Não é o timestamp de edição. |
body_markdown |
string | O corpo completo do artigo como Markdown, com negrito, links, menções e hashtags preservados. |
media[] |
array | Lista de objetos de mídia, cada um com type (image / video / poll), url e alt_text. |
engagement |
object | Instantâneo de likes, reposts, replies, quotes e views no momento da captura. Os números podem ter atraso de 24h. |
canonical_url |
string | A URL pública x.com/<user>/article/<id> do artigo. |
O campo body_markdown é o que a maioria dos usuários precisa. É uma string única com quebras de linha preservadas da fonte, e a sintaxe de negrito / link / menção / hashtag / imagem é renderizada como Markdown padrão que qualquer renderizador interpretará corretamente. Se você precisar apenas de texto simples, passe o resultado por sed ou sua ferramenta Markdown-para-texto favorita para remover a sintaxe — o conteúdo textual original é recuperável em uma passada.
Comparação: threadgrab vs GraphQL Puro vs tweet.md
Três abordagens estão em uso hoje para extrair Artigos do X após a mudança do v11.90. Veja como elas se comparam nas três coisas que quebraram.
1. API threadgrab (recomendada)
Prós: lida com o novo formato de id do artigo, percorre o corpo de entidades nomeadas, retorna Markdown limpo com formatação preservada, sem autenticação necessária, sem token para gerenciar, limitado a 1 req/s/IP seguro.
Contras: apenas Artigos públicos (sem contas protegidas), sem revisões históricas (apenas a versão mais recente do Artigo é retornada), sem histórico de edição.
2. GraphQL Puro do X /ArticleTimeline
Prós: sem intermediário, você controla os cabeçalhos e o formato da requisição, pode extrair dados brutos para casos de uso incomuns (analytics de engajamento, gráficos de quote-posts).
Contras: requer manter um cookie de sessão ou token bearer do app, o hash da consulta GraphQL rotaciona a cada poucas semanas, o corpo de entidades nomeadas precisa de código personalizado para percorrer, e uma única requisição ruim pode colocar seu IP em limite de taxa por 15 minutos.
3. tweet.md (proxy local open-source)
Prós: open source, roda localmente, sem servidor terceiro, você pode fazer fork para saída Markdown personalizada.
Contras: tweet.md é otimizado para posts curtos em formato de thread, não para o corpo longo do Artigo v11.90; não preserva a formatação de entidades nomeadas; requer um cookie de sessão X funcional na primeira execução.
Para um caso de uso como "quero ler este Artigo offline como Markdown" ou "quero construir um corpus de posts longos para treinamento de LLM", o threadgrab é o caminho mais curto. Para um caso de uso como "estou construindo um produto de analytics em tempo real do X e preciso de dados de engajamento brutos", a rota GraphQL é inevitável. O tweet.md é uma boa opção para posts curtos e threads, menos para o novo corpo do Artigo.
Limitações e o que o threadgrab Não Faz
Ser honesto sobre os limites da ferramenta importa mais do que superestimá-la. A lista abaixo é o que o threadgrab v1.18 não faz, a partir de junho de 2026.
- Contas protegidas. Se os Artigos do autor estão atrás de um login, o threadgrab retorna 403. Não há solução alternativa — o conteúdo não está na web pública.
- Histórico de edição. Um Artigo que o autor editou cinco vezes é retornado em sua forma atual. Versões anteriores não são expostas pelo X, então o threadgrab não pode reconstruí-las.
- Posts compostos Quote-Article. Um Quote-Article é um post normal com um card de Artigo anexado. O threadgrab retorna o texto do post e os metadados do card, mas não o corpo do Artigo incorporado, a menos que você faça uma segunda chamada ao endpoint de artigo com o
article_iddo card. - Rascunhos e Artigos agendados. Rascunhos e posts agendados não estão na web pública, então não são extraíveis por nenhum método, incluindo threadgrab.
- Números agregados de alcance por audiência. A caixa preta de alcance que cobrimos no post Liberdade de Alcance também se aplica ao threadgrab — o instantâneo de engajamento na resposta é o que o X mostra ao público, não o número interno de alcance.
FAQ
O X v11.90 moveu a entrada "Ver Todos os Artigos" de uma aba oculta na página de perfil para um controle segmentado no topo do cabeçalho do perfil do criador. A nova entrada exibe todo post longo (Artigos, Threads com mais de 1.000 caracteres e Quote-Articles) como uma lista unificada, paginada de 20 em 20. Nos bastidores, a entrada agora chama um novo endpoint GraphQL (/ArticleTimeline) em vez da rota REST legada /Articles/search.json, então scrapers que acessam o endpoint antigo recebem um 404 ou um array vazio.
Três razões. Primeiro, o endpoint /Articles/search.json foi descontinuado no final de maio de 2026 e agora retorna 200 com corpo vazio para a maioria das contas. Segundo, o X adicionou um novo campo article_id no v11.90 que é uma string base64 de 19 dígitos, substituindo o id numérico antigo de 18 dígitos; scrapers que tentam construir URLs a partir do padrão antigo recebem 404. Terceiro, o corpo do artigo agora é servido como um JSON com spans de entidades nomeadas (negrito, link, menção, hashtag) em vez de texto simples com asteriscos, então scrapers ingênuos perdem a formatação.
Passe a URL do artigo ou o novo article_id para a API do threadgrab. O threadgrab resolve o novo endpoint GraphQL /ArticleTimeline, busca o corpo JSON de entidades nomeadas, achata para Markdown (preservando negrito, links, menções e hashtags) e retorna o texto limpo mais metadados. Uma requisição típica é GET https://threadgrab.com/api/profile?url=https://x.com/<user>/article/<id> sem autenticação, e a resposta é um objeto JSON com title, body_markdown, author, published_at e array media.
Sim. Use o endpoint de lote do perfil do threadgrab: GET https://threadgrab.com/api/profile/<username>/articles?cursor=<next_cursor>&limit=20. A resposta inclui um campo next_cursor que você passa para a próxima chamada até receber um cursor vazio. O endpoint é paginado 20 artigos por vez para espelhar a paginação do X e funciona com o novo layout v11.90. Para uma extração única de 100+ artigos, espere a chamada levar de 8 a 15 segundos dependendo dos anexos de mídia.
Sim. O novo corpo do artigo do X v11.90 é uma lista JSON de spans de entidades (cada span tem um campo type: text, bold, link, mention, hashtag ou media_ref). O threadgrab percorre a lista e produz Markdown padrão: spans bold viram **texto**, spans link viram [texto](url), spans mention viram @usuario, spans hashtag viram #tag e spans media_ref viram . A saída funciona perfeitamente em qualquer renderizador Markdown (md2rich, GitHub, Obsidian) sem perder a formatação original.
O threadgrab busca apenas Artigos públicos, que são páginas web públicas que o X publica explicitamente para indexação e compartilhamento. A API threadgrab impõe um limite de 1 requisição por segundo por IP e um teto suave de 5.000 capturas de artigos por dia, bem abaixo dos limites anti-abuso do X. Extrair conteúdo público para leitura pessoal, pesquisa ou arquivamento é geralmente permitido nos Termos de Serviço do X; republicar ou comercializar o texto capturado sem o consentimento do autor não é.
Experimente em um Artigo Público
A maneira mais rápida de ver o novo layout v11.90 passar pelo threadgrab é pegar qualquer Artigo público no x.com, copiar a URL e executar o exemplo curl de artigo único acima. Você deve receber uma resposta JSON limpa em 1,5 segundos em uma borda dos EUA ou UE, com o corpo em Markdown que você pode colar no Obsidian, em um gist do GitHub ou no conversor md2rich para uma prévia lado a lado de como a formatação é renderizada.
Extraia um Artigo do X agora — sem login, sem instalação.
O threadgrab lida com o layout v11.90, o novo id do artigo e o corpo de entidades nomeadas. Cole qualquer URL pública x.com/<user>/article/<id>.
Abrir ThreadGrabLeitura Relacionada
- X para Markdown 2026: 3 Maneiras de Salvar Threads do X — aborda as abordagens tweet.md, threadgrab e leitor de navegador para posts curtos e threads.
- Arquivamento de Threads do X em 2026: 5 Ferramentas Comparadas — uma visão mais ampla de Nitter, Thread Reader, archive.today, scripts curl e threadgrab para arquivamento completo de threads.
- Liberdade de Alcance dos Artigos do X 2026: A Caixa Preta do Algoritmo — o que o número de alcance diz e não diz sobre quem viu um Artigo.
- Artigos do X vs Bluesky vs LinkedIn Newsletter — o confronto de long-form de 2026, com uma árvore de decisão para escolher em qual plataforma escrever.