Pular para o conteúdo principal
Confira nossos guias de comparação:

X API: Dicionário de dados do Enterprise

Introdução

Enterprise Posts são o bloco de construção atômico básico de tudo no X. Todas as APIs do X que retornam Posts fornecem esses dados codificados em JSON (JavaScript Object Notation). O JSON é baseado em pares chave-valor, com atributos nomeados e valores associados. Objetos Post recuperados da API incluem a “atualização de status” de um usuário do X, mas Retweets, respostas e Tweets com citação também são objetos Post. Se um Post estiver relacionado a outro, como um Retweet, resposta ou Tweet com citação, cada um será identificado ou incorporado ao objeto Post. Mesmo o Post mais simples, no formato nativo de dados do X, terá objetos JSON aninhados para representar outros atributos de um Post, como o autor, usuários mencionados, local marcado, hashtags, símbolos de cashtag, mídias ou links de URL. Ao trabalhar com dados do X, é importante entender esse conceito. O formato dos dados de Post que você receberá da X API depende do tipo de Post recebido, da X API que você está usando e das configurações de formato. Endpoints Enterprise que retornam objetos Post foram atualizados para fornecer os metadados necessários para entender o histórico de edição do Post. Saiba mais sobre esses metadados na página “Editar Posts”.
No formato nativo do X, o payload JSON incluirá atributos de ‘nível raiz’ e objetos JSON aninhados (que são representados aqui com a notação {}):
{
	"created_at": "Fri Feb 14 19:00:55 +0000 2020",
	"id_str": "1228393702244134912",
	"text": "O que o desenvolvedor escreveu no cartão de Dia dos Namorados?\n  \nwhile(true) {\n    I = Love(You);  \n}",
	"entities": {
		"hashtags": [],
		"symbols": [],
		"user_mentions": [],
		"urls": []
	},
	"user": {
		"entities": {
			"url": {}
		}
	},
	"place": {}
}

Formatos de dados disponíveis

Observação: Recomenda-se fortemente usar o formato Enriched Native para APIs de dados Enterprise.
  • O formato Enriched Native inclui todas as novas metadata desde 2017, como poll metadata, e metrics adicionais como reply_count e quote_count.
  • O formato Activity Streams não recebe novas metadata ou enrichments desde a atualização de caracteres de 2017.
As APIs de dados Enterprise fornecem dados em dois formatos. O formato Enterprise mais próximo do formato nativo Standard v1.1 é o Enriched Native. O formato Enterprise legado é o Activity Streams, originalmente implementado e usado pela Gnip como um formato normalizado entre a X e outros provedores de dados de mídia social na época. Embora esse formato ainda esteja disponível, a X tem investido em novos recursos e desenvolvimentos apenas no formato Enriched Native desde 2017. O formato Enriched Native é exatamente como o nome sugere: inclui objetos nativos da X, além de enrichments adicionais disponíveis para produtos de dados Enterprise, como metadata de “URL unwinding”, profile geo, poll metadata e metrics adicionais de engajamento.

Comparação de objetos por formato de dados

Independentemente do seu caso de uso no X, entender o que esses objetos e atributos de Post codificados em JSON representam é fundamental para identificar com sucesso os sinais de dados do seu interesse. Para ajudar nesse esforço, há um conjunto de páginas dedicadas a cada objeto em cada formato de dados. Refletindo a hierarquia de JSON acima, seguem links para cada um desses objetos:
Nativo enriquecidoActivity Streams
Link Objeto PostLink Objeto Activity
Link Objeto de usuárioLink Objeto Actor
Link Objeto EntitiesLink Objeto X entities
Link Objeto Extended entitiesLink Objeto X extended entitites
Link Objeto GeoLink Objeto Location
n/aLink Objeto Gnip

Melhores práticas de parsing

  • O JSON do X é codificado em UTF-8.
  • Os parsers devem tolerar com facilidade variações na ordem de fields. Deve-se assumir que o JSON de Post é servido como um hash não ordenado de data.
  • Os parsers devem tolerar a adição de fields “novos”.
  • Parsers de JSON devem ser tolerantes a fields “ausentes”, já que nem todos os fields aparecem em todos os contextos.
  • Geralmente é seguro considerar um field nulo, um conjunto vazio e a ausência de um field como a mesma coisa.

Objetos de data enriquecida nativos do Enterprise

Objeto Tweet do Native Enriched

Quer saber mais sobre como o formato de dados Native Enriched corresponde ao formato da X API v2? Confira nosso guia de comparação: Native Enriched comparado à X API v2

Objeto Post

Ao usar produtos de dados Enterprise, você notará que grande parte do dicionário de dados é semelhante ao formato nativo de dados de Post, com algumas metadata adicionais enriquecidas. O nível básico do formato nativo enriquecido usa muitos dos mesmos nomes de objeto do formato de dados da X API v1.1. O objeto Post tem uma longa lista de atributos no “nível raiz”, incluindo atributos fundamentais como id, created_at e text. Objetos Post também terão objetos aninhados que incluem user, entities e extended_entities. Objetos Post também terão outros objetos Post aninhados, como retweeted_status, quoted_status e extended_tweet. O formato nativo enriquecido terá adicionalmente um objeto matching_rules.
Dicionário de Dados do X
A seguir, você encontrará o dicionário de dados desses atributos de “nível raiz”, além de links para os dicionários de dados de objetos filhos.
AtributoTipoDescrição
created_atStringHorário UTC em que este Post foi criado. Exemplo:

“created_at”: “Wed Oct 10 20:19:24 +0000 2018”
idInt64A representação inteira do identificador único para este Post. Este número é maior que 53 bits e algumas linguagens de programação podem ter dificuldades/defeitos silenciosos ao interpretá-lo. É seguro usar um inteiro de 64 bits com sinal para armazenar este identificador. Use id_str para obter o identificador com segurança. Consulte IDs do X para mais informações. Exemplo:

“id”:1050118621198921728
id_strStringA representação em string do identificador único para este Post. As implementações devem usar este campo em vez do inteiro grande em id. Exemplo:

“id_str”:“1050118621198921728”
textStringO texto UTF-8 real da atualização de status. Consulte X-text para detalhes sobre quais caracteres são atualmente considerados válidos. Exemplo:

“text”:“To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm
sourceStringUtilitário usado para publicar o Post, como uma string formatada em HTML. Posts do site do X têm um valor de source web.

Exemplo:

“source”:“X Web Client”
truncatedBooleanIndica se o valor do parâmetro text foi truncado, por exemplo, como resultado de um retweet que excede o limite original de 140 caracteres do texto do Post. Texto truncado terminará com reticências, assim: ... Como o X agora rejeita Posts longos em vez de truncá-los, a grande maioria dos Posts terá este valor definido como false. Note que, embora retweets nativos possam ter sua propriedade text de nível superior encurtada, o texto original estará disponível no objeto retweeted_status e o parâmetro truncated será definido com o valor do status original (na maioria dos casos, false). Exemplo:

“truncated”:true
in_reply_to_status_idInt64Anulável. Se o Post representado for uma resposta, este campo conterá a representação inteira do ID do Post original. Exemplo:

“in_reply_to_status_id”:1051222721923756032
in_reply_to_status_id_strStringAnulável. Se o Post representado for uma resposta, este campo conterá a representação em string do ID do Post original. Exemplo:

“in_reply_to_status_id_str”:“1051222721923756032”
in_reply_to_user_idInt64Anulável. Se o Post representado for uma resposta, este campo conterá a representação inteira do ID do autor do Post original. Isso não será necessariamente sempre o usuário mencionado diretamente no Post. Exemplo:

“in_reply_to_user_id”:6253282
in_reply_to_user_id_strStringAnulável. Se o Post representado for uma resposta, este campo conterá a representação em string do ID do autor do Post original. Isso não será necessariamente sempre o usuário mencionado diretamente no Post. Exemplo:

“in_reply_to_user_id_str”:“6253282”
in_reply_to_screen_nameStringAnulável. Se o Post representado for uma resposta, este campo conterá o nome de usuário do autor do Post original. Exemplo:

“in_reply_to_screen_name”:“xapi”
userobjeto de usuárioO usuário que publicou este Post. Consulte o dicionário de dados do usuário para a lista completa de atributos.

Exemplo destacando atributos selecionados:

{ “user”: <br/> “id”: 6253282,
“id_str”: “6253282”,
“name”: “X API”,
“screen_name”: “API”,
“location”: “San Francisco, CA”,
“url”: “https://developer.x.com”,
“description”: “The Real X API. Tweets about API changes, service issues and our Developer Platform. Don’t get an answer? It’s on my website.”,
“verified”: true,
“followers_count”: 6129794,
“friends_count”: 12,
“listed_count”: 12899,
“favourites_count”: 31,
“statuses_count”: 3658,
“created_at”: “Wed May 23 06:01:13 +0000 2007”,
“utc_offset”: null,
“time_zone”: null,
“geo_enabled”: false,
“lang”: “en”,
“contributors_enabled”: false,
“is_translator”: false,
“profile_background_color”: “null”,
“profile_background_image_url”: “null”,
“profile_background_image_url_https”: “null”,
“profile_background_tile”: null,
“profile_link_color”: “null”,
“profile_sidebar_border_color”: “null”,
“profile_sidebar_fill_color”: “null”,
“profile_text_color”: “null”,
“profile_use_background_image”: null,
“profile_image_url”: “null”,
“profile_image_url_https”: “https://pbs.twimg.com/profile&#95;images/942858479592554497/BbazLO9L&#95;normal.jpg”,
“profile_banner_url”: “https://pbs.twimg.com/profile&#95;banners/6253282/1497491515”,
“default_profile”: false,
“default_profile_image”: false,
“following”: null,
“follow_request_sent”: null,
“notifications”: null
}
}
coordinatesCoordinatesAnulável. Representa a localização geográfica deste Post conforme informado pelo usuário ou aplicação cliente. O array de coordenadas interno é formatado como geoJSON (longitude primeiro, depois latitude). Exemplo:

“coordinates”:
<br/> “coordinates”:
[
-75.14310264,
40.05701649
],
“type”:“Point”
}
placePlacesAnulável. Quando presente, indica que o Post está associado (mas não necessariamente originário de) um Local. Exemplo:

“place”:
<br/> “attributes”:,
“bounding_box”:
<br/> “coordinates”:
[[
[-77.119759,38.791645],
[-76.909393,38.791645],
[-76.909393,38.995548],
[-77.119759,38.995548]
]],
“type”:“Polygon”
},
“country”:“United States”,
“country_code”:“US”,
“full_name”:“Washington, DC”,
“id”:“01fbe706f872cb32”,
“name”:“Washington”,
“place_type”:“city”,
“url”:“http://api.x.com/1/geo/id/0172cb32.json
}
quoted_status_idInt64Este campo aparece apenas quando o Post é um Tweet citado. Este campo contém o valor inteiro do ID do Post do Tweet citado. Exemplo:

“quoted_status_id”:1050119905717055488
quoted_status_id_strStringEste campo aparece apenas quando o Post é um Tweet citado. Esta é a representação em string do ID do Post do Tweet citado. Exemplo:

“quoted_status_id_str”:“1050119905717055488”
is_quote_statusBooleanIndica se este é um Tweet Citado. Exemplo:

“is_quote_status”:false
quoted_statusPostEste campo aparece apenas quando o Post é um Tweet citado. Este atributo contém o Objeto Post do Post original que foi citado.
retweeted_statusPostOs usuários podem amplificar a divulgação de Posts criados por outros usuários fazendo Retweet. Retweets podem ser distinguidos de Posts típicos pela existência de um atributo retweeted_status. Este atributo contém uma representação do Post original que foi retweetado. Note que retweets de retweets não mostram representações do retweet intermediário, mas apenas o Post original. (Os usuários também podem desfazer um retweet que criaram excluindo seu retweet.)
quote_countIntegerAnulável. Indica aproximadamente quantas vezes este Post foi citado por usuários do X. Exemplo:

“quote_count”:33

Observação: Este objeto está disponível apenas com os produtos dos níveis Premium e Enterprise.
reply_countIntNúmero de vezes que este Post foi respondido. Exemplo:

“reply_count”:30

Observação: Este objeto está disponível apenas com os produtos dos níveis Premium e Enterprise.
retweet_countIntNúmero de vezes que este Post foi retweetado. Exemplo:

“retweet_count”:160
favorite_countIntegerAnulável. Indica aproximadamente quantas vezes este Post foi curtido por usuários do X. Exemplo:

“favorite_count”:295
entitiesEntitiesEntidades que foram extraídas do texto do Post. Veja também Entities in X Objects. Exemplo:

“entities”:
<br/> “hashtags”:[],
“urls”:[],
“user_mentions”:[],
“media”:[],
“symbols”:[]
“polls”:[]
}
extended_entitiesExtended EntitiesQuando entre uma e quatro fotos nativas ou um vídeo ou um GIF animado estão no Post, contém um array ‘media’ de metadados. Isso também está disponível em Tweets Citados. Veja também Entities in X Objects. Exemplo:

“entities”:
<br/> “media”:[]
}
favoritedBooleanAnulável. Indica se este Post foi curtido pelo usuário autenticado. Exemplo:

“favorited”:true
retweetedBooleanIndica se este Post foi retweetado pelo usuário autenticado. Exemplo:

“retweeted”:false
possibly_sensitiveBooleanAnulável. Este campo indica que o conteúdo pode ser reconhecido como sensível. O autor do Post pode selecionar dentro de suas próprias preferências de conta e escolher “Marcar mídia que você posta como tendo material que pode ser sensível” para que cada Post criado depois tenha esta flag definida.

Isso também pode ser julgado e rotulado por um agente de suporte interno do X.

”possibly_sensitive”:false
filter_levelStringIndica o valor máximo do parâmetro filter_level que pode ser usado e ainda transmitir este Post via stream. Então um valor de medium será transmitido em streams none, low e medium.

Exemplo:

“filter_level”: “low”
langStringAnulável. Quando presente, indica um identificador de idioma BCP 47 correspondente ao idioma detectado automaticamente do texto do Post, ou und se nenhum idioma pôde ser detectado.

Exemplo:

“lang”: “en”
edit_historyObjectIdentificadores únicos que indicam todas as versões de um Post. Para Posts sem edições, haverá um ID. Para Posts com histórico de edições, haverá múltiplos IDs, organizados em ordem crescente refletindo a ordem das edições, com a versão mais recente na última posição do array.

Os IDs do Post podem ser usados para hidratar e visualizar versões anteriores de um Post.

Exemplo:

edit_history”: <br/> “initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
}
edit_controlsObjectQuando presente, indica por quanto tempo um Post ainda pode ser editado e o número de edições restantes. Posts só podem ser editados nos primeiros 30 minutos após a criação e podem ser editados até cinco vezes.

Os IDs do Post podem ser usados para hidratar e visualizar versões anteriores de um Post.

Exemplo:

“edit_controls”: <br/> “editable_until_ms”: 123
“edits_remaining”: 3
}
editableBooleanQuando presente, indica se um Post era elegível para edição quando foi publicado. Este campo não é dinâmico e não mudará de True para False quando um Post atingir seu limite de tempo editável ou número máximo de edições. As seguintes características do Post farão com que este campo seja false:

_ Post é promovido
_ Post tem uma enquete
_ Post é uma resposta de thread não própria
_ Post é um Retweet (note que Quote Tweets são elegíveis para edição)
_ Post é nullcast
_ Post da Comunidade
_ Post Superfollow
_ Post Colaborativo
matching_rulesArray of Rule ObjectsPresente em produtos filtrados como X Search e PowerTrack. Fornece o id e tag associados à regra que correspondeu ao Post. Mais sobre regras de correspondência aqui. Com PowerTrack, mais de uma regra pode corresponder a um Post.

Exemplo:

“matching_rules”: ” [<br/> “tag”: “xapi emojis”,
“id”: 1050118621198921728,
“id_str”: “1050118621198921728”
}]“
Atributos adicionais de Post
As APIs do X que fornecem Posts (por exemplo, o endpoint GET statuses/lookup) podem incluir estes atributos adicionais de Post:
AtributoTipoDescrição
current_user_retweetObjetoPerspectival Aparece apenas em métodos que oferecem suporte ao parâmetro include_my_retweet, quando definido como true. Informa o ID do Post do próprio Retweet do usuário (se existir) deste Post. Exemplo:

“current_user_retweet”: <br/> “id”: 6253282,
“id_str”: “6253282”
}
scopesObjetoUm conjunto de pares chave-valor que indicam a entrega contextual pretendida do Post que o contém. Atualmente usado pelos Promoted Products do X. Exemplo:

“scopes”:{“followers”:false}
withheld_copyrightBooleanoQuando presente e definido como “true”, indica que este conteúdo foi retido devido a uma queixa DMCA. Exemplo:

“withheld_copyright”: true
withheld_in_countriesArray de StringQuando presente, indica uma lista de códigos de país de duas letras em maiúsculas dos quais este conteúdo está retido. O X oferece suporte aos seguintes valores que não representam países para este campo:

“XX” - Conteúdo retido em todos os países “XY” - Conteúdo retido devido a uma solicitação de DMCA.

Exemplo:

“withheld_in_countries”: [“GR”, “HK”, “MY”]
withheld_scopeStringQuando presente, indica se o conteúdo retido é o “status” ou um “user”.

Exemplo:

“withheld_scope”: “status”
Atributos obsoletos
CampoTypeDescrição
geoObjetoObsoleto. Pode ser nulo. Use o campo coordinates. Este atributo obsoleto tem suas coordenadas no formato [lat, long], enquanto todo o restante da geolocalização de Post usa o formato [long, lat].

Objetos Post aninhados

Em diversos casos, um Objeto Post incluirá outros objetos aninhados. Se você estiver trabalhando com objetos aninhados, esse payload JSON conterá múltiplos Objetos Post, e cada Objeto Post poderá conter seus próprios objetos. O objeto no nível raiz conterá informações sobre o tipo de ação realizada, ou seja, se é um Retweet ou um Quote Tweet, e também poderá conter um objeto que descreve o Post “original” que está sendo compartilhado. Posts estendidos incluirão um objeto estendido aninhado que ultrapassa 140 caracteres, o que foi usado para evitar alterações incompatíveis quando a atualização foi feita em 2017. Cada dicionário de objeto aninhado é descrito abaixo. Retweets Retweets sempre contêm dois Objetos Post. O Post “original” que está sendo Retweetado é fornecido em um objeto “retweeted_status”. O objeto no nível raiz encapsula o próprio Retweet, incluindo um Objeto de Usuário para a conta que executa a ação de Retweet e o horário do Retweet. Fazer Retweet é uma ação para compartilhar um Post com seus seguidores, e nenhum outro conteúdo novo pode ser adicionado. Além disso, uma (nova) localização não pode ser fornecida com um Retweet. Embora o Post “original” possa ter sido marcado com geolocalização, os objetos “geo” e “place” do Retweet sempre serão null. Mesmo antes da introdução de Posts estendidos, o objeto “entities” do nível raiz era, em alguns casos, truncado e incompleto devido à string “RT @username ” ser anexada à mensagem do Post sendo Retweetado. Observe que, se um Retweet receber Retweet, o “retweeted_status” ainda apontará para o Post original, o que significa que o Retweet intermediário não é incluído. Comportamento semelhante é observado ao usar x.com para “exibir” um Retweet. Se você copiar o ID do Post exclusivo atribuído à “ação” de Retweet, o Post original é exibido. Abaixo está um exemplo de estrutura para um Retweet. Novamente, ao analisar Retweets, é fundamental analisar o objeto “retweeted_status” para obter a mensagem completa do Post (original) e a metadata de entidades.
{
	"tweet": {
		"text": "RT @author mensagem original",
		"user": {
			"screen_name": "Retweeter"
		},
		"retweeted_status": {
			"text": "mensagem original",
			"user": {
				"screen_name": "OriginalTweeter"
			},
			"place": {},
			"entities": {},
			"extended_entities": {}
		}
	},
	"entities": {},
	"extended_entities": {}
}
Quote Tweets
Quote Tweets são muito parecidos com Retweets, exceto por incluírem uma nova mensagem de Post. Essas novas mensagens podem conter seu próprio conjunto de hashtags, links e outros metadados de “entities”. Quote Tweets também podem incluir informações de localização compartilhadas pelo usuário que publica o Quote Tweet, juntamente com mídias como GIFs, vídeos e fotos. Quote Tweets contêm pelo menos dois Objetos Post e, em alguns casos, três. O Post que está sendo citado, que por sua vez pode ser um Tweet citado, é fornecido em um objeto “quoted_status”. O objeto de nível raiz encapsula o próprio Quote Tweet, incluindo um Objeto de Usuário da conta que realiza a ação de compartilhamento e o horário do Quote Tweet. Observe que agora os Quote Tweets podem ter fotos, GIFs ou vídeos adicionados a eles usando a interface do usuário ‘Post’. Quando links para mídias hospedadas externamente são incluídos na mensagem do Quote Tweet, o “entities.urls” de nível raiz os descreverá. As mídias anexadas aos Quote Tweets aparecerão nos metadados “extended_entities” de nível raiz. Quando os Quote Tweets foram lançados pela primeira vez, um link encurtado (URL t.co) era anexado à mensagem do Post ‘original’ e fornecido no campo “text” de nível raiz. Além disso, os metadados desse URL t.co eram incluídos no array ‘entities.urls’ de nível raiz. Em maio de 2018, alteramos isso para que o URL t.co encurtado do Tweet citado não seja incluído no campo “text” de nível raiz. Em segundo lugar, os metadados do Tweet citado não serão incluídos nos metadados “entities.urls”. Em vez disso, os metadados de URL do Tweet citado estarão em um novo objeto “quoted_status_permalink” no nível raiz (ou nível superior), portanto, no mesmo nível do objeto “quoted_status”. Abaixo está um exemplo de estrutura para um Quote Tweet usando esta formatação original.
{
	"created_at": "Tue Feb 14 19:30:06 +0000 2017",
	"id_str": "831586333415976960",
	"text": "Definitivamente digno de citação! https:\/\/t.co\/J1LKrbHpWR",
	"user": {
		"screen_name": "happycamper"
	},
	"quoted_status_id_str": "831569219296882688",
	"quoted_status": {
		"created_at": "Tue Feb 14 18:22:06 +0000 2017",
		"id_str": "831569219296882688",
		"text": "Este é um teste do sistema de tweets \ud83d\ude0e para atualizar #supportdocs @twitterboulder aqui: https:\/\/t.co\/NRq9UrSzm0",
		"user": {
			"screen_name": "furiouscamper",
		},
		"place": {
			"id": "9a974dfc8efb32a0",
		},
		"entities": {
			"hashtags": [{
				"text": "supportdocs",
			}],
			"urls": [{
			}],
			"user_mentions": [{	}],
			"symbols": []
		},
	},
	"is_quote_status": true,
	"entities": {},
	"matching_rules": [{}]
}
{
	"created_at": "Fri Jan 04 18:47:16 +0000 2019",
	"id_str": "1081260794069671936",
	"text": "Teste de citação https://t.co/CE4m1qs3NJ",
	"user": {
		"screen_name": "furiouscamper"
	},
	"place": null,
	"quoted_status_id_str": "1079578364904648705",
	"quoted_status": {
		"created_at": "Mon Dec 31 03:21:54 +0000 2018",
		"id_str": "1079578364904648705",
		"text": "AHHHHH",
		"user": {
			"screen_name": "infinite_scream"
		},
		"place": null,
		"is_quote_status": false,
		"quote_count": 1,
		"reply_count": 0,
		"retweet_count": 3,
		"favorite_count": 6,
		"entities": {
			"hashtags": [],
			"urls": [],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quoted_status_permalink": {
		"url": "https://t.co/CE4m1qs3NJ",
		"expanded": "https://x.com/infinite_scream/status/1079578364904648705",
		"display": "x.com/infinite_screa…"
	},
	"is_quote_status": true,
	"quote_count": 0,
	"reply_count": 0,
	"retweet_count": 0,
	"favorite_count": 1,
	"entities": {}
}
Posts estendidos
O JSON que descreve Posts estendidos foi introduzido quando os Posts de 280 caracteres foram lançados em novembro de 2017. O JSON de Post foi ampliado para encapsular essas mensagens mais longas, sem interromper os milhares de Apps que analisam esses objetos fundamentais do X. Para garantir total compatibilidade retroativa, o campo original de 140 caracteres ‘text’ e os objetos de entidade derivados dele foram mantidos. No caso de Posts com mais de 140 caracteres, esse campo ‘text’ no nível raiz fica truncado e, portanto, incompleto. Como os objetos ‘entities’ no nível raiz contêm arrays de metadados principais extraídos da mensagem ‘text’, como hashtags e links incluídos, essas coleções ficam incompletas. Por exemplo, se uma mensagem de Post tiver 200 caracteres, com uma hashtag no final, o array legado ‘entities.hashtags’ no nível raiz não a incluirá. Foi introduzido um novo campo ‘extended_tweet’ para armazenar as mensagens de Post mais longas e os metadados completos de entidades. O objeto “extended_tweet” fornece o campo “full_text”, que contém a mensagem completa do Post, sem truncamento, quando ela tiver mais de 140 caracteres. O objeto “extended_tweet” também contém um objeto “entities” com arrays completos de hashtags, links, menções etc. Posts estendidos são identificados por um booleano “truncated” no nível raiz. Quando true (“truncated”: true), os campos de “extended_tweet” devem ser analisados em vez dos campos do nível raiz. Observe, no exemplo de JSON abaixo, que o campo “text” no nível raiz está truncado e o array “entities.hashtags” no nível raiz está vazio, embora a mensagem do Post inclua três hashtags. Como este é um Post estendido, o campo “truncated” está definido como true e o objeto “extended_tweet” fornece metadados completos do Post em “full_text” e “entities”.
{
	"created_at": "Thu May 10 17:41:57 +0000 2018",
	"id_str": "994633657141813248",
	"text": "Apenas outro Tweet Estendido com mais de 140 caracteres, gerado como um exemplo de documentação, mostrando que [\"tru… https://t.co/U7Se4NM7Eu",
	"display_text_range": [0, 140],
	"truncated": true,
	"user": {
		"id_str": "944480690",
		"screen_name": "FloodSocial"
	},
	"extended_tweet": {
		"full_text": "Apenas outro Tweet Estendido com mais de 140 caracteres, gerado como um exemplo de documentação, mostrando que [\"truncated\": true] e a presença de um objeto \"extended_tweet\" com texto completo e \"entities\" #documentation #parsingJSON #GeoTagged https://t.co/e9yhQTJSIA",
		"display_text_range": [0, 249],
		"entities": {
			"hashtags": [{
				"text": "documentation",
				"indices": [211, 225]
			}, {
				"text": "parsingJSON",
				"indices": [226, 238]
			}, {
				"text": "GeoTagged",
				"indices": [239, 249]
			}]
		}

	},
	"entities": {
		"hashtags": []
	}
}

Objeto de usuário nativo enriquecido

O objeto de usuário contém metadata da conta de usuário do X que descreve o usuário do X referenciado. 

Dicionário de dados de usuário

AtributoTipoDescrição
idInt64A representação inteira do identificador único para este usuário. Este número é maior que 53 bits e algumas linguagens de programação podem ter dificuldades/defeitos silenciosos ao interpretá-lo. É seguro usar um inteiro de 64 bits com sinal para armazenar este identificador. Use id_str para obter o identificador com segurança. Consulte X IDs para mais informações. Exemplo:

“id”: 6253282
id_strStringA representação em string do identificador único para este usuário. As implementações devem usar isso em vez do inteiro grande e possivelmente não consumível em id. Exemplo:

“id_str”: “6253282”
nameStringO nome do usuário, conforme definido por ele. Não necessariamente o nome de uma pessoa. Normalmente limitado a 50 caracteres, mas sujeito a alterações. Exemplo:

“name”: “API”
screen_nameStringO nome de usuário, identificador ou alias com o qual este usuário se identifica. Os screen_names são únicos, mas sujeitos a alterações. Use id_str como identificador de usuário sempre que possível. Normalmente tem no máximo 15 caracteres, mas algumas contas históricas podem ter nomes mais longos. Exemplo:

“screen_name”: “api”
locationStringAnulável. A localização definida pelo usuário para o perfil desta conta. Não necessariamente uma localização, nem interpretável por máquina. Este campo será ocasionalmente interpretado de forma aproximada pelo serviço de Busca. Exemplo:

“location”: “San Francisco, CA”
derivedArrays of Enrichment ObjectsApenas APIs Enterprise. Coleção de metadados de Enriquecimento derivados para o usuário. Fornece os metadados de Enriquecimento Profile Geo. Consulte a documentação referenciada para mais informações, incluindo dicionários de dados JSON. Exemplo:

“derived”:“locations”: [“country”:“United States”,“country_code”:“US”,“locality”:“Denver”]
urlStringAnulável. Uma URL fornecida pelo usuário em associação com seu perfil. Exemplo:

“url”: “https://developer.x.com
descriptionStringAnulável. A string UTF-8 definida pelo usuário descrevendo sua conta. Exemplo:

“description”: “The Real X API.”
protectedBooleanQuando verdadeiro, indica que este usuário escolheu proteger seus Posts. Consulte Sobre Posts Públicos e Protegidos. Exemplo:

“protected”: true
verifiedBooleanQuando verdadeiro, indica que o usuário tem uma conta verificada. Consulte Contas Verificadas. Exemplo:

“verified”: false
followers_countIntO número de seguidores que esta conta possui atualmente. Sob certas condições de sobrecarga, este campo indicará temporariamente “0”. Exemplo:

“followers_count”: 21
friends_countIntO número de usuários que esta conta está seguindo (também conhecidos como “seguindo”). Sob certas condições de sobrecarga, este campo indicará temporariamente “0”. Exemplo:

“friends_count”: 32
listed_countIntO número de listas públicas das quais este usuário é membro. Exemplo:

“listed_count”: 9274
favourites_countIntO número de Posts que este usuário curtiu durante o tempo de vida da conta. Grafia britânica usada no nome do campo por razões históricas. Exemplo:

“favourites_count”: 13
statuses_countIntO número de Posts (incluindo retweets) publicados pelo usuário. Exemplo:

“statuses_count”: 42
created_atStringA data e hora UTC em que a conta do usuário foi criada no X. Exemplo:

“created_at”: “Mon Nov 29 21:18:15 +0000 2010”
profile_banner_urlStringA URL baseada em HTTPS que aponta para a representação web padrão do banner de perfil enviado pelo usuário. Ao adicionar um elemento de caminho final à URL, é possível obter diferentes tamanhos de imagem otimizados para telas específicas. Para variantes de tamanho, consulte Imagens e Banners de Perfil do Usuário.

Exemplo:

“profile_banner_url”: “https://si0.twimg.com/profile&#95;banners/819797/1348102824
profile_image_url_httpsStringUma URL baseada em HTTPS que aponta para a imagem de perfil do usuário. Exemplo:

“profile_image_url_https”:
https://abs.twimg.com/sticky/default&#95;profile&#95;images/default&#95;profile&#95;normal.png
default_profileBooleanQuando verdadeiro, indica que o usuário não alterou o tema ou plano de fundo de seu perfil de usuário. Exemplo:

“default_profile”: false
default_profile_imageBooleanQuando verdadeiro, indica que o usuário não enviou sua própria imagem de perfil e uma imagem padrão é usada em seu lugar. Exemplo:

“default_profile_image”: false

Atributos obsoletos (sem suporte)

CampoTipoDescrição
utc_offsetnullO valor será definido como null. Ainda disponível via GET account/settings
time_zonenullO valor será definido como null. Ainda disponível via GET account/settings como tzinfo_name
langnullO valor será definido como null. Ainda disponível via GET account/settings como language
geo_enablednullO valor será definido como null. Ainda disponível via GET account/settings. Este campo deve ser true para que o usuário atual anexe dados geográficos ao usar POST statuses/update
followingnullO valor será definido como null. Ainda disponível via GET friendships/lookup
follow_request_sentnullO valor será definido como null. Ainda disponível via GET friendships/lookup
has_extended_profilenullDeprecated. O valor será definido como null.
notificationsnullDeprecated. O valor será definido como null.
profile_locationnullDeprecated. O valor será definido como null.
contributors_enablednullDeprecated. O valor será definido como null.
profile_image_urlnullDeprecated. O valor será definido como null. OBSERVAÇÃO: As imagens de perfil estão disponíveis apenas por meio do campo profile_image_url_https.
profile_background_colornullDeprecated. O valor será definido como null.
profile_background_image_urlnullDeprecated. O valor será definido como null.
profile_background_image_url_httpsnullDeprecated. O valor será definido como null.
profile_background_tilenullDeprecated. O valor será definido como null.
profile_link_colornullDeprecated. O valor será definido como null.
profile_sidebar_border_colornullDeprecated. O valor será definido como null.
profile_sidebar_fill_colornullDeprecated. O valor será definido como null.
profile_text_colornullDeprecated. O valor será definido como null.
profile_use_background_imagenullDeprecated. O valor será definido como null.
is_translatornullDeprecated. O valor será definido como null.
is_translation_enablednullDeprecated. O valor será definido como null.
translator_typenullDeprecated. O valor será definido como null.

Exemplo de objeto de usuário:

"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "A voz da equipe #XDevelopers e sua fonte oficial de atualizações, notícias e eventos relacionados à #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	}

Objetos de Geo Enriquecidos Nativos

Posts podem ser associados a um local, gerando um Post “com marcação geográfica” (geo‑tagged). As localizações de Posts podem ser atribuídas usando a interface do X ou ao publicar um Post via API. A localização pode ser um “ponto” exato ou um X Place com uma “caixa delimitadora” que descreve uma área maior, de um estabelecimento a uma região inteira. Há três objetos JSON de “nível raiz” usados para descrever a localização associada a um Post: place, geo e coordinates. Além disso, o formato nativo enriquecido inclui, dentro do objeto de usuário, a localização derivada do profile geo enrichment. O objeto place está sempre presente quando um Post é marcado com um place. Places são locais específicos, nomeados, com coordenadas geográficas correspondentes. Quando os usuários decidem atribuir uma localização ao seu Post, é apresentada a eles uma lista de X Places candidatos. Ao usar a API para publicar, um X Place pode ser anexado especificando um place_id no momento da postagem. Posts associados a Places não são necessariamente emitidos a partir daquele local, podendo também ser sobre aquele local. Os objetos geo e coordinates só estão presentes (não nulos) quando o Post é associado a um local exato. Se um local exato for fornecido, o objeto coordinates fornecerá um array [long, lat] com as coordenadas geográficas, e um X Place correspondente a esse local será atribuído.

Dicionário de dados de Place

FieldTypeDescription
idStringID que representa este place. Observação: é representado como uma string, não um inteiro. Exemplo:

“id”:“01a9a39529b27f36”
urlStringURL que representa a localização dos metadados adicionais de place para este place. Exemplo:

“url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json
place_typeStringO tipo de local representado por este place. Exemplo:

“place_type”:“city”
nameStringRepresentação curta e legível por humanos do nome do place. Exemplo:

“name”:“Manhattan”
full_nameStringRepresentação completa e legível por humanos do nome do place. Exemplo:

“full_name”:“Manhattan, NY”
country_codeStringCódigo de país abreviado que representa o país que contém este place. Exemplo:

“country_code”:“US”
countryStringNome do país que contém este place. Exemplo:

“country”:“United States”
bounding_boxObjectUma caixa delimitadora de coordenadas que envolve este place. Exemplo:


“bounding_box”:
“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
],
“type”: “Polygon”

attributesObjectAo usar as APIs PowerTrack, 30-Day e Full-Archive Search e os Volume Streams, este hash é null. Exemplo:

“attributes”:

Caixa delimitadora

CampoTipoDescrição
coordinatesArray of Array of Array of FloatUma série de pontos de longitude e latitude que definem uma caixa que conterá a entidade Place à qual esta caixa delimitadora se relaciona. Cada ponto é um array no formato [longitude, latitude]. Os pontos são agrupados em um array por caixa delimitadora. Arrays de caixas delimitadoras são envolvidos por um array adicional para serem compatíveis com a notação de polígono. Exemplo:


“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
]
typeStringO tipo de dados codificado na propriedade coordinates. Será “Polygon” para caixas delimitadoras e “Point” para Posts com coordenadas exatas. Exemplo:

“type”:“Polygon”

Dicionário de dados do objeto Geo

FieldTypeDescription
coordinatesCollection of FloatA longitude e a latitude da localização do Post, como uma coleção no formato [latitude, longitude]. Exemplo:

**  “geo”:

“type”:** “Point”,

**    “coordinates”: [

54.27784
,

-0.41068

    ]

  **
typeStringO tipo de dado codificado na propriedade coordinates. Será “Point” para os fields de coordinates de Post. Exemplo:

“type”: “Point”
Dicionário de dados do objeto Coordinates
FieldTypeDescription
coordinatesCollection of FloatA longitude e a latitude da localização do Post, como uma coleção no formato [longitude, latitude]. Exemplo:

**  “coordinates”:

“type”:** “Point”,

**    “coordinates”: [

-0.41068
,

54.27784

    ]

  **
typeStringO tipo de dado codificado na propriedade coordinates. Será “Point” para os fields de coordinates de Post. Exemplo:

“type”: “Point”

Localizações derivadas

CampoTipoDescrição
derivedobjeto locationsLocalização derivada do enriquecimento geográfico do perfil

“derived”:

      “locations”: [


**       

“country”:** “United Kingdom”,

“country_code”: “GB”,

“locality”: “Yorkshire”,

“region”: “England”,

“full_name”: “Yorkshire, England, United Kingdom”,

**          “geo”:

            “coordinates”: [

-1.5
,

54

            ],

“type”:** “point”

**         

       

      ]

    **

Exemplos:

{
  "geo": null,
  "coordinates": null,
  "place": {
    "id": "07d9db48bc083000",
    "url": "https://api.x.com/1.1/geo/id/07d9db48bc083000.json",
    "place_type": "poi",
    "name": "McIntosh Lake",
    "full_name": "McIntosh Lake",
    "country_code": "US",
    "country": "Estados Unidos",
    "bounding_box": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ],
          [
            -105.14544,
            40.192138
          ]
        ]
      ]
    },
    "attributes": {

    }
  }
}
{
  "geo": {
    "type": "Point",
    "coordinates": [
      40.74118764,
      -73.9998279
    ]
  },
  "coordinates": {
    "type": "Point",
    "coordinates": [
      -73.9998279,
      40.74118764
    ]
  },
  "place": {
    "id": "01a9a39529b27f36",
    "url": "https://api.x.com/1.1/geo/id/01a9a39529b27f36.json",
    "place_type": "city",
    "name": "Manhattan",
    "full_name": "Manhattan, NY",
    "country_code": "US",
    "country": "Estados Unidos",
    "bounding_box": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -74.026675,
            40.683935
          ],
          [
            -74.026675,
            40.877483
          ],
          [
            -73.910408,
            40.877483
          ],
          [
            -73.910408,
            40.683935
          ]
        ]
      ]
    },
    "attributes": {

    }
  }
}
Dicionário de dados: Enterprise

Entidades do X  

Ir para nesta página Introdução Objeto entities   - Objeto hashtag   - Objeto mídia   - Objeto tamanho de mídia   - Objeto URL   - Objeto menção de usuário   - Objeto símbolo   - Objeto enquete Detalhes de Retweet e Quote Tweet Entidades em objetos de usuário Entidades em Mensagens diretas Próximas etapas

Introdução

As entidades fornecem metadados e informações contextuais adicionais sobre o conteúdo publicado no X. A seção entities fornece arrays de itens comuns incluídos em Posts: hashtags, menções a usuários, links, tickers de ações (símbolos), enquetes do X e mídia anexada. Esses arrays são convenientes para desenvolvedores ao ingerirem Posts, já que o X essencialmente pré-processou, ou pré-parseou, o corpo do texto. Em vez de precisar procurar e localizar explicitamente essas entidades no corpo do Post, seu parser pode ir direto para esta seção JSON e encontrá-las lá. Além de oferecer conveniências de parsing, a seção entities também fornece metadados úteis como “valor agregado”. Por exemplo, se você estiver usando o Enhanced URLs enrichment, os metadados de URL incluem URLs totalmente expandidas, bem como títulos e descrições do site associado. Outro exemplo é quando há menções a usuários: os metadados de entities incluem o id numérico do usuário, o que é útil ao fazer solicitações para muitas X APIs. Todo payload JSON de Post inclui uma seção entities, com o conjunto mínimo de atributos hashtags, urls, user_mentions e symbols, mesmo que nenhuma dessas entidades faça parte da mensagem do Post. Por exemplo, se você examinar o JSON de um Post com o corpo “Hello World!” e sem mídia anexada, o JSON do Post incluirá o seguinte conteúdo, com arrays de entidades contendo zero itens:
"entities": {
        "hashtags": [
        ],
        "urls": [
        ],
        "user_mentions": [
        ],
        "symbols": [
        ]
      }
Notas:
  • as entidades media e polls só aparecerão quando esse tipo de conteúdo fizer parte do Post.
  • se você estiver trabalhando com mídia nativa (fotos, vídeos ou GIFs), o objeto Extended Entities é a melhor opção.

Objeto Entities

As seções entities e extended_entities são compostas por arrays de objetos de entidade. A seguir, você encontrará descrições de cada um desses objetos, incluindo dicionários de dados que detalham os nomes dos atributos, seus tipos e uma breve descrição. Também indicaremos quais PowerTrack Operators correspondem a esses atributos e incluiremos alguns exemplos de payloads JSON. Uma coleção de entidades comuns encontradas em Posts, incluindo hashtags, links e menções a usuários. O objeto entities inclui um atributo media, mas sua implementação na seção entities é totalmente precisa apenas para Posts com uma única foto. Para Posts com mais de uma foto, com vídeo ou com GIF animado, consulte a seção extended_entities.

Dicionário de dados de Entities

O objeto entities é um contêiner de arrays de outros subobjetos de entidade. Após ilustrar a estrutura de entities, serão fornecidos dicionários de dados para esses subobjetos e os operadores que fazem correspondência com eles.
CampoTipoDescrição
hashtagsArray de Objetos HashtagRepresenta hashtags que foram analisadas e extraídas do texto do Post. Exemplo:


“hashtags”: [

“indices”: [
32,
38
],
“text”: “nodejs”

]
mediaArray de Objetos MediaRepresenta elementos de mídia carregados com o Post. Exemplo:


“media”: [

“display_url”: “pic.x.com/5J1WJSRCy9”,
“expanded_url”: “https://x.com/nolan_test/status/930077847535812610/photo/1”,
“id”: 9.300778475358126e17,
“id_str”: “930077847535812610”,
“indices”: [
13,
36
],
“media_url”: “http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,
“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg
“sizes”:
“thumb”:
“h”: 150,
“resize”: “crop”,
“w”: 150
,
“large”:
“h”: 1366,
“resize”: “fit”,
“w”: 2048
,
“medium”:
“h”: 800,
“resize”: “fit”,
“w”: 1200
,
“small”:
“h”: 454,
“resize”: “fit”,
“w”: 680

,
“type”: “photo”,
“url”: “https://t.co/5J1WJSRCy9”,

]
urlsArray de Objetos URLRepresenta URLs incluídas no texto de um Post.

Exemplo (sem o enriquecimento Enhanced URLs ativado):


“urls”: [

“indices”: [
32,
52
],
“url”: “http://t.co/IOwBrTZR”,
“display_url”: “youtube.com/watch?v=oHg5SJ…”,
“expanded_url”: “http://www.youtube.com/watch?v=oHg5SJYRHA0

]


Exemplo (com o enriquecimento Enhanced URLs ativado):

“urls”: [

“url”: “https://t.co/D0n7a53c2l”,
“expanded_url”: “http://bit.ly/18gECvy”,
“display_url”: “bit.ly/18gECvy”,
“unwound”:
“url”: “https://www.youtube.com/watch?v=oHg5SJYRHA0”,
“status”: 200,
“title”: “RickRoll’D”,
“description”: “http://www.facebook.com/rickroll548 As long as trolls are still trolling, the Rick will never stop rolling.”
,
“indices”: [
62,
85
]

]
user_mentionsArray de Objetos User MentionRepresenta outros usuários do X mencionados no texto do Post. Exemplo:


“user_mentions”: [

“name”: “X API”,
“indices”: [
4,
15
],
“screen_name”: “xapi”,
“id”: 6253282,
“id_str”: “6253282”

]
symbolsArray de Objetos SymbolRepresenta símbolos, isto é, $cashtags, incluídos no texto do Post. Exemplo:


“symbols”: [

“indices”: [
12,
17
],
“text”: “twtr”

]
pollsArray de Objetos PollRepresenta enquetes do X incluídas no Post. Exemplo:

“polls”: [

“options”: [

“position”: 1,
“text”: “I read documentation once.”
,

“position”: 2,
“text”: “I read documentation twice.”
},

“position”: 3,
“text”: “I read documentation over and over again.”
}
],
“end_datetime”: “Thu May 25 22:20:27 +0000 2017”,
“duration_minutes”: 60

]

Objeto de hashtag  

A seção entities conterá um array hashtags com um objeto para cada hashtag incluída no corpo do Post e incluirá um array vazio se nenhuma hashtag estiver presente. O operador # do PowerTrack é usado para fazer correspondência com o atributo text. O operador has:hashtags corresponderá se houver pelo menos um item no array.
CampotypeDescrição
indicesArray of IntUm array de inteiros indicando os deslocamentos dentro do texto do Post onde a hashtag começa e termina. O primeiro inteiro representa a posição do caractere # na string de texto do Post. O segundo inteiro representa a posição do primeiro caractere após a hashtag. Portanto, a diferença entre os dois números será o comprimento do nome da hashtag mais um (pelo caractere ‘#’). Exemplo:

“indices”:[32,38]
textStringNome da hashtag, sem o caractere inicial ‘#’. Exemplo:

“text”:“nodejs”

Objeto de mídia  

A seção entities conterá um array media com um único objeto de mídia se algum objeto de mídia tiver sido “anexado” ao Post. Se nenhuma mídia nativa tiver sido anexada, não haverá um array media em entities. Pelos seguintes motivos, a seção extended_entities deve ser usada para processar a mídia nativa do Post:
  • O type da mídia sempre indicará “photo”, mesmo nos casos de um vídeo ou um GIF anexados ao Post.
  • Embora até quatro fotos possam ser anexadas, apenas a primeira será listada na seção entities.
O operador has:media fará correspondência se esse array estiver populado.
CampoTipoDescrição
display_urlStringURL da mídia para exibição aos clientes. Exemplo:

“display_url”:“pic.x.com/rJC5Pxsu”
expanded_urlStringUma versão expandida de display_url. Direciona para a página de exibição da mídia. Exemplo:

“expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1
idInt64ID da mídia expresso como um inteiro de 64 bits. Exemplo:

“id”:114080493040967680
id_strStringID da mídia expresso como uma string. Exemplo:

“id_str”:“114080493040967680”
indicesArray of IntUm array de inteiros indicando os deslocamentos dentro do texto do Post onde a URL começa e termina. O primeiro inteiro representa a localização do primeiro caractere da URL no texto do Post. O segundo inteiro representa a localização do primeiro caractere não-URL que ocorre após a URL (ou o final da string se a URL for a última parte do texto do Post). Exemplo:

“indices”:[15,35]
media_urlStringUma URL http:// que aponta diretamente para o arquivo de mídia enviado. Exemplo:

“media_url”:“http://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg

Para mídia em Mensagens diretas, media_url é a mesma URL https que media_url_https e deve ser acessada assinando uma solicitação com o access token do usuário usando OAuth 1.0a.

Não é possível acessar imagens através de uma sessão autenticada do x.com. Visite esta página para aprender como lidar com essa mudança recente.

Você não pode incorporar essas imagens diretamente em uma página web.

Consulte Formatação de URL de mídia de foto para saber como formatar a URL de uma foto, como media_url_https, com base nos sizes disponíveis.
media_url_httpsStringUma URL https:// que aponta diretamente para o arquivo de mídia enviado, para incorporação em páginas https. Exemplo:

“media_url_https”:“https://p.twimg.com/AZVLmp-CIAAbkyy.jpg

Para mídia em Mensagens diretas, media_url_https deve ser acessada assinando uma solicitação com o access token do usuário usando OAuth 1.0a.

Não é possível acessar imagens através de uma sessão autenticada do x.com. Visite esta página para aprender como lidar com essa mudança recente.

Você não pode incorporar essas imagens diretamente em uma página web.

Consulte Formatação de URL de mídia de foto para saber como formatar a URL de uma foto, como media_url_https, com base nos sizes disponíveis.
sizesSize ObjectUm objeto mostrando tamanhos disponíveis para o arquivo de mídia. Exemplo:


“sizes”:
“thumb”:
“h”: 150,
“resize”: “crop”,
“w”: 150
},
“large”:
“h”: 1366,
“resize”: “fit”,
“w”: 2048
},
“medium”:
“h”: 800,
“resize”: “fit”,
“w”: 1200
},
“small”:
“h”: 454,
“resize”: “fit”,
“w”: 680
}
}
}

Consulte Formatação de URL de mídia de foto para saber como formatar a URL de uma foto, como media_url_https, com base nos sizes disponíveis.
source_status_idInt64Anulável. Para Posts contendo mídia que foi originalmente associada a um Post diferente, este ID aponta para o Post original. Exemplo:

“source_status_id”: 205282515685081088
source_status_id_strInt64Anulável. Para Posts contendo mídia que foi originalmente associada a um Post diferente, este ID baseado em string aponta para o Post original. Exemplo:

“source_status_id_str”: “205282515685081088”
typeStringTipo de mídia enviada. Tipos possíveis incluem photo, video e animated_gif. Exemplo:

“type”:“photo”
urlStringURL encapsulada para o link da mídia. Isso corresponde à URL incorporada diretamente no texto bruto do Post e aos valores para o parâmetro indices. Exemplo:

“url”:“http://t.co/rJC5Pxsu

Objetos de tamanho de mídia

Todos os Posts com mídia nativa (fotos, vídeos e GIFs) incluirão um conjunto de tamanhos “thumb”, “small”, “medium” e “large” com altura e largura em pixels. Para fotos e URLs de imagem de visualização, a formatação de URL de mídia de foto especifica como construir URLs diferentes para carregar fotos em tamanhos distintos.

Objeto de tamanhos

FieldTypeDescription
thumbSize ObjectInformações para uma versão em tamanho de miniatura da mídia. Exemplo:

“thumb”:“h”:150, “resize”:“crop”, “w”:150}

Fotos em tamanho de miniatura serão limitadas a preencher um limite de 150x150 e serão recortadas.
largeSize ObjectInformações para uma versão em tamanho grande da mídia. Exemplo:

“large”:“h”:454, “resize”:“fit”, “w”:680}

Fotos em tamanho pequeno serão limitadas a se ajustar dentro de um limite de 680x680.
mediumSize ObjectInformações para uma versão em tamanho médio da mídia. Exemplo:

“medium”:“h”:800, “resize”:“fit”, “w”:1200}

Fotos em tamanho médio serão limitadas a se ajustar dentro de um limite de 1200x1200.
smallSize ObjectInformações para uma versão em tamanho pequeno da mídia. Exemplo:

“small”:“h”:1366, “resize”:“fit”, “w”:2048}

Fotos em tamanho grande serão limitadas a se ajustar dentro de um limite de 2048x2048.

Objeto de tamanho 

CampoTipoDescrição
wIntLargura em pixels deste tamanho. Exemplo:

“w”:150
hIntAltura em pixels deste tamanho. Exemplo:

“h”:150
resizeStringMétodo de redimensionamento usado para obter este tamanho. Um valor de fit indica que a mídia foi redimensionada para se ajustar a uma dimensão, mantendo sua proporção original. Um valor de crop indica que a mídia foi recortada para se ajustar a uma resolução específica. Exemplo:

“resize”:“crop”

Formatação de URL de mídia de foto

A mídia de foto no X pode ser carregada em diferentes tamanhos. É melhor carregar a menor imagem que ainda seja grande o suficiente para caber em um determinado viewport de imagem. Para carregar diferentes tamanhos, o Size Object e media_url (ou media_url_https) precisam ser combinados em um formato específico. Usaremos o objeto de exemplo de media entity já fornecido para construir uma URL de mídia de foto. As media_url ou media_url_https, por si só, podem ser carregadas, o que fará com que a variante média seja carregada por padrão. No entanto, é preferível fornecer uma URL de mídia de foto totalmente formatada quando possível. Há três partes de uma URL de mídia de foto:
Base URLA Base URL é a URL da mídia sem a extensão do arquivo.

Por exemplo:

“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,

A Base URL é então:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq
FormatO formato é o tipo de arquivo em que a imagem está. Os formatos possíveis são jpg ou png, fornecidos como a extensão da URL da mídia.

Por exemplo:

“media_url_https”: “https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg”,

O formato é então: jpg
NameO name é o nome do campo do tamanho a ser carregado.

Por exemplo:


 “sizes”:
   “thumb”:
     “h”: 150,
     “resize”: “crop”,
     “w”: 150
   ,
   “large”:
     “h”: 1366,
     “resize”: “fit”,
     “w”: 2048
   },
   “medium”:
     “h”: 800,
     “resize”: “fit”,
     “w”: 1200
   },
   “small”:
     “h”: 454,
     “resize”: “fit”,
     “w”: 680
   }
 }
}

O name ao carregar a foto no tamanho grande seria: large
Pegamos essas três partes (Base URL, Format e Name) e as combinamos na URL de mídia de foto a ser carregada. Existem 2 formatos para carregar imagens dessa forma, legacy e modern. Todos os carregamentos de imagens devem parar de usar o formato legacy e passar a usar o formato modern. Usar o formato modern resultará em uma melhor taxa de acerto de CDN para o chamador, melhorando assim as latências de carregamento por reduzir a probabilidade de ter que gerar e carregar a mídia do data center.
Formato legadoO formato legado foi descontinuado. Todos os carregamentos de mídia de foto devem migrar para o formato moderno.

<base_url>.<format>:<name>

Por exemplo:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large
Formato modernoO formato moderno para carregamento de fotos foi estabelecido na X em 2015 e é o padrão de fato desde 2017. Todos os carregamentos de mídia de foto devem migrar para esse formato.

<base_url>?format=<format>&name=<name>

Por exemplo:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq?format=jpg&amp;name=large


Observação: os itens na query string da URL de mídia de foto estão em ordem alfabética. Se o carregamento de mídia vier a adicionar quaisquer itens adicionais de query, a ordenação alfabética continuará sendo necessária. Por exemplo, se houvesse o item de query hipotético chamado preferred_format, ele viria depois de format e name na query string.

Objeto de URL 

A seção entities conterá um array urls com um objeto para cada link incluído no corpo do Post e incluirá um array vazio se não houver links. O operador has:links faz correspondência se houver pelo menos um item no array. O operador url: é usado para corresponder ao atributo expanded_url. Se você estiver usando o Expanded URL enrichment, o operador url: é usado para corresponder ao atributo unwound.url (URL totalmente descompactada). Se você estiver usando o Enhanced URL enrichment, os operadores url_title: e url_description: são usados para corresponder aos atributos unwound.title e unwound.description.
FieldTypeDescription
display_urlStringURL colada/digitada no Post. Exemplo:

“display_url”:“bit.ly/2so49n2”
expanded_urlStringVersão expandida de display_url. Exemplo:

“expanded_url”:“http://bit.ly/2so49n2
indicesArray of IntUm array de inteiros que representam deslocamentos no texto do Post indicando onde a URL começa e termina. O primeiro inteiro representa a posição do primeiro caractere da URL no texto do Post. O segundo inteiro representa a posição do primeiro caractere não pertencente à URL após o fim da URL. Exemplo:

“indices”:[30,53]
urlStringURL encapsulada, correspondente ao valor incorporado diretamente no texto bruto do Post e aos valores do parâmetro indices. Exemplo:

“url”:“https://t.co/yzocNFvJuL
Se você estiver usando os enriquecimentos Expanded e/ou Enhanced URL, as seguintes metadados estão disponíveis no atributo unwound:
FieldTypeDescription
urlStringA versão totalmente descompactada do link incluído no Post. Exemplo:

“url”:“https://blog.x.com/en&#95;us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html
statusIntStatus HTTP final do processo de descompactação, sendo ‘200’ indicativo de sucesso. Exemplo:

200
titleStringTítulo HTML do link. Exemplo:

“title”:“Using X as a ‘go-to’ communication channel during severe weather”
descriptionStringDescrição HTML do link. Exemplo:

“description”:“Using X as a ‘go-to’ communication channel during severe weather”

Objeto de menção de usuário  

A seção entities conterá um array user_mentions com um objeto para cada menção de usuário incluída no corpo do Post e incluirá um array vazio se nenhuma menção de usuário estiver presente. O operador @ do PowerTrack é usado para corresponder ao atributo screen_name. O operador has:mentions corresponderá se houver pelo menos um item no array.
CampoTipoDescrição
idInt64ID do usuário mencionado, como um inteiro. Exemplo:

“id”:6253282
id_strStringID do usuário mencionado, como uma string. Exemplo:

“id_str”:“6253282”
indicesArray of IntUm array de inteiros que representa os deslocamentos no texto do Post onde a referência ao usuário começa e termina. O primeiro inteiro representa a posição do caractere “@” da menção ao usuário. O segundo inteiro representa a posição do primeiro caractere que não faz parte do screen name após a menção ao usuário. Exemplo:

“indices”:[4,15]
nameStringNome de exibição do usuário referenciado. Exemplo:

“name”:“API”
screen_nameStringScreen name do usuário referenciado. Exemplo:

“screen_name”:“api”

Objeto de símbolo  

A seção entities conterá um array symbols com um objeto para cada $cashtag incluído no corpo do Post e incluirá um array vazio se nenhum símbolo estiver presente. O operador $ do PowerTrack é usado para fazer a correspondência no atributo text. O operador has:symbols fará a correspondência se houver pelo menos um item no array.
FieldTypeDescription
indicesArray of IntUm array de números inteiros que indica os deslocamentos dentro do texto do Post onde o símbolo/cashtag começa e termina. O primeiro número inteiro representa a posição do caractere nastringdetextodoPost.Osegundonuˊmerointeirorepresentaaposic\ca~odoprimeirocaractereapoˊsocashtag.Portanto,adiferenc\caentreosdoisnuˊmerosseraˊocomprimentodonomedocashtagmaisum(pelocaractere na string de texto do Post. O segundo número inteiro representa a posição do primeiro caractere após o cashtag. Portanto, a diferença entre os dois números será o comprimento do nome do cashtag mais um (pelo caractere ‘’). Exemplo:

“indices”:[12,17]
textStringNome do cashtag, sem o caractere ‘$’ inicial. Exemplo:

“text”:“twtr”

Objeto de enquete

A seção entities conterá um array polls com um único objeto poll se o Post incluir uma enquete. Se nenhuma enquete for incluída, não haverá array polls na seção entities. Observe que esses metadados de enquete estão disponíveis apenas nas seguintes APIs Enterprise:
FieldTypeDescription
optionsArray of Option ObjectUm array de opções, cada uma com uma posição da enquete e o texto para essa posição. Exemplo:

“options”: [

“position”: 1,
“text”: “I read documentation once.”
}
]
}
end_datetimeStringCarimbo de data/hora (UTC) indicando quando a enquete termina. Exemplo:

“end_datetime”: “Thu May 25 22:20:27 +0000 2017”
duration_minutesStringDuração da enquete em minutos. Exemplo:

“duration_minutes”: 60

Detalhes sobre Retweet e Quote Tweet

Do ponto de vista da X API, Retweets e Quote Tweets são tipos especiais de Posts que contêm o Post original como um objeto incorporado. Assim, os objetos de Retweet e Quote Tweet são “pais” de um Post “original” filho (e, portanto, têm o dobro do tamanho). Retweets têm um objeto de nível superior “retweeted_status”, e Quote Tweets têm um objeto “quoted_status”. Para manter a consistência, esses objetos de nível superior de Retweet e Quote Tweet também possuem uma propriedade text e entities associadas. No entanto, as entities no nível superior podem diferir das entities fornecidas pelas entities “originais” incorporadas. No caso de Retweets, um novo texto é adicionado no início do corpo do Post original. Para Quote Posts, um novo texto é anexado ao corpo do Post. Em geral, a prática recomendada é recuperar o texto, as entities, o autor original e a data a partir do Post original em retweeted_status sempre que isso existir. Uma exceção é obter as entities do X que fazem parte do conteúdo aditivo do Quote. Veja abaixo mais detalhes e dicas.

Retweets

Um detalhe importante sobre Retweets é que nenhuma outra entidade do X pode ser adicionada ao Post. Os usuários não podem adicionar hashtags, URLs ou outros detalhes quando fazem Retweet. No entanto, o atributo de texto do Retweet (no nível superior) é composto pelo texto do Post original com “RT @username: ” anteposto.   Em alguns casos, especialmente com contas que têm nomes de usuário longos, a combinação desses novos caracteres com o corpo do Post original pode facilmente exceder o limite de 140 caracteres do texto do Post original. Para preservar a compatibilidade com exibição e armazenamento baseados em 140 caracteres, o corpo de nível superior trunca o final do corpo do Post e adiciona uma reticência (“…”). Consequentemente, algumas entidades de nível superior posicionadas no final do Post original podem estar incorretas ou ausentes, por exemplo, no caso de uma hashtag ou URL truncadas. Este Post, https://x.com/FloodSocial/status/907974220298125312, tem o seguinte texto de Post: Just another test Post that needs to be exactly 140 characters with trailing URL and hashtag
http://wapo.st/2w8iwPQ #Testing
No exemplo acima, tanto a URL quanto a hashtag foram afetadas. Como a hashtag foi completamente truncada e a URL parcialmente truncada, elas estão ausentes das entidades de nível superior. Você também notará a entidade adicional de nível superior user_mentions decorrente do prefixo “RT @floodsocial: ” no campo text. No entanto, o texto do Post e as entidades em retweeted_status refletem perfeitamente o Post original, sem truncamento ou entidades incorretas; por isso recomendamos confiar no objeto aninhado retweeted_status para Retweets.

Quote Tweets

Quote Tweets foram introduzidos em 2016 e diferem de Retweets porque, quando você “cita” um Post, está adicionando novo conteúdo “por cima” de um Post compartilhado. Esse novo conteúdo pode incluir praticamente tudo o que um Post original pode ter, incluindo novo texto, hashtags, menções e URLs. Quote Tweets podem conter mídia nativa (fotos, vídeos e GIFs) e aparecerão no objeto entities. Como entidades de X podem ser adicionadas, as entidades da Quote provavelmente serão diferentes das entidades originais. Neste exemplo, uma nova URL e uma hashtag foram posicionadas ao final do Quote Tweet. Este Post, https://x.com/FloodSocial/status/907983973225160704, tem o seguinte texto de Post: estranho e igualmente trágico quando ilhas inundam… teste transatlântico de quote tweets | @thisuser @thatuserhttp://bit.ly/2vMMDuu #testing Neste caso, as entities de nível superior não refletem os detalhes da Quote. No entanto, o texto do Post e as entities em extended_tweet refletem perfeitamente o Quote Tweet, sem truncamento ou entities incorretas; portanto, recomendamos depender do objeto aninhado extended_tweet para Quote Tweets.

Entidades para objeto de usuário

As entidades para objetos de usuário descrevem URLs que aparecem nos campos de URL e descrição definidos pelo usuário no perfil. Elas não descrevem hashtags ou user_mentions. Diferentemente das entidades de Post, as entidades de usuário podem se aplicar a vários campos dentro de seu objeto pai — para desambiguar, você encontrará nós-pai chamados url e description que indicam qual campo contém a URL com entidade. Neste exemplo, o campo url do usuário contém um link t.co que é totalmente expandido dentro do nó entities/url/urls[0] da resposta. O usuário não tem uma URL encurtada/encapsulada na descrição.

Exemplo de JSON

{
  "id": 6253282,
  "id_str": "6253282",
  "name": "X API",
  "screen_name": "xapi",
  "location": "San Francisco, CA",
  "description": "A X API oficial. Eu posto sobre mudanças na API, problemas de serviço e respondo com prazer perguntas sobre X e nossa API. Não obteve resposta? Está no meu site.",
  "url": "http:\/\/t.co\/78pYTvWfJd",
  "entities": {
    "url": {
      "urls": [
        {
          "url": "http:\/\/t.co\/78pYTvWfJd",
          "expanded_url": "http:\/\/dev.x.com",
          "display_url": "dev.x.com",
          "indices": [
            0,
            22
          ]
        }
      ]
    },
    "description": {
      "urls": [

      ]
    }
  }
}

Entidades estendidas do X 

Ir para nesta página Introdução Objeto Extended Entities Exemplos de Tweets e payloads JSON   - Tweet com quatro fotos nativas   - Tweet com vídeo nativo   - Tweet com um GIF animado Próximos passos

Introdução

Se um Post contiver mídia nativa (compartilhada pela interface do usuário do Post, em vez de via link para outro lugar), também haverá uma seção extended_entities. Quando se trata de mídia nativa (foto, vídeo ou GIF), extended_entities é a fonte de metadata preferida por vários motivos. Atualmente, é possível anexar até quatro fotos a um Post. A metadata de entities conterá apenas a primeira foto (até 2014, apenas uma foto podia ser incluída), enquanto a seção extended_entities incluirá todas as fotos anexadas. Com mídia nativa, outra limitação da metadata entities.media é que o tipo de mídia sempre indicará ‘photo’, mesmo nos casos em que a mídia anexada seja um vídeo ou GIF animado. O tipo real de mídia é especificado no atributo extended_entities.media[].type e é definido como photo, video ou animated_gif. Por esses motivos, se você estiver trabalhando com mídia nativa, a metadata extended_entities é a abordagem recomendada. Todos os Posts com fotos, vídeos e GIFs animados anexados incluirão um objeto JSON extended_entities. O objeto extended_entities contém um único array media de objetos media (consulte a seção entities para seu dicionário de data). Nenhum outro tipo de entidade, como hashtags e links, é incluído na seção extended_entities. O objeto media na seção extended_entities é idêntico em estrutura ao incluído na seção entities. Posts só podem ter um tipo de mídia anexado. Para fotos, é possível anexar até quatro fotos. Para vídeos e GIFs, é possível anexar uma. Como a metadata type de mídia na seção extended_entities indica corretamente o tipo de mídia (‘photo’, ‘video’ ou ‘animated_gif’) e oferece suporte a até 4 fotos, ela é a fonte de metadata preferida para mídia nativa.
{
      "extended_entities": {
        "media": [

        ]
      }
    }

Exemplos de Posts e payloads JSON

Abaixo estão alguns Posts de exemplo e seus respectivos metadados de entidades. Post com quatro fotos nativas Post com hashtag, menção de usuário, cashtag, URL e quatro fotos nativas:
Aqui está a seção entities deste Post:
{
      "entities": {
        "hashtags": [
          {
            "text": "hashtag",
            "indices": [
              59,
              67
            ]
          }
        ],
        "urls": [
          {
            "url": "https://t.co/RzmrQ6wAzD",
            "expanded_url": "http://bit.ly/2pUk4be",
            "display_url": "bit.ly/2pUk4be",
            "unwound": {
              "url": "https://blog.gnip.com/tweeting-in-the-rain/",
              "status": 200,
              "title": "Tweetando na Chuva, Parte 1 - Blog Gnip - Blog de Dados Sociais e Ciência de Dados",
              "description": "Se você tivesse me dito alguns anos atrás que um dia eu estaria comparando dados de séries temporais de precipitação e mídia social, eu teria assumido que você estava brincando. Por 13 anos na OneRain ajudei a desenvolver software e monitoramento … Continue lendo →"
            },
            "indices": [
              35,
              58
            ]
          }
        ],
        "user_mentions": [
          {
            "screen_name": "MentionThis",
            "name": "Apenas Eu",
            "id": 50247739,
            "id_str": "50247739",
            "indices": [
              16,
              28
            ]
          }
        ],
        "symbols": [
          {
            "text": "twtr",
            "indices": [
              29,
              34
            ]
          }
        ],
        "media": [
          {
            "id": 861627472244162561,
            "id_str": "861627472244162561",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          }
        ]
      }
    }
Somente no payload “estendido” abaixo você encontrará as quatro fotos nativas (no máximo). Observe que a primeira foto no array é a mesma foto única incluída na seção de entities não estendida do X. A estrutura de metadata de media para fotos é a mesma tanto nas seções entities quanto extended_entities. Aqui está a seção extented_entities para este Post:
{
    "extended_entities": {
        "media": [
          {
            "id": 861627472244162561,
            "id_str": "861627472244162561",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPUwAE3Dnn.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627472244203520,
            "id_str": "861627472244203520",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_UdnvPVYAAZbEs.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_UdnvPVYAAZbEs.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 680,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 1200,
                "h": 1200,
                "resize": "fit"
              },
              "large": {
                "w": 2048,
                "h": 2048,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627474144149504,
            "id_str": "861627474144149504",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_Udn2UUQAADZIS.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_Udn2UUQAADZIS.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "medium": {
                "w": 1200,
                "h": 900,
                "resize": "fit"
              },
              "small": {
                "w": 680,
                "h": 510,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 2048,
                "h": 1536,
                "resize": "fit"
              }
            }
          },
          {
            "id": 861627474760708096,
            "id_str": "861627474760708096",
            "indices": [
              68,
              91
            ],
            "media_url": "http://pbs.twimg.com/media/C_Udn4nUMAAgcIa.jpg",
            "media_url_https": "https://pbs.twimg.com/media/C_Udn4nUMAAgcIa.jpg",
            "url": "https://t.co/9r69akA484",
            "display_url": "pic.x.com/9r69akA484",
            "expanded_url": "https://x.com/FloodSocial/status/861627479294746624/photo/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 680,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 1200,
                "h": 1200,
                "resize": "fit"
              },
              "large": {
                "w": 2048,
                "h": 2048,
                "resize": "fit"
              }
            }
          }
        ]
      }
    }

Post com vídeo nativo

A seguir estão os metadados de entidades estendidas deste Post com vídeo:
{
      "extended_entities": {
        "media": [
          {
            "id": 869317980307415040,
            "id_str": "869317980307415040",
            "indices": [
              31,
              54
            ],
            "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "url": "https://t.co/TLSTTOvvmP",
            "display_url": "pic.x.com/TLSTTOvvmP",
            "expanded_url": "https://x.com/FloodSocial/status/869318041078820864/video/1",
            "type": "video",
            "sizes": {
              "small": {
                "w": 340,
                "h": 604,
                "resize": "fit"
              },
              "large": {
                "w": 720,
                "h": 1280,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 600,
                "h": 1067,
                "resize": "fit"
              }
            },
            "video_info": {
              "aspect_ratio": [
                9,
                16
              ],
              "duration_millis": 10704,
              "variants": [
                {
                  "bitrate": 320000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/180x320/FMei8yCw7yc_Z7e-.mp4"
                },
                {
                  "bitrate": 2176000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/720x1280/octt5pFbISkef8RB.mp4"
                },
                {
                  "bitrate": 832000,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/vid/360x640/2OmqK74SQ9jNX8mZ.mp4"
                },
                {
                  "content_type": "application/x-mpegURL",
                  "url": "https://video.twimg.com/ext_tw_video/869317980307415040/pu/pl/wcJQJ2nxiFU4ZZng.m3u8"
                }
              ]
            }
          }
        ]
      }
    }
Quando um anunciante opta por limitar a reprodução de vídeo apenas às plataformas de propriedade e operadas pela X, o objeto video_info será substituído por um objeto additional_media_info. O additional_media_info conterá informações adicionais de mídia fornecidas pelo publisher, como title, description e o sinalizador embeddable. O conteúdo de vídeo fica disponível apenas para clientes oficiais da X quando embeddable=false. Nesse caso, todas as URLs de vídeo fornecidas no payload serão baseadas na X, para que o usuário possa abrir o vídeo em uma propriedade da X ao clicar no link. Aqui está um exemplo de como o objeto extended entities ficará nessa situação:
{
      "extended_entities": {
        "media": [
          {
            "id": 924685332347469824,
            "id_str": "924685332347469824",
            "indices": [
              49,
              72
            ],
            "media_url": "http://pbs.twimg.com/media/DNUkdLMVwAEzj8K.jpg",
            "media_url_https": "https://pbs.twimg.com/media/DNUkdLMVwAEzj8K.jpg",
            "url": "https://t.co/90xOJqKMox",
            "display_url": "pic.x.com/90xOJqKMox",
            "expanded_url": "https://x.com/nyjets/status/924685391524798464/video/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 680,
                "h": 383,
                "resize": "fit"
              },
              "medium": {
                "w": 1200,
                "h": 675,
                "resize": "fit"
              },
              "large": {
                "w": 1280,
                "h": 720,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              }
            },
            "additional_media_info": {
              "title": "#ATLvsNYJ: TD de Tomlinson por McCown",
              "description": "NFL",
              "embeddable": false,
              "monetizable": true
            }
          }
        ]
      }
    }
Conforme discutido acima, aqui está a seção entities que está incorretamente com o type definido como ‘photo’. Novamente, a seção extended_entities é preferida para todos os tipos de mídia nativa, incluindo ‘video’ e ‘animated_gif’.
    {
    "entities": {
        "hashtags": [

        ],
        "urls": [

        ],
        "user_mentions": [

        ],
        "symbols": [

        ],
        "media": [
          {
            "id": 869317980307415040,
            "id_str": "869317980307415040",
            "indices": [
              31,
              54
            ],
            "media_url": "http://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/869317980307415040/pu/img/t_E6wyADk_PvxuzF.jpg",
            "url": "https://t.co/TLSTTOvvmP",
            "display_url": "pic.x.com/TLSTTOvvmP",
            "expanded_url": "https://x.com/FloodSocial/status/869318041078820864/video/1",
            "type": "photo",
            "sizes": {
              "small": {
                "w": 340,
                "h": 604,
                "resize": "fit"
              },
              "large": {
                "w": 720,
                "h": 1280,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "medium": {
                "w": 600,
                "h": 1067,
                "resize": "fit"
              }
            }
          }
        ]
      }

    }

Post com um GIF animado

A seguir estão os metadados de extended entities deste Post com um GIF animado:
{
      "extended_entities": {
        "media": [
          {
            "id": 870042654213459968,
            "id_str": "870042654213459968",
            "indices": [
              29,
              52
            ],
            "media_url": "http://pbs.twimg.com/tweet_video_thumb/DBMDLy_U0AAqUWP.jpg",
            "media_url_https": "https://pbs.twimg.com/tweet_video_thumb/DBMDLy_U0AAqUWP.jpg",
            "url": "https://t.co/nD6G4bWSKb",
            "display_url": "pic.x.com/nD6G4bWSKb",
            "expanded_url": "https://x.com/FloodSocial/status/870042717589340160/photo/1",
            "type": "animated_gif",
            "sizes": {
              "medium": {
                "w": 350,
                "h": 262,
                "resize": "fit"
              },
              "small": {
                "w": 340,
                "h": 255,
                "resize": "fit"
              },
              "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
              },
              "large": {
                "w": 350,
                "h": 262,
                "resize": "fit"
              }
            },
            "video_info": {
              "aspect_ratio": [
                175,
                131
              ],
              "variants": [
                {
                  "bitrate": 0,
                  "content_type": "video/mp4",
                  "url": "https://video.twimg.com/tweet_video/DBMDLy_U0AAqUWP.mp4"
                }
              ]
            }
          }
        ]
      }
    }

Exemplos de payloads Native Enriched

Post

{
	"created_at": "Fri Sep 18 18:36:15 +0000 2020",
	"id": 1307025659294675000,
	"id_str": "1307025659294674945",
	"text": "Aqui está um artigo que destaca as atualizações no novo payload do Tweet v2 https://t.co/oeF3ZHeKQQ",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": false,
	"in_reply_to_status_id": 1304102743196356600,
	"in_reply_to_status_id_str": "1304102743196356610",
	"in_reply_to_user_id": 2244994945,
	"in_reply_to_user_id_str": "2244994945",
	"in_reply_to_screen_name": "XDevelopers",
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados ao #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"quote_count": 1,
	"reply_count": 2,
	"retweet_count": 11,
	"favorite_count": 70,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"display_url": "dev.to/twitterdev/und…",
			"unwound": {
				"url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
				"status": 200,
				"title": "Entendendo o novo payload do Tweet no X API v2",
				"description": "O X anunciou recentemente o novo X API v2, reconstruído do zero para oferecer novos recursos..."
			},
			"indices": [
				74,
				97
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Responder ao Post

{
	"created_at": "Fri Aug 21 19:10:05 +0000 2020",
	"id": 1296887316556980200,
	"id_str": "1296887316556980230",
	"text": "Veja como @PennMedCDH está usando dados do X para compreender a crise de saúde da COVID-19 📊\n\nhttps://t.co/1tdA8uDWes",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": false,
	"in_reply_to_status_id": 1296887091901718500,
	"in_reply_to_status_id_str": "1296887091901718529",
	"in_reply_to_user_id": 2244994945,
	"in_reply_to_user_id_str": "2244994945",
	"in_reply_to_screen_name": "XDevelopers",
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"quote_count": 2,
	"reply_count": 3,
	"retweet_count": 9,
	"favorite_count": 26,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"unwound": {
				"url": "https://developer.x.com/en/use-cases/success-stories/penn",
				"status": 200,
				"title": "Penn Medicine Center for Digital Health",
				"description": "O Penn Med Center for Digital Health criou um mapa do X sobre COVID-19 que inclui gráficos detalhando sentimentos, sintomas relatados, dados por estado e dados de fronteira sobre o surto de COVID-19. Além disso, sua iniciativa Penn Med With You usa informações regionais agregadas do X para alimentar seu site e serviço de mensagens de texto. O serviço usa essas informações para disseminar recursos relevantes e oportunos."
			},
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Post estendido

{
	"created_at": "Wed Aug 19 16:26:16 +0000 2020",
	"id": 1296121314218897400,
	"id_str": "1296121314218897408",
	"text": "O endpoint para ocultar respostas está sendo lançado hoje! \n\nDesenvolvedores podem ocultar respostas a Tweets - uma maneira crucial para desenvolvedores po… https://t.co/VyfXs1RTXn",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"extended_tweet": {
		"full_text": "O endpoint para ocultar respostas está sendo lançado hoje! \n\nDesenvolvedores podem ocultar respostas a Tweets - uma maneira crucial para desenvolvedores ajudarem a melhorar a qualidade da conversa pública usando a #XAPI.\n\nhttps://t.co/khXhTurm9x",
		"display_text_range": [
			0,
			215
		],
		"entities": {
			"hashtags": [{
				"text": "XAPI",
				"indices": [
					178,
					189
				]
			}],
			"urls": [{
				"url": "https://t.co/khXhTurm9x",
				"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
				"display_url": "devcommunity.com/t/hide-replies…",
				"unwound": {
					"url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
					"status": 200,
					"title": "Ocultar respostas agora disponível na nova X API",
					"description": "Hoje, temos o prazer de anunciar a disponibilidade geral do endpoint para ocultar respostas na nova X API. O endpoint para ocultar respostas permite que você crie ferramentas que ajudem as pessoas a ocultar ou reexibir respostas aos seus Tweets. As pessoas gerenciam suas respostas por diversos motivos, incluindo dar menos atenção a comentários abusivos, perturbadores, enganosos, ou para tornar as conversas mais envolventes. Por meio deste endpoint, você pode criar ferramentas para ajudar as pessoas no X a ocultar ou reexibir respostas de forma mais rápida e..."
				},
				"indices": [
					192,
					215
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quote_count": 23,
	"reply_count": 9,
	"retweet_count": 54,
	"favorite_count": 172,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/VyfXs1RTXn",
			"expanded_url": "https://x.com/i/web/status/1296121314218897408",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Post com extended_entities

{
	"created_at": "Wed Aug 12 17:01:42 +0000 2020",
	"id": 1293593516040269800,
	"id_str": "1293593516040269825",
	"text": "Finalmente chegou! 🥁 Diga olá para a nova #XAPI.\n\nEstamos reconstruindo a X API v2 do zero para m… https://t.co/UeCndQGMjx",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
	"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
	"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"is_quote_status": false,
	"extended_tweet": {
		"full_text": "Finalmente chegou! 🥁 Diga olá para a nova #XAPI.\n\nEstamos reconstruindo a X API v2 do zero para melhor atender nossa comunidade de desenvolvedores. E o lançamento de hoje é apenas o começo.\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"entities": {
			"hashtags": [{
				"text": "XAPI",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"unwound": {
					"url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
					"status": 200,
					"title": "Apresentando uma X API nova e aprimorada",
					"description": "Apresentando a nova X API - reconstruída do zero para entregar novos recursos mais rapidamente, permitindo que os desenvolvedores ajudem o mundo a se conectar à conversa pública que acontece no X."
				},
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"quote_count": 332,
	"reply_count": 172,
	"retweet_count": 958,
	"favorite_count": 2844,
	"entities": {
		"hashtags": [{
			"text": "XAPI",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Retweet

{
	"created_at": "Tue Feb 18 19:33:59 +0000 2020",
	"id": 1229851574555508700,
	"id_str": "1229851574555508737",
	"text": "RT @suhemparack: Criei uma Skill do Alexa para o X usando APL que permite visualizar Tweets e Tendências no echo show!\n\nConfira aqui…",
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": false,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "X Developers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"retweeted_status": {
		"created_at": "Tue Feb 18 19:01:58 +0000 2020",
		"id": 1229843515603144700,
		"id_str": "1229843515603144704",
		"text": "Criei uma Skill do Alexa para o X usando APL que permite visualizar Tweets e Tendências no echo show!\n\nConfira… https://t.co/RP9NgltX7i",
		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
		"truncated": true,
		"in_reply_to_status_id": null,
		"in_reply_to_status_id_str": null,
		"in_reply_to_user_id": null,
		"in_reply_to_user_id_str": null,
		"in_reply_to_screen_name": null,
		"user": {
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"name": "Suhem Parack",
			"screen_name": "suhemparack",
			"location": "Seattle, WA",
			"url": "https://developer.x.com",
			"description": "Developer Relations para Pesquisa Acadêmica @X. Fale comigo sobre pesquisa com dados do X. Anteriormente: Amazon Alexa. Opiniões são minhas",
			"translator_type": "none",
			"protected": false,
			"verified": false,
			"followers_count": 732,
			"friends_count": 501,
			"listed_count": 12,
			"favourites_count": 358,
			"statuses_count": 458,
			"created_at": "Thu Apr 27 20:56:22 +0000 2017",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": false,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "F5F8FA",
			"profile_background_image_url": "",
			"profile_background_image_url_https": "",
			"profile_background_tile": false,
			"profile_link_color": "1DA1F2",
			"profile_sidebar_border_color": "C0DEED",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": true,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/857699969263964161/1593055939",
			"default_profile": true,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
			"full_text": "Criei uma Skill do Alexa para o X usando APL que permite visualizar Tweets e Tendências no echo show!\n\nConfira aqui 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"unwound": {
						"url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
						"status": 200,
						"title": null,
						"description": null
					},
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 6,
		"reply_count": 1,
		"retweet_count": 19,
		"favorite_count": 71,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"is_quote_status": false,
	"quote_count": 0,
	"reply_count": 0,
	"retweet_count": 0,
	"favorite_count": 0,
	"entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Tweet citado

{
	"created_at": "Mon Nov 16 18:09:36 +0000 2020",
	"id": 1328399838128468000,
	"id_str": "1328399838128467969",
	"text": "Conforme planejado, os endpoints Labs v2 referenciados abaixo foram descontinuados. Por favor, nos informe nos fóruns se você t… https://t.co/ahQvTYaOcZ",
	"display_text_range": [
		0,
		140
	],
	"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
	"truncated": true,
	"in_reply_to_status_id": null,
	"in_reply_to_status_id_str": null,
	"in_reply_to_user_id": null,
	"in_reply_to_user_id_str": null,
	"in_reply_to_screen_name": null,
	"user": {
		"id": 2244994945,
		"id_str": "2244994945",
		"name": "X Dev",
		"screen_name": "XDevelopers",
		"location": "127.0.0.1",
		"url": "https://developer.x.com/en/community",
		"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados ao #XAPI.",
		"translator_type": "regular",
		"protected": false,
		"verified": true,
		"followers_count": 512292,
		"friends_count": 2038,
		"listed_count": 1666,
		"favourites_count": 2147,
		"statuses_count": 3634,
		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
		"utc_offset": null,
		"time_zone": null,
		"geo_enabled": true,
		"lang": null,
		"contributors_enabled": false,
		"is_translator": false,
		"profile_background_color": "FFFFFF",
		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
		"profile_background_tile": false,
		"profile_link_color": "0084B4",
		"profile_sidebar_border_color": "FFFFFF",
		"profile_sidebar_fill_color": "DDEEF6",
		"profile_text_color": "333333",
		"profile_use_background_image": false,
		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
		"default_profile": false,
		"default_profile_image": false,
		"following": null,
		"follow_request_sent": null,
		"notifications": null
	},
	"geo": null,
	"coordinates": null,
	"place": null,
	"contributors": null,
	"quoted_status_id": 1327011423252144000,
	"quoted_status_id_str": "1327011423252144128",
	"quoted_status": {
		"created_at": "Thu Nov 12 22:12:32 +0000 2020",
		"id": 1327011423252144000,
		"id_str": "1327011423252144128",
		"text": "👋 Lembrete amigável de que o X Developer Labs v2 hide replies e recent search serão descontinuados na próxima segunda-feira, nove… https://t.co/EEWN2Q9aXh",
		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
		"truncated": true,
		"in_reply_to_status_id": null,
		"in_reply_to_status_id_str": null,
		"in_reply_to_user_id": null,
		"in_reply_to_user_id_str": null,
		"in_reply_to_screen_name": null,
		"user": {
			"id": 2244994945,
			"id_str": "2244994945",
			"name": "X Dev",
			"screen_name": "XDevelopers",
			"location": "127.0.0.1",
			"url": "https://developer.x.com/en/community",
			"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados ao #XAPI.",
			"translator_type": "regular",
			"protected": false,
			"verified": true,
			"followers_count": 512292,
			"friends_count": 2038,
			"listed_count": 1666,
			"favourites_count": 2147,
			"statuses_count": 3634,
			"created_at": "Sat Dec 14 04:35:55 +0000 2013",
			"utc_offset": null,
			"time_zone": null,
			"geo_enabled": true,
			"lang": null,
			"contributors_enabled": false,
			"is_translator": false,
			"profile_background_color": "FFFFFF",
			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
			"profile_background_tile": false,
			"profile_link_color": "0084B4",
			"profile_sidebar_border_color": "FFFFFF",
			"profile_sidebar_fill_color": "DDEEF6",
			"profile_text_color": "333333",
			"profile_use_background_image": false,
			"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
			"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
			"default_profile": false,
			"default_profile_image": false,
			"following": null,
			"follow_request_sent": null,
			"notifications": null
		},
		"geo": null,
		"coordinates": null,
		"place": null,
		"contributors": null,
		"is_quote_status": false,
		"extended_tweet": {
			"full_text": "👋 Lembrete amigável de que o X Developer Labs v2 hide replies e recent search serão descontinuados na próxima segunda-feira, 16 de novembro! Recomendamos que você migre para os novos endpoints hide replies e recent search agora disponíveis no v2 #XAPI. Detalhes: https://t.co/r6z6CI7kEy",
			"display_text_range": [
				0,
				273
			],
			"entities": {
				"hashtags": [{
					"text": "XAPI",
					"indices": [
						228,
						239
					]
				}],
				"urls": [{
					"url": "https://t.co/r6z6CI7kEy",
					"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
					"display_url": "devcommunity.com/t/retiring-lab…",
					"unwound": {
						"url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
						"status": 200,
						"title": "Descontinuando Labs v2 recent search e hide replies",
						"description": "Como mencionamos em nossos anúncios de Early Access e hide replies, os seguintes endpoints X Developer Labs v2 serão descontinuados em 16 de novembro. Labs v2 recent search Labs v2 hide replies Se chamados, esses endpoints responderão com um status HTTP 410 e não retornarão dados. Com base no seu feedback dos Labs, incorporamos funcionalidade correspondente no X API v2. A documentação relevante pode ser encontrada usando os links abaixo. Clique aqui para se inscrever no acesso v2 se você ainda não o fez..."
					},
					"indices": [
						250,
						273
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"quote_count": 4,
		"reply_count": 2,
		"retweet_count": 8,
		"favorite_count": 33,
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/EEWN2Q9aXh",
				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					117,
					140
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"favorited": false,
		"retweeted": false,
		"possibly_sensitive": false,
		"filter_level": "low",
		"lang": "en"
	},
	"quoted_status_permalink": {
		"url": "https://t.co/JaxttUMmjX",
		"expanded": "https://x.com/XDevelopers/status/1327011423252144128",
		"display": "x.com/XDevelopers/sta…"
	},
	"is_quote_status": true,
	"extended_tweet": {
		"full_text": "Conforme planejado, os endpoints Labs v2 referenciados abaixo foram descontinuados. Informe-nos nos fóruns se você tiver dúvidas ou precisar de ajuda com a X API v2! https://t.co/JaxttUMmjX",
		"display_text_range": [
			0,
			166
		],
		"entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/JaxttUMmjX",
				"expanded_url": "https://x.com/XDevelopers/status/1327011423252144128",
				"display_url": "x.com/XDevelopers/sta…",
				"indices": [
					167,
					190
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"quote_count": 1,
	"reply_count": 4,
	"retweet_count": 7,
	"favorite_count": 29,
	"entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/ahQvTYaOcZ",
			"expanded_url": "https://x.com/i/web/status/1328399838128467969",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Retweet de Tweet com Citação

{
 	"created_at": "Thu Feb 06 17:26:44 +0000 2020",
 	"id": 1225470895902412800,
 	"id_str": "1225470895902412800",
 	"text": "RT @AureliaSpecker: 📣 Se você gostou do tutorial sobre deslocamento em Londres que escrevi em novembro do ano passado, confira a versão refatorada que usa…",
 	"source": "<a href=\"http://x.com/download/iphone\" rel=\"nofollow\">X para iPhone</a>",
 	"truncated": false,
 	"in_reply_to_status_id": null,
 	"in_reply_to_status_id_str": null,
 	"in_reply_to_user_id": null,
 	"in_reply_to_user_id_str": null,
 	"in_reply_to_screen_name": null,
 	"user": {
 		"id": 2244994945,
 		"id_str": "2244994945",
 		"name": "X Dev",
 		"screen_name": "XDevelopers",
 		"location": "127.0.0.1",
 		"url": "https://developer.x.com/en/community",
 		"description": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados ao #XAPI.",
 		"translator_type": "regular",
 		"protected": false,
 		"verified": true,
 		"followers_count": 512292,
 		"friends_count": 2038,
 		"listed_count": 1666,
 		"favourites_count": 2147,
 		"statuses_count": 3634,
 		"created_at": "Sat Dec 14 04:35:55 +0000 2013",
 		"utc_offset": null,
 		"time_zone": null,
 		"geo_enabled": true,
 		"lang": null,
 		"contributors_enabled": false,
 		"is_translator": false,
 		"profile_background_color": "FFFFFF",
 		"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
 		"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
 		"profile_background_tile": false,
 		"profile_link_color": "0084B4",
 		"profile_sidebar_border_color": "FFFFFF",
 		"profile_sidebar_fill_color": "DDEEF6",
 		"profile_text_color": "333333",
 		"profile_use_background_image": false,
 		"profile_image_url": "http://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"profile_image_url_https": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"profile_banner_url": "https://pbs.twimg.com/profile_banners/2244994945/1594913664",
 		"default_profile": false,
 		"default_profile_image": false,
 		"following": null,
 		"follow_request_sent": null,
 		"notifications": null
 	},
 	"geo": null,
 	"coordinates": null,
 	"place": null,
 	"contributors": null,
 	"retweeted_status": {
 		"created_at": "Tue Feb 04 15:01:25 +0000 2020",
 		"id": 1224709550214873000,
 		"id_str": "1224709550214873090",
 		"text": "📣 Se você gostou do tutorial sobre deslocamento em Londres que escrevi em novembro do ano passado, confira a versão refatorada que u… https://t.co/cAepHunkFp",
 		"display_text_range": [
 			0,
 			140
 		],
 		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 		"truncated": true,
 		"in_reply_to_status_id": null,
 		"in_reply_to_status_id_str": null,
 		"in_reply_to_user_id": null,
 		"in_reply_to_user_id_str": null,
 		"in_reply_to_screen_name": null,
 		"user": {
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"name": "Aurelia Specker",
 			"screen_name": "AureliaSpecker",
 			"location": "London, UK",
 			"url": null,
 			"description": "devrel @TwitterUK • suíça em Londres • mãe de plantas • cabeleireira pessoal do @_dormrod",
 			"translator_type": "none",
 			"protected": false,
 			"verified": false,
 			"followers_count": 1032,
 			"friends_count": 1331,
 			"listed_count": 26,
 			"favourites_count": 4979,
 			"statuses_count": 854,
 			"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 			"utc_offset": null,
 			"time_zone": null,
 			"geo_enabled": true,
 			"lang": null,
 			"contributors_enabled": false,
 			"is_translator": false,
 			"profile_background_color": "8B542B",
 			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_tile": false,
 			"profile_link_color": "5E341C",
 			"profile_sidebar_border_color": "D9B17E",
 			"profile_sidebar_fill_color": "EADEAA",
 			"profile_text_color": "333333",
 			"profile_use_background_image": true,
 			"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 			"default_profile": false,
 			"default_profile_image": false,
 			"following": null,
 			"follow_request_sent": null,
 			"notifications": null
 		},
 		"geo": null,
 		"coordinates": null,
 		"place": null,
 		"contributors": null,
 		"quoted_status_id": 1195000047089389600,
 		"quoted_status_id_str": "1195000047089389573",
 		"quoted_status": {
 			"created_at": "Thu Nov 14 15:26:27 +0000 2019",
 			"id": 1195000047089389600,
 			"id_str": "1195000047089389573",
 			"text": "Escrevi um tutorial sobre como obter informações personalizadas de deslocamento usando o X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
 			"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 			"truncated": true,
 			"in_reply_to_status_id": null,
 			"in_reply_to_status_id_str": null,
 			"in_reply_to_user_id": null,
 			"in_reply_to_user_id_str": null,
 			"in_reply_to_screen_name": null,
 			"user": {
 				"id": 1102321381,
 				"id_str": "1102321381",
 				"name": "Aurelia Specker",
 				"screen_name": "AureliaSpecker",
 				"location": "London, UK",
 				"url": null,
 				"description": "devrel @TwitterUK • suíça em Londres • mãe de plantas • cabeleireira pessoal do @_dormrod",
 				"translator_type": "none",
 				"protected": false,
 				"verified": false,
 				"followers_count": 1032,
 				"friends_count": 1331,
 				"listed_count": 26,
 				"favourites_count": 4979,
 				"statuses_count": 854,
 				"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 				"utc_offset": null,
 				"time_zone": null,
 				"geo_enabled": true,
 				"lang": null,
 				"contributors_enabled": false,
 				"is_translator": false,
 				"profile_background_color": "8B542B",
 				"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 				"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 				"profile_background_tile": false,
 				"profile_link_color": "5E341C",
 				"profile_sidebar_border_color": "D9B17E",
 				"profile_sidebar_fill_color": "EADEAA",
 				"profile_text_color": "333333",
 				"profile_use_background_image": true,
 				"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 				"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 				"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 				"default_profile": false,
 				"default_profile_image": false,
 				"following": null,
 				"follow_request_sent": null,
 				"notifications": null
 			},
 			"geo": null,
 			"coordinates": null,
 			"place": null,
 			"contributors": null,
 			"is_quote_status": false,
 			"extended_tweet": {
 				"full_text": "Escrevi um tutorial sobre como obter informações personalizadas de deslocamento usando a X API🚇\n\n#DEVcommunity #Pythontutorial \n\nConfira aqui 👇\nhttps://t.co/sOjXW4YhbN",
 				"display_text_range": [
 					0,
 					160
 				],
 				"entities": {
 					"hashtags": [{
 							"text": "DEVcommunity",
 							"indices": [
 								85,
 								98
 							]
 						},
 						{
 							"text": "Pythontutorial",
 							"indices": [
 								99,
 								114
 							]
 						}
 					],
 					"urls": [{
 						"url": "https://t.co/sOjXW4YhbN",
 						"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"display_url": "dev.to/twitterdev/usi…",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							137,
 							160
 						]
 					}],
 					"user_mentions": [],
 					"symbols": []
 				}
 			},
 			"quote_count": 4,
 			"reply_count": 5,
 			"retweet_count": 31,
 			"favorite_count": 123,
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/pL0qJ4vhtE",
 					"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 					"display_url": "x.com/i/web/status/1…",
 					"indices": [
 						116,
 						139
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			},
 			"favorited": false,
 			"retweeted": false,
 			"possibly_sensitive": false,
 			"filter_level": "low",
 			"lang": "en"
 		},
 		"quoted_status_permalink": {
 			"url": "https://t.co/dXrJYvn3hY",
 			"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 			"display": "x.com/AureliaSpecker…"
 		},
 		"is_quote_status": true,
 		"extended_tweet": {
 			"full_text": "📣 Se você gostou do tutorial sobre deslocamentos em Londres que escrevi em novembro do ano passado, confira a versão refatorada que usa o novo endpoint de busca do X 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDev @XAPI https://t.co/dXrJYvn3hY",
 			"display_text_range": [
 				0,
 				229
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							176,
 							189
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							190,
 							205
 						]
 					}
 				],
 				"urls": [{
 						"url": "https://t.co/87XIPZmZBJ",
 						"expanded_url": "https://bit.ly/2OrnrCC",
 						"display_url": "bit.ly/2OrnrCC",
 						"unwound": {
 							"url": "https://dev.to/twitterdev/migrate-to-twitter-s-newly-released-labs-recent-search-endpoint-3npe",
 							"status": 200,
 							"title": null,
 							"description": null
 						},
 						"indices": [
 							151,
 							174
 						]
 					},
 					{
 						"url": "https://t.co/dXrJYvn3hY",
 						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
 						"display_url": "x.com/AureliaSpecker…",
 						"indices": [
 							230,
 							253
 						]
 					}
 				],
 				"user_mentions": [{
 						"screen_name": "XDev",
 						"name": "X Dev",
 						"id": 2244994945,
 						"id_str": "2244994945",
 						"indices": [
 							206,
 							217
 						]
 					},
 					{
 						"screen_name": "XAPI",
 						"name": "X API",
 						"id": 6253282,
 						"id_str": "6253282",
 						"indices": [
 							218,
 							229
 						]
 					}
 				],
 				"symbols": []
 			}
 		},
 		"quote_count": 2,
 		"reply_count": 0,
 		"retweet_count": 12,
 		"favorite_count": 43,
 		"entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/cAepHunkFp",
 				"expanded_url": "https://x.com/i/web/status/1224709550214873090",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_id": 1195000047089389600,
 	"quoted_status_id_str": "1195000047089389573",
 	"quoted_status": {
 		"created_at": "Thu Nov 14 15:26:27 +0000 2019",
 		"id": 1195000047089389600,
 		"id_str": "1195000047089389573",
 		"text": "Escrevi um tutorial sobre como obter informações personalizadas de deslocamento usando a X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
 		"source": "<a href=\"https://mobile.x.com\" rel=\"nofollow\">X Web App</a>",
 		"truncated": true,
 		"in_reply_to_status_id": null,
 		"in_reply_to_status_id_str": null,
 		"in_reply_to_user_id": null,
 		"in_reply_to_user_id_str": null,
 		"in_reply_to_screen_name": null,
 		"user": {
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"name": "Aurelia Specker",
 			"screen_name": "AureliaSpecker",
 			"location": "Londres, Reino Unido",
 			"url": null,
 			"description": "devrel @TwitterUK • Suíça em Londres • mãe de plantas domésticas • cabeleireira pessoal do @_dormrod",
 			"translator_type": "none",
 			"protected": false,
 			"verified": false,
 			"followers_count": 1032,
 			"friends_count": 1331,
 			"listed_count": 26,
 			"favourites_count": 4979,
 			"statuses_count": 854,
 			"created_at": "Fri Jan 18 23:45:43 +0000 2013",
 			"utc_offset": null,
 			"time_zone": null,
 			"geo_enabled": true,
 			"lang": null,
 			"contributors_enabled": false,
 			"is_translator": false,
 			"profile_background_color": "8B542B",
 			"profile_background_image_url": "http://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme8/bg.gif",
 			"profile_background_tile": false,
 			"profile_link_color": "5E341C",
 			"profile_sidebar_border_color": "D9B17E",
 			"profile_sidebar_fill_color": "EADEAA",
 			"profile_text_color": "333333",
 			"profile_use_background_image": true,
 			"profile_image_url": "http://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_image_url_https": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
 			"profile_banner_url": "https://pbs.twimg.com/profile_banners/1102321381/1587552672",
 			"default_profile": false,
 			"default_profile_image": false,
 			"following": null,
 			"follow_request_sent": null,
 			"notifications": null
 		},
 		"geo": null,
 		"coordinates": null,
 		"place": null,
 		"contributors": null,
 		"is_quote_status": false,
 		"extended_tweet": {
			"full_text": "Escrevi um tutorial sobre como obter informações personalizadas de deslocamento usando a X API🚇\n\n#DEVcommunity #Pythontutorial \n\nConfira aqui 👇\nhttps://t.co/sOjXW4YhbN",
 			"display_text_range": [
 				0,
 				160
 			],
 			"entities": {
 				"hashtags": [{
 						"text": "DEVcommunity",
 						"indices": [
 							85,
 							98
 						]
 					},
 					{
 						"text": "Pythontutorial",
 						"indices": [
 							99,
 							114
 						]
 					}
 				],
 				"urls": [{
 					"url": "https://t.co/sOjXW4YhbN",
 					"expanded_url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 					"display_url": "dev.to/twitterdev/usi…",
 					"unwound": {
 						"url": "https://dev.to/twitterdev/using-the-twitter-api-to-make-your-commute-easier-3od0",
 						"status": 200,
 						"title": null,
 						"description": null
 					},
 					"indices": [
 						137,
 						160
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			}
 		},
 		"quote_count": 4,
 		"reply_count": 5,
 		"retweet_count": 31,
 		"favorite_count": 123,
 		"entities": {
 			"hashtags": [{
 					"text": "DEVcommunity",
 					"indices": [
 						85,
 						98
 					]
 				},
 				{
 					"text": "Pythontutorial",
 					"indices": [
 						99,
 						114
 					]
 				}
 			],
 			"urls": [{
 				"url": "https://t.co/pL0qJ4vhtE",
 				"expanded_url": "https://x.com/i/web/status/1195000047089389573",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					116,
 					139
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"favorited": false,
 		"retweeted": false,
 		"possibly_sensitive": false,
 		"filter_level": "low",
 		"lang": "en"
 	},
 	"quoted_status_permalink": {
 		"url": "https://t.co/dXrJYvn3hY",
 		"expanded": "https://x.com/AureliaSpecker/status/1195000047089389573",
 		"display": "x.com/AureliaSpecker…"
 	},
 	"is_quote_status": true,
 	"quote_count": 0,
 	"reply_count": 0,
 	"retweet_count": 0,
 	"favorite_count": 0,
 	"entities": {
 		"hashtags": [],
 		"urls": [],
 		"user_mentions": [{
 			"screen_name": "AureliaSpecker",
 			"name": "Aurelia Specker",
 			"id": 1102321381,
 			"id_str": "1102321381",
 			"indices": [
 				3,
 				18
 			]
 		}],
 		"symbols": []
 	},
 	"favorited": false,
 	"retweeted": false,
 	"filter_level": "low",
 	"lang": "en",
 	"matching_rules": [{
 		"tag": null
 	}]
 }

Objetos de dados do Activity Streams do Enterprise

Interessado em entender melhor como o formato de dados Activity Streams se mapeia para o formato da X API v2?
Confira nosso guia de comparação: Activity Streams comparado à X API v2
Observação: é altamente recomendável usar o formato Enriched Native para as APIs de dados do Enterprise.
  • O formato Enriched Native inclui todas as novas metadata desde 2017, como metadata de enquetes, e metrics adicionais como reply_count e quote_count.
  • O formato Activity Streams não recebe atualizações com novas metadata ou enrichments desde a atualização de caracteres, em 2017.

Objeto Activity

Activity Streams é uma versão do esquema de objetos do formato de dados original da X criada pela Gnip para “normalizar o formato” dos dados de Post e de outras mídias sociais usando o Activity Base Schema de terceiros descrito aqui. Os Posts são normalizados no esquema Activity Streams, incluindo os tipos de objeto note, person, place e service como objetos aninhados. Os Posts podem conter outros objetos de atividade de Post aninhados para Retweets ou outros, incluindo twitter_quoted_status e long_object. O tipo de objeto de nível básico “activity” é semelhante ao objeto de nível básico de Post do formato nativo enriquecido. Exemplos de payloads no formato Activity Streams podem ser encontrados aqui.

Dicionário de dados

Abaixo, você encontrará o dicionário de dados para esses atributos de “atividade” em nível raiz, bem como links para os dicionários de dados de objetos filhos.
AtributoTipoDescrição
idstringUm IRI único para o Post. Em mais detalhes, “tag” é o esquema, “search.x.com” representa o domínio para o esquema, e 2005 é quando o esquema foi derivado.
Ao armazenar Posts, isso deve ser usado como o identificador único ou chave primária.
“id”: “tag:search.x.com,2005:1050118621198921728”
objectTypestringTipo de objeto, sempre definido como “activity”
“objectType”: “activity”
objectobjectUm objeto representando o Post sendo publicado ou compartilhado.
Para Retweets, isso conterá uma “activity” completa, com os campos pertinentes descritos neste esquema.
Para Posts originais, isso conterá um objeto “note”, com os campos descritos aqui.
“object”:
“object”:
“objectType”: “note”,
“id”: “object:search.x.com,2005:1050118621198921728”,
“summary”: “To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://t.co/MkGjXf9aXm”,
“link”: “http://x.com/API/statuses/1050118621198921728”,
“postedTime”: “2018-10-10T20:19:24.000Z”
long_objectobjectUm objeto representando o corpo de texto completo se o texto do Post exceder 140 caracteres.


“long_object”:
“body”: “To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin tone modifiers 👍🏻👍🏽👍🏿. This is now reflected in Twitter-Text, our Open Source library. \n\nUsing Twitter-Text? See the forum post for detail: https://t.co/Nx1XZmRCXA”,
“display_text_range”: [
0,
277
],
“twitter_entities”:
“hashtags”: [],
“urls”: [

“url”: “https://t.co/Nx1XZmRCXA”,
“expanded_url”: “https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607”,
“display_url”: “devcommunity.com/t/new-update-t…”,
“indices”: [
254,
277
]

],
“user_mentions”: [],
“symbols”: []

display_text_rangearrayse o texto do Post exceder 140 caracteres.


“display_text_range”: [
0,
142
]
verbstringO tipo de ação sendo executada pelo usuário.
Posts, “post”
Retweets, “share”
Posts Excluídos, “delete”
O verb é a maneira adequada de distinguir entre um Tweet e um Retweet verdadeiro. No entanto, isso se aplica apenas a retweets verdadeiros, e não a Tweets modificados ou citados, que não usam a funcionalidade de Retweet do X. Para uma descrição dos verbos AS
clique aqui.
Para exclusões, observe que apenas um número limitado de campos será incluído, conforme mostrado no payload de exemplo abaixo.
“verb”: “post”
postedTimedate (ISO 8601)O horário em que a ação ocorreu, por exemplo, o horário em que o Post foi publicado.


“postedTime”: “2018-10-10T20:19:24.000Z”
generatorobjectUm objeto representando o utilitário usado para publicar o Post. Isso conterá o nome (“displayName”) e um link (“link”) para a aplicação fonte que gera o Post.
“generator”:
“displayName”: “X Web Client”,
“link”: “http://x.com
providerobjectUm objeto JSON representando o provedor da atividade. Isso conterá um objectType (“service”), o nome do provedor (“displayName”), e um link para o site do provedor (“link”).
“provider”:

“objectType”: “service”,
“displayName”: “X”,
“link”: “http://www.x.com
linkstringUm permalink para o Post.
“link”: “http://x.com/API/statuses/1050118621198921728
bodystringO texto do Post.

Em Retweets, observe que o X modifica o valor do body no nível raiz adicionando “RT @username” no início, e truncando o texto original e adicionando reticências no final. Assim, para Retweets, sua aplicação deve consultar o object.body para garantir que está extraindo o texto não modificado do Post original (sendo retweetado).
“body”: “With Cardiff, Crystal Palace, and Hull City joining the EPL from the Championship it will be a great relegation battle at the end.”
display_text_rangearrayDescreve o intervalo de caracteres dentro do texto do body que indica o Post exibido. Posts com @mentions iniciais começarão em mais de 0 e Posts com mídia anexada ou que excedem 140 caracteres indicarão o display_text_range no long_object.

“display_text_range”: [
14,
42
]
ou
“long_object”:
“display_text_range”: [
0,
277
]…
actorobjectUm objeto representando o usuário do X que publicou. O Objeto Actor refere-se a um Usuário do X, e contém todos os metadados relevantes para esse usuário.
Veja
detalhes do objeto actor
inReplyToobjectUm objeto JSON referindo-se ao Post sendo respondido, se aplicável. Contém um link para o Post.
“inReplyTo”:

“link”: “http://x.com/GOP/statuses/349573991561838593
locationobjectUm objeto JSON representando o “Place” do X onde o Post foi criado. Este é um objeto passado através da plataforma X.

Veja
objeto location
twitter_entitiesobjectO objeto entities do formato de dados do X que contém listas de URLs, menções e hashtags. Consulte a documentação do X sobre Entities aqui. Observe que em Retweets, o X pode truncar os valores das entities que extrai no nível raiz. Portanto, para Retweets, seu app deve verificar object.twitter_entities para garantir que você está usando valores não truncados.

Veja detalhes do objeto twitter_entities
twitter_extended_entitiesobjectUm objeto do formato de dados nativo do X contendo “media”. Estará presente para qualquer Post onde o objeto twitter_entities tenha dados presentes no campo “media”, e incluirá múltiplas fotos quando presentes no Post. Observe que esta é a localização correta para recuperar informações de mídia para Posts com múltiplas fotos.

Múltiplas fotos são representadas por objetos JSON separados por vírgula dentro do array “media”.

Veja detalhes do objeto twitter_extended_entities
gnipobjectUm objeto adicionado ao payload da atividade para indicar as regras correspondentes e dados enriquecidos adicionados com base nos enriquecimentos ativos no stream ou produto.

Veja detalhes do objeto gnip
edit_historyObjectIdentificadores únicos indicando todas as versões de um Post. Para Posts sem edições, haverá um ID. Para Posts com histórico de edições, haverá múltiplos IDs, organizados em ordem crescente refletindo a ordem das edições, com a versão mais recente na última posição do array.

Os IDs do Post podem ser usados para hidratar e visualizar versões anteriores de um Post.

Exemplo:

edit_history”:
“initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
edit_controlsObjectQuando presente, indica por quanto tempo um Post ainda é editável e o número de edições restantes. Posts são editáveis apenas nos primeiros 30 minutos após a criação e podem ser editados até cinco vezes.

Os IDs do Post podem ser usados para hidratar e visualizar versões anteriores de um Post.

Exemplo:

“edit_controls”:
“editable_until_ms”: 123
“edits_remaining”: 3
editableBooleanQuando presente, indica se um Post era elegível para edição quando publicado. Este campo não é dinâmico e não mudará de True para False quando um Post atingir seu limite de tempo editável ou número máximo de edições. As seguintes características do Post farão com que este campo seja false:

_ Post é promovido
_ Post tem uma enquete
_ Post é uma resposta de thread não própria
_ Post é um Retweet (observe que Quote Tweets são elegíveis para edição)
_ Post é nullcast
_ Post da Comunidade
_ Post Superfollow
_ Post Colaborativo

Atributos adicionais de Post

AtributoTypeDescrição
twitter_langstring
favoritesCountintNullable. Indica aproximadamente quantas vezes este Post recebeu like de usuários do X.

“favoritesCount”:298
retweetCountintNúmero de vezes que este Post foi retweetado. Exemplo:

“retweetCount”:153

Atributos obsoletos

CampotypeDescrição
geoobjectLocalização pontual onde o Post foi criado.
twitter_filter_levelstringCampo obsoleto mantido para evitar alteração incompatível.

Objetos de atividade de Post aninhados

Em vários casos, um Objeto Post incluirá outros Posts aninhados. Se você estiver trabalhando com objetos aninhados, esse payload JSON conterá vários objetos, e cada Objeto Post poderá conter seus próprios objetos. O objeto no nível raiz conterá informações sobre o tipo de ação realizada, isto é, se é um Retweet ou um Quote Tweet, e também poderá conter um objeto que descreve o Post “original” que está sendo compartilhado. Posts estendidos incluirão um objeto estendido aninhado que excede 140 caracteres, o qual foi usado para evitar alterações incompatíveis quando a atualização foi feita em 2017. Cada dicionário de objeto aninhado é descrito abaixo. Retweets O formato de stream de atividades de Retweets inclui um objeto aninhado com o type “activity” e o verb “note” para representar o Post original sendo Retweetado.
{
	"id": "tag:search.x.com,2005:222222222222",
	"objectType": "activity",
	"verb": "share",
	"body": "RT @TheOriginalTweeter: Café e arte ☕️",
	"actor": {
		"displayName": "TheRetweeter"
	},
	"object": {
		"id": "tag:search.x.com,2005:11111111111",
		"objectType": "activity",
		"verb": "post",
		"body": "Café e arte ☕️",
		"actor": {
			"displayName": "TheOriginalTweeter"
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:11111111111",
			"summary": "Café e arte ☕️",
			"link": "http://x.com/originaltweeter/statuses/11111111111",
			"postedTime": "2020-12-04T11:00:01.000Z"
		},
		"twitter_entities": {},
		"twitter_extended_entities": {}
	},
	"twitter_entities": {},
	"twitter_extended_entities": {},
	"gnip": {}
}
Status citado no X Formato de activity streams com Tweets citados incorporados { "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Citanto um Tweet: https://t.co/mxiFJ59FlB", "actor": { "displayName": "TheQuoter2" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111", "summary": "https://t.co/mxiFJ59FlB" }, "twitter_entities": {}, "twitter_extended_entities": {}, "gnip": {}, "twitter_quoted_status": { "id": "tag:search.x.com,2005:111111111", "objectType": "activity", "verb": "post", "body": "console.log('Happy birthday, JavaScript!');", "actor": { "displayName": "TheOriginalTweeter" }, "object": { "objectType": "note", "id": "object:search.x.com,2005:111111111" }, "twitter_entities": {} } } Quote Tweet retuitado:
    {
    	"id": "tag:search.x.com,2005:1293612267087384577",
    	"objectType": "activity",
    	"verb": "share",
    	"postedTime": "2020-08-12T18:16:13.000Z",
    	"generator": {},
    	"provider": {},
    	"link": "http://x.com/XDevelopers/statuses/1293612267087384577",
    	"body": "RT @compston: Muito animado em disponibilizar este primeiro conjunto de endpoints - muitos mais estão por vir antes de concluirmos. A equipe #DevRel do @XDevelopers…",
    	"actor": {},
    	"object": {},
    	"favoritesCount": 0,
    	"twitter_entities": {},
    	"twitter_lang": "en",
    	"retweetCount": 13,
    	"gnip": {},
    	"twitter_filter_level": "low",
    	"twitter_quoted_status": {}
    }

Objeto longo

Formato de activity streams do extended_tweet
{
  "id": "tag:search.x.com,2005:1050118621198921728",
  "objectType": "activity",
  "verb": "post",
  "postedTime": "2018-10-10T20:19:24.000Z",
  "generator": {
    "displayName": "Cliente Web do X",
    "link": "http://x.com"
  },
  "provider": {
    "objectType": "service",
    "displayName": "X",
    "link": "http://www.x.com"
  },
  "link": "http://x.com/API/statuses/1050118621198921728",
  "body": "Para dar mais espaço à expressão, agora contaremos todos os emojis como iguais—incluindo aqueles com gênero‍‍‍ ‍‍e tom de pele… https://t.co/MkGjXf9aXm",
  "long_object": {
    "body": "Para dar mais espaço à expressão, agora contaremos todos os emojis como iguais—incluindo aqueles com gênero‍‍‍ ‍‍e modificadores de tom de pele 👍🏻👍🏽👍🏿. Isso agora está refletido no Twitter-Text, nossa biblioteca Open Source. \n\nUsando o Twitter-Text? Veja o post do fórum para mais detalhes: https://t.co/Nx1XZmRCXA",
    "display_text_range": [
      0,
      277
    ],
    "twitter_entities": {veja o objeto twitter_entities},
  "actor": {veja o objeto actor},
  "object": {
    "objectType": "note",
    "id": "object:search.x.com,2005:1050118621198921728",
    "summary": "Para dar mais espaço à expressão, agora contaremos todos os emojis como iguais—incluindo aqueles com gênero‍‍‍ ‍‍e tom de pele… https://t.co/MkGjXf9aXm",
    "link": "http://x.com/API/statuses/1050118621198921728",
    "postedTime": "2018-10-10T20:19:24.000Z"
  },
  "favoritesCount": 298,
  "twitter_entities": {veja o objeto twitter_entities},
  "twitter_lang": "en",
  "retweetCount": 153,
  "gnip": {veja o objeto gnip},
  "twitter_filter_level": "low"
}

Objeto Actor

O objeto Actor contém metadata da conta de usuário X que descreve o usuário X que criou a atividade.

Dicionário de Dados

AtributoTipoDescrição
objectTypestring”objectType”: “person”
idstringA representação em string do identificador exclusivo deste autor. Exemplo:

“id:x.com:2244994945”
linkhttp://www.x.com/XDevelopers
displayNameStringO nome do usuário, conforme definido por ele. Não é necessariamente o nome de uma pessoa. Normalmente limitado a 50 caracteres, mas sujeito a alterações. Exemplo:

“displayName”: “XDevelopers”
preferredUsernamestringO nome de tela, handle (@) ou alias com o qual este usuário se identifica. Único, mas sujeito a alterações. Use id como identificador de usuário sempre que possível. Normalmente tem no máximo 15 caracteres, mas algumas contas históricas podem ter nomes mais longos. Exemplo:

“preferredUsername”: “XDevelopers”
locationobject**        “location”:

“objectType”:** “place”,

“displayName”: “127.0.0.1”

**        }**
linksarrayPode ser nulo. Uma URL fornecida pelo usuário associada ao seu perfil. Exemplo:

**       “links”: [

          {

“href”:** “https://developer.x.com/en/community,

“rel”: “me”

**          }

        ]**
summarystringPode ser nulo. A string UTF-8 definida pelo usuário descrevendo sua conta. Exemplo:

“summary”: “The voice of the #XDevelopers team…“
protectedBooleanQuando verdadeiro, indica que este usuário optou por proteger seus Posts. Consulte About Public and Protected Posts. Exemplo:

“protected”: true
verifiedBooleanQuando verdadeiro, indica que o usuário possui uma conta verificada. Consulte Verified Accounts. Exemplo:

“verified”: false
followersCountIntO número de seguidores que esta conta possui no momento. Em determinadas condições de instabilidade, este campo indicará temporariamente “0”. Exemplo:

“followers_count”: 21
friendsCountIntO número de usuários que esta conta está seguindo (também chamados de “followings”). Em determinadas condições de instabilidade, este campo indicará temporariamente “0”. Exemplo:

“friends_count”: 32
listedCountIntO número de listas públicas das quais este usuário é membro. Exemplo:

“listed_count”: 9274
favoritesCountIntO número de Posts que este usuário marcou com like durante a existência da conta. Ortografia britânica usada no nome do campo por razões históricas. Exemplo:

“favourites_count”: 13
statusesCountIntO número de Posts (incluindo Retweets) publicados pelo usuário. Exemplo:

“statuses_count”: 42
postedTimedateA data e hora em UTC em que a conta de usuário foi criada no X. Exemplo:

“postedTime”: “2013-12-14T04:35:55.036Z”
imagestringUma URL baseada em HTTPS apontando para a imagem de perfil do usuário. Exemplo:

“image”:https://pbs.twimg.com/profile&#95;images/1283786620521652229/lEODkLTh&#95;normal.jpg

Atributos descontinuados (obsoletos)

CampoTypeDescrição
utcOffsetnullO valor será definido como null. Ainda disponível via GET account/settings
twitterTimeZonenullO valor será definido como null. Ainda disponível via GET account/settings como tzinfo_name
languagesnullO valor será definido como null. Ainda disponível via GET account/settings como language

Exemplos:

			"actor": {
        "objectType": "person",
        "id": "id:twitter.com:2244994945",
        "link": "http://www.x.com/XDevelopers",
        "displayName": "X Dev",
        "postedTime": "2013-12-14T04:35:55.036Z",
        "image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
        "summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
        "friendsCount": 2039,
        "followersCount": 512197,
        "listedCount": 1662,
        "statusesCount": 3632,
        "twitterTimeZone": null,
        "verified": true,
        "utcOffset": null,
        "preferredUsername": "XDevelopers",
        "languages": [],
        "links": [
          {
            "href": "https://developer.x.com/en/community",
            "rel": "me"
          }
        ],
        "location": {
          "objectType": "place",
          "displayName": "127.0.0.1"
        },
        "favoritesCount": 2147
      }
"actor": {
    "objectType": "person",
    "id": "id:twitter.com:6253282",
    "link": "http://www.x.com/API",
    "displayName": "X API",
    "postedTime": "2007-05-23T06:01:13.000Z",
    "image": "https://pbs.twimg.com/profile_images/942858479592554497/BbazLO9L_normal.jpg",
    "summary": "Tweets sobre alterações e problemas de serviço. Siga @XDevelopers para mais.",
    "friendsCount": 39,
    "followersCount": 6054164,
    "listedCount": 12285,
    "statusesCount": 3689,
    "twitterTimeZone": null,
    "verified": true,
    "utcOffset": null,
    "preferredUsername": "API",
    "languages": [

    ],
    "links": [
      {
        "href": "https://developer.x.com",
        "rel": "me"
      }
    ],
    "favoritesCount": 4
  }

Objeto de localização

Objetos de localização podem existir no conjunto de objetos do ator definido no nível da conta da X ou no objeto profileLocations do objeto gnip. Objetos de localização têm o tipo de objeto place e podem incluir nome, endereço ou coordenadas geográficas. Objetos de localização são semelhantes a Geo no formato nativo enriquecido.

Dicionário de dados de localização

CampoTipoDescrição
objectTypestringConsulte aqui para mais informações detalhadas. Exemplo:

“objectType”: “place”
displayNamestringNome completo da localização.

“displayName”: “United States”
namestringNome da localização conforme o formato JSON de place do X.
linkstringLink para a representação JSON completa do place no X.

“link”:https://api.x.com/1.1/geo/id/27c45d804c777999.json
geoobjectObjeto de coordenadas geográficas do X. Pode ser um polígono ou um ponto.

Consulte geo
countryCodeStringCódigo de país abreviado que representa o país que contém este lugar. Exemplo:

“countryCode”: “US”
countryStringNome do país que contém este lugar. Exemplo:

“country”: “United States”

objetos derivados de profileLocations

FieldTypeDescription
addressobjectDentro do objeto de localização profileLocation no objeto gnip. Endereço da localização derivado pelo enriquecimento geográfico de perfil. O nível de granularidade pode variar.

“address”: {

**          “country”: “United States”,

          “countryCode”: “US”,

          “locality”: “Providence”,

          “region”: “Rhode Island”,

          “subRegion”: “Providence County”

        }**
geoobjectDentro do objeto de localização profileLocation no objeto gnip. Coordenadas do centróide da localização derivadas pelo enriquecimento geográfico de perfil.

”geo”: {

**          “coordinates”: [

-98.5
,

39.76

          ],

          “type”: “point”

        }**
Exemplos
	"location": {
    "objectType": "place",
    "displayName": "Kansas, EUA",
    "name": "Kansas",
    "country_code": "Estados Unidos",
    "twitter_country_code": "US",
    "twitter_place_type": "admin",
    "link": "https://api.x.com/1.1/geo/id/27c45d804c777999.json",
    "geo": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            -102.051769,
            36.99311
          ],
          [
            -102.051769,
            40.003282
          ],
          [
            -94.588081,
            40.003282
          ],
          [
            -94.588081,
            36.99311
          ]
        ]
      ]
    }
    "location": {
      "objectType": "place",
      "displayName": "Califórnia, EUA"
    }

Objeto de entidades do X

No formato Activity streams, o campo twitter_entities segue o mesmo formato e o mesmo dicionário de dados exibidos no formato nativo enriquecido entities object aqui.

Exemplo:

"twitter_entities": {
	"hashtags": [{
		"text": "API",
		"indices": [
			228,
			239
		]
	}],
	"urls": [{
		"url": "https://t.co/r6z6CI7kEy",
		"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
		"display_url": "devcommunity.com/t/retiring-lab…",
		"indices": [
			250,
			273
		]
	}],
	"user_mentions": [],
	"symbols": []
}

Objeto X extended entities

No formato Activity streams, o twitter_extended_entities segue o mesmo formato e o mesmo dicionário de dados apresentados no formato nativo enriquecido extended_entities object aqui.

Exemplo:

"twitter_extended_entities":{
	"media": [{
		"id": 1293565706408038400,
		"id_str": "1293565706408038401",
		"indices": [
			219,
			242
		],
		"additional_media_info": {
			"monetizable": false
		},
		"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
		"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
		"url": "https://t.co/KaFSbjWUA8",
		"display_url": "pic.x.com/KaFSbjWUA8",
		"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
		"type": "video",
		"video_info": {
			"aspect_ratio": [
				16,
				9
			],
			"duration_millis": 34875,
			"variants": [{
					"bitrate": 256000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
				},
				{
					"bitrate": 832000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
				},
				{
					"content_type": "application/x-mpegURL",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
				},
				{
					"bitrate": 2176000,
					"content_type": "video/mp4",
					"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
				}
			]
		},
		"sizes": {
			"thumb": {
				"w": 150,
				"h": 150,
				"resize": "crop"
			},
			"medium": {
				"w": 1200,
				"h": 675,
				"resize": "fit"
			},
			"small": {
				"w": 680,
				"h": 383,
				"resize": "fit"
			},
			"large": {
				"w": 1280,
				"h": 720,
				"resize": "fit"
			}
		}
	}]
}

Objeto Gnip

O objeto gnip, no formato Activity Streams, contém as metadata adicionadas pelos enriquecimentos ativos, bem como a indicação das regras correspondentes para a atividade.

Dicionário de dados

CampoTipoDescrição
matching_rulesarrayContém um array de objetos de regras de correspondência que indicam a regra com a qual a atividade corresponde.
“matching_rules”: [

**      {

        “tag”: null,

“id”:** 1026514022567358500**,

“id_str”:** “1026514022567358464”

**      }

    ]**
urlsarrayContém um array de links presentes na atividade e os metadados da URL expandida para o enriquecimento de desenrolamento de URL.

**    “urls”: [

      {

“url”:** “https://t.co/tGQqNxxyhU,

“expanded_url”:https://www.youtube.com/channel/UCwUxW2CV2p5mzjMBqvqLzJA,

“expanded_status”: 200**,

“expanded_url_title”:** “Birdys Daughter”,

“expanded_url_description”: “Premium, single-origin, handpicked Jamaica Blue Mountain Coffee”

**      }

    ]**
profileLocationsarray de objetos de localizaçãoContém o objeto de localização derivado do enriquecimento Profile Geo.

**    “profileLocations”: [

      {

        “address”: {

“country”:** “Canada”,

“countryCode”: “CA”,

“locality”: “Toronto”,

“region”: “Ontario”

**        },

“displayName”:** “Toronto, Ontario, Canada”,

**        “geo”: {

          “coordinates”: [

-79.4163
,

43.70011

          ],

“type”:** “point”

**        },

“objectType”:** “place”

**      }

    ]

  }**

Exemplo:

	"gnip": {
    "matching_rules": [
      {
        "tag": null
      }
    ],
    "urls": [
      {
        "url": "https://t.co/Nx1XZmRCXA",
        "expanded_url": "https://devcommunity.x.com/t/new-update-to-the-twitter-text-library-emoji-character-count/114607",
        "expanded_status": 200,
        "expanded_url_title": null,
        "expanded_url_description": null
      }
    ]
  }

Exemplos de payload de streams de atividade

Atividade de Post
{
	"id": "tag:search.x.com,2005:1307025659294674945",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-09-18T18:36:15.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1307025659294674945",
	"body": "Aqui está um artigo que destaca as atualizações no novo payload de Tweet v2 https://t.co/oeF3ZHeKQQ",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados ao #XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1307025659294674945",
		"summary": "Aqui está um artigo que destaca as atualizações no novo payload de Tweet v2 https://t.co/oeF3ZHeKQQ",
		"link": "http://x.com/XDevelopers/statuses/1307025659294674945",
		"postedTime": "2020-09-18T18:36:15.000Z"
	},
	"inReplyTo": {
		"link": "http://x.com/XDevelopers/statuses/1304102743196356610"
	},
	"favoritesCount": 70,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"display_url": "dev.to/twitterdev/und…",
			"indices": [
				74,
				97
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 11,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/oeF3ZHeKQQ",
			"expanded_url": "https://dev.to/twitterdev/understanding-the-new-tweet-payload-in-the-twitter-api-v2-1fg5",
			"expanded_status": 200,
			"expanded_url_title": "Entendendo o novo payload de Tweet no X API v2",
			"expanded_url_description": "O X anunciou recentemente o novo X API v2, reconstruído do zero para oferecer novos recursos..."
		}]
	},
	"twitter_filter_level": "low"
}
Atividade de Post de resposta
{
	"id": "tag:search.x.com,2005:1296887316556980230",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-21T19:10:05.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
	"body": "Veja como @PennMedCDH está usando dados do X para compreender a crise de saúde da COVID-19 📊\n\nhttps://t.co/1tdA8uDWes",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #API.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296887316556980230",
		"summary": "Veja como @PennMedCDH está usando dados do X para compreender a crise de saúde da COVID-19 📊\n\nhttps://t.co/1tdA8uDWes",
		"link": "http://x.com/XDevelopers/statuses/1296887316556980230",
		"postedTime": "2020-08-21T19:10:05.000Z"
	},
	"inReplyTo": {
		"link": "http://x.com/XDevelopers/statuses/1296887091901718529"
	},
	"favoritesCount": 26,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"display_url": "developer.x.com/en/use-cases/s…",
			"indices": [
				87,
				110
			]
		}],
		"user_mentions": [{
			"screen_name": "PennMedCDH",
			"name": "Penn Med CDH",
			"id": 1615654896,
			"id_str": "1615654896",
			"indices": [
				8,
				19
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 9,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/1tdA8uDWes",
			"expanded_url": "https://developer.x.com/en/use-cases/success-stories/penn",
			"expanded_status": 200,
			"expanded_url_title": "Penn Medicine Center for Digital Health",
			"expanded_url_description": "O Penn Med Center for Digital Health criou um mapa do X sobre COVID-19 que inclui gráficos detalhando sentimento, sintomas relatados, dados segmentados por estado e dados de fronteira sobre o surto de COVID-19. Além disso, sua iniciativa Penn Med With You usa informações regionais agregadas do X para alimentar seu site e serviço de mensagens de texto. O serviço usa essas informações para disseminar recursos relevantes e atuais."
		}]
	},
	"twitter_filter_level": "low"
}
Atividade de Post com long_object
{
	"id": "tag:search.x.com,2005:1296121314218897408",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-19T16:26:16.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1296121314218897408",
	"body": "O endpoint para ocultar respostas está sendo lançado hoje! \n\nDesenvolvedores podem ocultar respostas a Tweets - uma maneira crucial de desenvolvedores po… https://t.co/VyfXs1RTXn",
	"long_object": {
		"body": "O endpoint para ocultar respostas está sendo lançado hoje! \n\nDesenvolvedores podem ocultar respostas a Tweets - uma maneira crucial de desenvolvedores poderem ajudar a melhorar a saúde da conversa pública usando a #XAPI.\n\nhttps://t.co/khXhTurm9x",
		"display_text_range": [
			0,
			215
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					178,
					189
				]
			}],
			"urls": [{
				"url": "https://t.co/khXhTurm9x",
				"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
				"display_url": "devcommunity.com/t/hide-replies…",
				"indices": [
					192,
					215
				]
			}],
			"user_mentions": [],
			"symbols": []
		}
	},
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1296121314218897408",
		"summary": "The hide replies endpoint is launching today! \n\nDevelopers can hide replies to Tweets - a crucial way developers ca… https://t.co/VyfXs1RTXn",
		"link": "http://x.com/XDevelopers/statuses/1296121314218897408",
		"postedTime": "2020-08-19T16:26:16.000Z"
	},
	"favoritesCount": 172,
	"twitter_entities": {
		"hashtags": [],
		"urls": [{
			"url": "https://t.co/VyfXs1RTXn",
			"expanded_url": "https://x.com/i/web/status/1296121314218897408",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 54,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/khXhTurm9x",
			"expanded_url": "https://devcommunity.x.com/t/hide-replies-now-available-in-the-new-twitter-api/140996",
			"expanded_status": 200,
			"expanded_url_title": "Ocultar respostas agora disponível na nova X API",
			"expanded_url_description": "Hoje, temos o prazer de anunciar a disponibilidade geral do endpoint para ocultar respostas na nova X API. O endpoint para ocultar respostas permite que você construa ferramentas que ajudem as pessoas a ocultar ou reexibir respostas aos seus Tweets. As pessoas gerenciam suas respostas por diversos motivos, incluindo dar menos atenção a comentários abusivos, perturbadores, enganosos, ou para tornar as conversas mais envolventes. Por meio deste endpoint, você pode construir ferramentas para ajudar as pessoas no X a ocultar ou reexibir respostas de forma mais rápida e mais..."
		}]
	},
	"twitter_filter_level": "low"
}
Atividade de Post com twitter_extended_entities
{
	"id": "tag:search.x.com,2005:1293593516040269825",
	"objectType": "activity",
	"verb": "post",
	"postedTime": "2020-08-12T17:01:42.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
	"body": "Finalmente chegou! 🥁 Conheça a nova #XAPI.\n\nEstamos reconstruindo a X API v2 do zero para melhor… https://t.co/UeCndQGMjx",
	"long_object": {
		"body": "Finalmente chegou! 🥁 Conheça a nova #XAPI.\n\nEstamos reconstruindo a X API v2 do zero para melhor atender nossa comunidade de desenvolvedores. E o lançamento de hoje é apenas o começo.\n\nhttps://t.co/32VrwpGaJw https://t.co/KaFSbjWUA8",
		"display_text_range": [
			0,
			218
		],
		"twitter_entities": {
			"hashtags": [{
				"text": "API",
				"indices": [
					42,
					53
				]
			}],
			"urls": [{
				"url": "https://t.co/32VrwpGaJw",
				"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
				"display_url": "blog.x.com/developer/en_u…",
				"indices": [
					195,
					218
				]
			}],
			"user_mentions": [],
			"symbols": [],
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		},
		"twitter_extended_entities": {
			"media": [{
				"id": 1293565706408038400,
				"id_str": "1293565706408038401",
				"indices": [
					219,
					242
				],
				"additional_media_info": {
					"monetizable": false
				},
				"media_url": "http://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"media_url_https": "https://pbs.twimg.com/ext_tw_video_thumb/1293565706408038401/pu/img/66P2dvbU4a02jYbV.jpg",
				"url": "https://t.co/KaFSbjWUA8",
				"display_url": "pic.x.com/KaFSbjWUA8",
				"expanded_url": "https://x.com/XDevelopers/status/1293593516040269825/video/1",
				"type": "video",
				"video_info": {
					"aspect_ratio": [
						16,
						9
					],
					"duration_millis": 34875,
					"variants": [{
							"bitrate": 256000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/480x270/Fg9lnGGsITO0uq2K.mp4?tag=10"
						},
						{
							"bitrate": 832000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/640x360/-crbtZE4y8vKN_uF.mp4?tag=10"
						},
						{
							"content_type": "application/x-mpegURL",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/pl/OvIqQojosF6sMIHR.m3u8?tag=10"
						},
						{
							"bitrate": 2176000,
							"content_type": "video/mp4",
							"url": "https://video.twimg.com/ext_tw_video/1293565706408038401/pu/vid/1280x720/xkxyb-VPVY4OI0j9.mp4?tag=10"
						}
					]
				},
				"sizes": {
					"thumb": {
						"w": 150,
						"h": 150,
						"resize": "crop"
					},
					"medium": {
						"w": 1200,
						"h": 675,
						"resize": "fit"
					},
					"small": {
						"w": 680,
						"h": 383,
						"resize": "fit"
					},
					"large": {
						"w": 1280,
						"h": 720,
						"resize": "fit"
					}
				}
			}]
		}
	},
	"display_text_range": [
		0,
		140
	],
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #TwitterAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1"
		},
		"favoritesCount": 2147
	},
	"object": {
		"objectType": "note",
		"id": "object:search.x.com,2005:1293593516040269825",
		"summary": "Finalmente chegou! 🥁 Conheça a nova #API.\n\nEstamos reconstruindo a X API v2 do zero para b… https://t.co/UeCndQGMjx",
		"link": "http://x.com/XDevelopers/statuses/1293593516040269825",
		"postedTime": "2020-08-12T17:01:42.000Z"
	},
	"favoritesCount": 2844,
	"twitter_entities": {
		"hashtags": [{
			"text": "API",
			"indices": [
				42,
				53
			]
		}],
		"urls": [{
			"url": "https://t.co/UeCndQGMjx",
			"expanded_url": "https://x.com/i/web/status/1293593516040269825",
			"display_url": "x.com/i/web/status/1…",
			"indices": [
				117,
				140
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 958,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/32VrwpGaJw",
			"expanded_url": "https://blog.x.com/developer/en_us/topics/tools/2020/introducing_new_twitter_api.html",
			"expanded_status": 200,
			"expanded_url_title": "Apresentando uma X API nova e aprimorada",
			"expanded_url_description": "Apresentando a nova X API - reconstruída do zero para entregar novos recursos mais rapidamente para que os desenvolvedores possam ajudar o mundo a se conectar à conversa pública que acontece no X."
		}]
	},
	"twitter_filter_level": "low"
}
Atividade de Retweets
{
	"id": "tag:search.x.com,2005:1229851574555508737",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-18T19:33:59.000Z",
	"generator": {
		"displayName": "X Web App",
		"link": "https://mobile.x.com"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1229851574555508737",
	"body": "RT @suhemparack: Criei uma Skill do Alexa para X usando APL que permite visualizar Tweets e Trends no echo show!\n\nConfira aqu…",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
			"displayName": "127.0.0.1",
		},
		"favoritesCount": 2147
	},
	"object": {
		"id": "tag:search.x.com,2005:1229843515603144704",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2020-02-18T19:01:58.000Z",
		"generator": {
		"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
		"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/suhemparack/statuses/1229843515603144704",
		"body": "Criei uma Skill do Alexa para X usando APL que permite visualizar Tweets e Trends no echo show!\n\nConfira… https://t.co/RP9NgltX7i",
		"long_object": {
			"body": "Criei uma Skill do Alexa para X usando APL que permite visualizar Tweets e Trends no echo show!\n\nConfira aqui 👇\n\nhttps://t.co/l5J8wq748G",
			"display_text_range": [
				0,
				150
			],
			"twitter_entities": {
				"hashtags": [],
				"urls": [{
					"url": "https://t.co/l5J8wq748G",
					"expanded_url": "https://dev.to/XDevelopers/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
					"display_url": "dev.to/twitterdev/bui…",
					"indices": [
						127,
						150
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:857699969263964161",
			"link": "http://www.x.com/suhemparack",
			"displayName": "Suhem Parack",
			"postedTime": "2017-04-27T20:56:22.883Z",
			"image": "https://pbs.twimg.com/profile_images/1230703695051935747/TbQKe91L_normal.jpg",
			"summary": "Relações com Desenvolvedores para Pesquisa Acadêmica @X. Fale comigo sobre pesquisa com dados do X. Anteriormente: Amazon Alexa. Opiniões são minhas",
			"friendsCount": 501,
			"followersCount": 732,
			"listedCount": 12,
			"statusesCount": 458,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "suhemparack",
			"languages": [],
			"links": [{
				"href": "https://developer.x.com",
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "Seattle, WA",
			},
			"favoritesCount": 358
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1229843515603144704",
			"summary": "Criei uma Skill do Alexa para X usando APL que permite visualizar Tweets e Trends no echo show!\n\nConfira… https://t.co/RP9NgltX7i",
			"link": "http://x.com/suhemparack/statuses/1229843515603144704",
			"postedTime": "2020-02-18T19:01:58.000Z"
		},
		"favoritesCount": 71,
		"twitter_entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/RP9NgltX7i",
				"expanded_url": "https://x.com/i/web/status/1229843515603144704",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	},
	"favoritesCount": 0,
	"twitter_entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "suhemparack",
			"name": "Suhem Parack",
			"id": 857699969263964200,
			"id_str": "857699969263964161",
			"indices": [
				3,
				15
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 19,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
			"url": "https://t.co/l5J8wq748G",
			"expanded_url": "https://dev.to/twitterdev/building-an-alexa-skill-for-twitter-using-alexa-presentation-language-1aj0",
			"expanded_status": 200,
			"expanded_url_title": null,
			"expanded_url_description": null
		}]
	},
	"twitter_filter_level": "low"
}
Atividade de Tweet com citação
{
 	"id": "tag:search.x.com,2005:1328399838128467969",
 	"objectType": "activity",
 	"verb": "post",
 	"postedTime": "2020-11-16T18:09:36.000Z",
 	"generator": {
 		"displayName": "X Web App",
 		"link": "https://mobile.x.com"
 	},
 	"provider": {
 		"objectType": "service",
 		"displayName": "X",
 		"link": "http://www.x.com"
 	},
 	"link": "http://x.com/XDevelopers/statuses/1328399838128467969",
 	"body": "Conforme planejado, os endpoints Labs v2 referenciados abaixo foram descontinuados. Informe-nos nos fóruns se você t… https://t.co/ahQvTYaOcZ",
 	"long_object": {
 		"body": "Conforme planejado, os endpoints Labs v2 referenciados abaixo foram descontinuados. Informe-nos nos fóruns se você tiver dúvidas ou precisar de ajuda com o X API v2! https://t.co/JaxttUMmjX",
 		"display_text_range": [
 			0,
 			166
 		],
 		"twitter_entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/JaxttUMmjX",
 				"expanded_url": "https://x.com/XDevelopers/status/1327011423252144128",
 				"display_url": "x.com/XDevelopers/sta…",
 				"indices": [
 					167,
 					190
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		}
 	},
 	"display_text_range": [
 		0,
 		140
 	],
 	"actor": {
 		"objectType": "person",
 		"id": "id:twitter.com:2244994945",
 		"link": "http://www.x.com/XDevelopers",
 		"displayName": "X Dev",
 		"postedTime": "2013-12-14T04:35:55.036Z",
 		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 		"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados ao #XAPI.",
 		"friendsCount": 2038,
 		"followersCount": 512292,
 		"listedCount": 1666,
 		"statusesCount": 3634,
 		"twitterTimeZone": null,
 		"verified": true,
 		"utcOffset": null,
 		"preferredUsername": "XDevelopers",
 		"languages": [],
 		"links": [{
 			"href": "https://developer.x.com/en/community",
 			"rel": "me"
 		}],
 		"location": {
 			"objectType": "place",
 			"displayName": "127.0.0.1"
 		},
 		"favoritesCount": 2147
 	},
 	"object": {
 		"objectType": "note",
 		"id": "object:search.x.com,2005:1328399838128467969",
 		"summary": "Conforme planejado, os endpoints Labs v2 referenciados abaixo foram descontinuados. Informe-nos nos fóruns se você t… https://t.co/ahQvTYaOcZ",
 		"link": "http://x.com/XDevelopers/statuses/1328399838128467969",
 		"postedTime": "2020-11-16T18:09:36.000Z"
 	},
 	"favoritesCount": 29,
 	"twitter_entities": {
 		"hashtags": [],
 		"urls": [{
 			"url": "https://t.co/ahQvTYaOcZ",
 			"expanded_url": "https://x.com/i/web/status/1328399838128467969",
 			"display_url": "x.com/i/web/status/1…",
 			"indices": [
 				117,
 				140
 			]
 		}],
 		"user_mentions": [],
 		"symbols": []
 	},
 	"twitter_lang": "en",
 	"retweetCount": 7,
 	"gnip": {
 		"matching_rules": [{
 			"tag": null
 		}],
 		"urls": [{
 			"url": "https://t.co/r6z6CI7kEy",
 			"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
 			"expanded_status": 200,
 			"expanded_url_title": "Descontinuando busca recente e ocultar respostas do Labs v2",
 			"expanded_url_description": "Como mencionamos em nossos anúncios de Acesso Antecipado e ocultar respostas, os seguintes endpoints do X Developer Labs v2 serão descontinuados em 16 de novembro. Busca recente do Labs v2 Ocultar respostas do Labs v2 Se chamados, esses endpoints responderão com status HTTP 410 e não retornarão dados. Com base no seu feedback do Labs, incorporamos a funcionalidade correspondente no X API v2. A documentação relevante pode ser encontrada usando os links abaixo. Clique aqui para se inscrever no acesso v2 se ainda não o fez...",
 		}]
 	},
 	"twitter_filter_level": "low",
 	"twitter_quoted_status": {
 		"id": "tag:search.x.com,2005:1327011423252144128",
 		"objectType": "activity",
 		"verb": "post",
 		"postedTime": "2020-11-12T22:12:32.000Z",
 		"generator": {
 			"displayName": "X Web App",
 			"link": "https://mobile.x.com"
 		},
 		"provider": {
 			"objectType": "service",
 			"displayName": "X",
 			"link": "http://www.x.com"
 		},
 		"link": "http://x.com/XDevelopers/statuses/1327011423252144128",
 		"body": "👋 Lembrete amigável de que o X Developer Labs v2 ocultar respostas e busca recente serão descontinuados na próxima segunda-feira, nove… https://t.co/EEWN2Q9aXh",
 		"long_object": {
 			"body": "👋 Lembrete amigável de que o X Developer Labs v2 ocultar respostas e busca recente serão descontinuados na próxima segunda-feira, 16 de novembro! Recomendamos que você migre para os novos endpoints de ocultar respostas e busca recente agora disponíveis no v2 #XAPI. Detalhes: https://t.co/r6z6CI7kEy",
 			"display_text_range": [
 				0,
 				273
 			],
 			"twitter_entities": {
 				"hashtags": [{
 					"text": "API",
 					"indices": [
 						228,
 						239
 					]
 				}],
 				"urls": [{
 					"url": "https://t.co/r6z6CI7kEy",
 					"expanded_url": "https://devcommunity.x.com/t/retiring-labs-v2-recent-search-and-hide-replies/145795",
 					"display_url": "devcommunity.com/t/retiring-lab…",
 					"indices": [
 						250,
 						273
 					]
 				}],
 				"user_mentions": [],
 				"symbols": []
 			}
 		},
 		"actor": {
 			"objectType": "person",
 			"id": "id:twitter.com:2244994945",
 			"link": "http://www.x.com/XDevelopers",
 			"displayName": "X Dev",
 			"postedTime": "2013-12-14T04:35:55.036Z",
 			"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
 			"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados ao #XAPI.",
 			"friendsCount": 2038,
 			"followersCount": 512292,
 			"listedCount": 1666,
 			"statusesCount": 3634,
 			"twitterTimeZone": null,
 			"verified": true,
 			"utcOffset": null,
 			"preferredUsername": "XDevelopers",
 			"languages": [],
 			"links": [{
 				"href": "https://developer.x.com/en/community",
 				"rel": "me"
 			}],
 			"location": {
 				"objectType": "place",
 				"displayName": "127.0.0.1"
 			},
 			"favoritesCount": 2147
 		},
 		"object": {
 			"objectType": "note",
 			"id": "object:search.x.com,2005:1327011423252144128",
 			"summary": "👋 Lembrete amigável de que o X Developer Labs v2 ocultar respostas e busca recente serão descontinuados na próxima segunda-feira, nove… https://t.co/EEWN2Q9aXh",
 			"link": "http://x.com/XDevelopers/statuses/1327011423252144128",
 			"postedTime": "2020-11-12T22:12:32.000Z"
 		},
 		"favoritesCount": 33,
 		"twitter_entities": {
 			"hashtags": [],
 			"urls": [{
 				"url": "https://t.co/EEWN2Q9aXh",
 				"expanded_url": "https://x.com/i/web/status/1327011423252144128",
 				"display_url": "x.com/i/web/status/1…",
 				"indices": [
 					117,
 					140
 				]
 			}],
 			"user_mentions": [],
 			"symbols": []
 		},
 		"twitter_lang": "en",
 		"twitter_filter_level": "low"
 	}
 }
Atividade de Retweet e de Tweet com citação
{
	"id": "tag:search.x.com,2005:1225470895902412800",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-06T17:26:44.000Z",
	"generator": {
		"displayName": "X para iPhone",
		"link": "http://x.com/download/iphone"
	},
	"provider": {
		"objectType": "service",
		"displayName": "X",
		"link": "http://www.x.com"
	},
	"link": "http://x.com/XDevelopers/statuses/1225470895902412800",
	"body": "RT @AureliaSpecker: 📣 If you enjoyed the London commute tutorial I wrote in November last year, check out the refactored version that uses…",
	"actor": {
		"objectType": "person",
		"id": "id:twitter.com:2244994945",
		"link": "http://www.x.com/XDevelopers",
		"displayName": "X Dev",
		"postedTime": "2013-12-14T04:35:55.036Z",
		"image": "https://pbs.twimg.com/profile_images/1283786620521652229/lEODkLTh_normal.jpg",
		"summary": "A voz da equipe #XDevelopers e sua fonte oficial para atualizações, notícias e eventos relacionados à #XAPI.",
		"friendsCount": 2038,
		"followersCount": 512292,
		"listedCount": 1666,
		"statusesCount": 3634,
		"twitterTimeZone": null,
		"verified": true,
		"utcOffset": null,
		"preferredUsername": "XDevelopers",
		"languages": [],
		"links": [{
			"href": "https://developer.x.com/en/community",
			"rel": "me"
		}],
		"location": {
			"objectType": "place",
		"displayName": "127.0.0.1",
		},
		"favoritesCount": 2147
	},
	"object": {
		"id": "tag:search.x.com,2005:1224709550214873090",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2020-02-04T15:01:25.000Z",
		"generator": {
		"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
		"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1224709550214873090",
		"body": "📣 Se você curtiu o tutorial sobre deslocamento em Londres que escrevi em novembro do ano passado, confira a versão refatorada que u… https://t.co/cAepHunkFp",
		"long_object": {
			"body": "📣 Se você curtiu o tutorial sobre deslocamento em Londres que escrevi em novembro do ano passado, confira a versão refatorada que usa o novo endpoint de busca do X 🚇 https://t.co/87XIPZmZBJ\n\n#DEVcommunity #Pythontutorial @XDevelopers @API https://t.co/dXrJYvn3hY",
			"display_text_range": [
				0,
				229
			],
			"twitter_entities": {
				"hashtags": [{
						"text": "DEVcommunity",
						"indices": [
							176,
							189
						]
					},
					{
						"text": "Pythontutorial",
						"indices": [
							190,
							205
						]
					}
				],
				"urls": [{
						"url": "https://t.co/87XIPZmZBJ",
						"expanded_url": "https://bit.ly/2OrnrCC",
						"display_url": "bit.ly/2OrnrCC",
						"indices": [
							151,
							174
						]
					},
					{
						"url": "https://t.co/dXrJYvn3hY",
						"expanded_url": "https://x.com/AureliaSpecker/status/1195000047089389573",
						"display_url": "x.com/AureliaSpecker…",
						"indices": [
							230,
							253
						]
					}
				],
				"user_mentions": [{
						"screen_name": "XDevelopers",
						"name": "X Dev",
						"id": 2244994945,
						"id_str": "2244994945",
						"indices": [
							206,
							217
						]
					},
					{
						"screen_name": "API",
						"name": "X API",
						"id": 6253282,
						"id_str": "6253282",
						"indices": [
							218,
							229
						]
					}
				],
				"symbols": []
			}
		},
		"display_text_range": [
			0,
			140
		],
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:1102321381",
			"link": "http://www.x.com/AureliaSpecker",
			"displayName": "Aurelia Specker",
			"postedTime": "2013-01-18T23:45:43.000Z",
			"image": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
			"summary": "devrel @TwitterUK • Suíça em Londres • mãe de plantas de casa • cabeleireira pessoal do @_dormrod",
			"friendsCount": 1331,
			"followersCount": 1032,
			"listedCount": 26,
			"statusesCount": 854,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "AureliaSpecker",
			"languages": [],
			"links": [{
				"href": null,
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "Londres, Reino Unido",
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1224709550214873090",
			"summary": "📣 Se você curtiu o tutorial sobre deslocamento em Londres que escrevi em novembro do ano passado, confira a versão refatorada que u… https://t.co/cAepHunkFp",
			"link": "http://x.com/AureliaSpecker/statuses/1224709550214873090",
			"postedTime": "2020-02-04T15:01:25.000Z"
		},
		"favoritesCount": 43,
		"twitter_entities": {
			"hashtags": [],
			"urls": [{
				"url": "https://t.co/cAepHunkFp",
				"expanded_url": "https://x.com/i/web/status/1224709550214873090",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					117,
					140
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	},
	"favoritesCount": 0,
	"twitter_entities": {
		"hashtags": [],
		"urls": [],
		"user_mentions": [{
			"screen_name": "AureliaSpecker",
			"name": "Aurelia Specker",
			"id": 1102321381,
			"id_str": "1102321381",
			"indices": [
				3,
				18
			]
		}],
		"symbols": []
	},
	"twitter_lang": "en",
	"retweetCount": 12,
	"gnip": {
		"matching_rules": [{
			"tag": null
		}],
		"urls": [{
				"url": "https://t.co/87XIPZmZBJ",
				"expanded_url": "https://dev.to/XDevelopers/migrate-to-twitter-s-newly-released-labs-recent-search-endpoint-3npe",
				"expanded_status": 200,
				"expanded_url_title": null,
				"expanded_url_description": null
			},
			{
				"url": "https://t.co/sOjXW4YhbN",
				"expanded_url": "https://dev.to/XDevelopers/using-the-twitter-api-to-make-your-commute-easier-3od0",
				"expanded_status": 200,
				"expanded_url_title": null,
				"expanded_url_description": null
			}
		]
	},
	"twitter_filter_level": "low",
	"twitter_quoted_status": {
		"id": "tag:search.x.com,2005:1195000047089389573",
		"objectType": "activity",
		"verb": "post",
		"postedTime": "2019-11-14T15:26:27.000Z",
		"generator": {
			"displayName": "X Web App",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
		"body": "Escrevi um tutorial sobre como obter informações personalizadas de deslocamento usando a X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
		"long_object": {
			"body": "Escrevi um tutorial sobre como obter informações personalizadas de deslocamento usando a X API🚇\n\n#DEVcommunity #Pythontutorial \n\nConfira aqui 👇\nhttps://t.co/sOjXW4YhbN",
			"display_text_range": [
				0,
				160
			],
			"twitter_entities": {
				"hashtags": [{
						"text": "DEVcommunity",
						"indices": [
							85,
							98
						]
					},
					{
						"text": "Pythontutorial",
						"indices": [
							99,
							114
						]
					}
				],
				"urls": [{
					"url": "https://t.co/sOjXW4YhbN",
					"expanded_url": "https://dev.to/XDevelopers/using-the-twitter-api-to-make-your-commute-easier-3od0",
					"display_url": "dev.to/twitterdev/usi…",
					"indices": [
						137,
						160
					]
				}],
				"user_mentions": [],
				"symbols": []
			}
		},
		"actor": {
			"objectType": "person",
			"id": "id:twitter.com:1102321381",
			"link": "http://www.x.com/AureliaSpecker",
			"displayName": "Aurelia Specker",
			"postedTime": "2013-01-18T23:45:43.000Z",
			"image": "https://pbs.twimg.com/profile_images/1137517534104772608/8FBYgc6G_normal.jpg",
			"summary": "devrel @TwitterUK • Suíça em Londres • mãe de plantas de casa • cabeleireira pessoal de @_dormrod",
			"friendsCount": 1331,
			"followersCount": 1032,
			"listedCount": 26,
			"statusesCount": 854,
			"twitterTimeZone": null,
			"verified": false,
			"utcOffset": null,
			"preferredUsername": "AureliaSpecker",
			"languages": [],
			"links": [{
				"href": null,
				"rel": "me"
			}],
			"location": {
				"objectType": "place",
				"displayName": "Londres, Reino Unido"
			},
			"favoritesCount": 4979
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:1195000047089389573",
			"summary": "Escrevi um tutorial sobre como obter informações personalizadas de deslocamento usando a X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
			"link": "http://x.com/AureliaSpecker/statuses/1195000047089389573",
			"postedTime": "2019-11-14T15:26:27.000Z"
		},
		"favoritesCount": 123,
		"twitter_entities": {
			"hashtags": [{
					"text": "DEVcommunity",
					"indices": [
						85,
						98
					]
				},
				{
					"text": "Pythontutorial",
					"indices": [
						99,
						114
					]
				}
			],
			"urls": [{
				"url": "https://t.co/pL0qJ4vhtE",
				"expanded_url": "https://x.com/i/web/status/1195000047089389573",
				"display_url": "x.com/i/web/status/1…",
				"indices": [
					116,
					139
				]
			}],
			"user_mentions": [],
			"symbols": []
		},
		"twitter_lang": "en",
		"twitter_filter_level": "low"
	}
}

Linha do tempo de metadata de Tweet

Ir para nesta página Introdução Conceitos-chave Linha do tempo do X Dicas de filtragem Próximos passos

Introdução**

Em sua essência, X é uma rede de comunicação pública, em tempo real e global. Desde 2006, a evolução do X tem sido impulsionada tanto por padrões e convenções de uso dos usuários quanto por novos recursos e melhorias de produto. Se você utiliza dados do X para pesquisa histórica, entender a linha do tempo dessa evolução é importante para encontrar Posts de interesse no arquivo de dados. O X foi lançado como um app móvel simples via SMS e evoluiu para uma plataforma de comunicação abrangente — uma plataforma com um conjunto completo de APIs. As APIs sempre foram um pilar da rede X. A primeira API foi lançada pouco depois do lançamento do X. Quando a marcação geográfica de Posts foi introduzida pela primeira vez, em 2009, ela foi disponibilizada por meio de uma Geo API (e, posteriormente, a capacidade de “geotaguear” um Post foi integrada à interface do usuário do X.com). Hoje, as APIs do X impulsionam a rede de comunicação bidirecional que se tornou fonte de notícias de última hora e de compartilhamento de informações. As oportunidades de construir sobre esse canal de comunicação global e em tempo real são infinitas. O X disponibiliza duas APIs históricas que fornecem acesso a todo Post disponível publicamente: Historical PowerTrack e a Full-Archive Search API. Ambas as APIs oferecem um conjunto de operadores usados para consultar e coletar Posts de interesse. Esses operadores fazem correspondência com uma variedade de atributos associados a cada Post — centenas de atributos, como o conteúdo de texto do Post, o nome da conta do autor e os links compartilhados no Post. Os Posts e seus atributos são codificados em JSON, um formato comum de intercâmbio de dados baseado em texto. Assim, à medida que novos recursos foram introduzidos, novos atributos JSON surgiram e, normalmente, novos operadores de API foram adicionados para fazer correspondência com esses atributos. Se seu caso de uso inclui a necessidade de ouvir o que o mundo disse no X, quanto melhor você entender quando os operadores passaram a ter metadata JSON para corresponder, mais eficazes serão seus filtros históricos do PowerTrack. A seguir, apresentaremos alguns conceitos-chave que preparam o terreno para entender como as atualizações na metadata de Posts afetam a identificação do seu sinal de dados de interesse.

Conceitos principais**

De convenções de usuários a objetos de primeira classe no X

Usuários do X introduziram organicamente novos padrões de comunicação que hoje são fundamentais para a rede do X. Um exemplo seminal é a hashtag, hoje usada quase universalmente em todas as redes sociais. As hashtags foram criadas como uma forma de organizar conversas e tópicos. Em uma rede com centenas de milhões de mensagens por dia, ferramentas para encontrar Posts de interesse são essenciais, e as hashtags se tornaram um método central. Logo após o crescimento do uso de hashtags, elas receberam status e suporte oficiais do X. Quando as hashtags se tornaram um “objeto de primeira classe”, isso implicou várias coisas. Significou que as hashtags passaram a ser clicáveis/pesquisáveis na interface do usuário do X.com. Também significou que as hashtags passaram a integrar a família de entities do X, juntamente com @mentions, mídias anexadas, símbolos de ações e links compartilhados. Essas entities são convenientemente codificadas em um array JSON pré-processado, facilitando para desenvolvedores processá-las, analisá-las e armazená-las. Retweets são outro exemplo de convenções impulsionadas por usuários que se tornaram objetos oficiais. O Retweet surgiu como uma forma de “encaminhar” conteúdo para outras pessoas. Começou como um processo manual de copiar/colar um Post e prefixá-lo com o padrão “RT @”. Esse processo foi posteriormente automatizado por meio de um novo botão de Retweet, completo com novos metadata em JSON. Nasceu o Retweet “oficial”. Outros exemplos incluem “mentions”, compartilhamento de mídia e links da web, e compartilhamento de localização com seu Post. Cada um desses padrões de uso resultou em novos recursos de interface do usuário no x.com, novo JSON de suporte e, portanto, novas maneiras de fazer correspondência em Posts. Todos esses atributos fundamentais de Post resultaram em PowerTrack Operators usados para corresponder a eles.

Metadados de Post, mutabilidade, atualizações e atualidade

Embora as mensagens de Post possam ter um número fixo de caracteres, a descrição JSON de um Post contém mais de 100 atributos. Atributos como quem publicou, em que momento, se é um Post original ou um Retweet, além de um array de objetos de primeira classe, como hashtags, menções e links compartilhados. Para a conta que publicou, há um objeto User (ou Actor) com diversos atributos que fornecem o Profile do usuário e outros metadados da conta. Perfis incluem uma breve descrição biográfica, uma localização principal (texto livre), idioma preferido e um link de site opcional. Alguns metadados da conta nunca mudam (por exemplo, o user ID numérico e a data de criação), alguns mudam lentamente ao longo do tempo, enquanto outros atributos mudam com mais frequência. As pessoas mudam de emprego e se mudam. Empresas atualizam suas informações. Ao coletar Posts históricos, é importante entender que alguns metadados estão como eram quando o Post foi publicado, enquanto outros metadados estão como estão quando a query é enviada Em todas as APIs históricas, a descrição do perfil do usuário, o nome de exibição e os atributos de “home” do perfil são atualizados para os valores no momento da query.

Mídia “nativa”

X.com e os apps móveis do X permitem adicionar fotos e vídeos a um Post clicando em um botão e navegando pelas suas galerias de fotos. Agora que essas ações são integradas de forma nativa, os vídeos e fotos compartilhados assim são chamados de mídia “nativa”. Muitos operadores de consulta funcionam com esses recursos “nativos”, incluindo has:videos, has:images e has:media. Eles correspondem apenas a conteúdo de mídia compartilhado por meio de recursos do X. Para corresponder a outras mídias hospedadas fora da plataforma X, use operadores que atuem sobre os metadados da URL. Então, antes de entrarmos nos detalhes dos produtos Historical PowerTrack e Full-Archive Search, vamos percorrer como o X, como produto e plataforma, evoluiu ao longo do tempo. Linha do tempo do X Abaixo você encontrará uma linha do tempo selecionada do X. A maioria dessas atualizações do X, de alguma forma, afetou fundamentalmente o comportamento do usuário, o conteúdo JSON dos Posts, os operadores de consulta, ou os três. Observando o X como uma plataforma de API, os eventos a seguir, de alguma forma, afetaram os payloads JSON usados para codificar Posts. Por sua vez, esses detalhes em JSON afetam como as APIs históricas do X fazem a correspondência com eles. Observe que esta linha do tempo é geralmente precisa e não exaustiva.

2006

  • Outubro
    • @replies tornam-se uma convenção.
    • Os cashtagssurgempelaprimeiravez,masousoparamencionartickersdeac\co~essoˊsetornacomumnoinıˊciode2009.Oscashtags surgem pela primeira vez, mas o uso para mencionar tickers de ações só se torna comum no início de 2009. Os cashtags passam a ser links clicáveis/pesquisáveis em junho de 2012.
  • Novembro - Favoritos introduzidos.

2007

  • Janeiro - @replies passam a ser um objeto de primeira classe, com um botão de responder na interface e metadata in_reply_to.
  • Abril - Retweets tornam-se uma convenção.
  • Agosto - #hashtags surgem como uma ferramenta principal para pesquisar e organizar Posts.

2009

  • Fevereiro - $cashtags se tornam uma convenção comum para discutir símbolos de ações.
  • Maio - Retweet “beta” é introduzido com “Via @” adicionado ao corpo do Post.
  • Junho - Contas verificadas são introduzidas.
  • Agosto - Retweets se tornam um objeto de primeira classe com o padrão “RT @” e nova metadata retweet_status.
  • Outubro - Recurso List lançado.
  • Novembro - A Post Geotagging API é lançada, fornecendo o primeiro método para que usuários compartilhem localização por meio de apps de terceiros.

2010

  • Junho - X Places é introduzido para geotagging de Posts.
  • Agosto - O botão de Post para sites é lançado. Facilitou o compartilhamento de links.

2011

  • Maio - Introduzido o botão Follow, facilitando o acompanhamento de contas associadas a sites.
  • Agosto - Introduzidas fotos nativas.

2012

  • Junho - $Cashtags passam a ser um link clicável/pesquisável.

2014

2015

  • Abril - Uma mudança no design da interface de usuário de Post do X resulta em menos Posts com geotag.
  • Outubro - Enquetes do X introduzidas. As enquetes inicialmente ofereciam duas opções com um período de votação de 24 horas. Em novembro, passaram a oferecer quatro opções, com períodos de votação de 5 minutos a sete dias. metadata das enquetes disponibilizada (apenas no formato nativo enriquecido) em fevereiro de 2017.

2016

2017

  • Fevereiro - metadados de X Poll incluídos nos metadados de Post (apenas no formato nativo enriquecido).
  • Abril - “Respostas simplificadas” introduzidas, com as contas mencionadas na resposta não contando para o limite de 140 caracteres (“dmw140, parte 2”).
2018 2022
  • 29 de setembro - O recurso de edição de Posts é disponibilizado para um pequeno grupo de testes. Metadados de Posts editados são adicionados ao Objeto Post quando relevante. Isso inclui os objetos edit_history e edit_controls. Esses metadados não serão retornados para Posts criados antes da adição da funcionalidade de edição. Não há Operadores associados a esses metadados. Para saber mais sobre como as edições de Post funcionam, consulte os fundamentos de edição de Posts
Dicas de filtragem Estar familiarizado com a linha do tempo da X sobre quando e como novos recursos foram adicionados pode ajudar você a criar consultas mais eficazes. Aqui, query significa um filtro ou regra aplicado pelas APIs históricas da X ao arquivo de Posts, usando Operadores PowerTrack para corresponder ao JSON de Post. Um exemplo é o operador lang:, usado para corresponder a Posts em um idioma específico. A X fornece um serviço de classificação de idioma (com suporte a mais de 50 idiomas), e as X APIs fornecem esse metadado no JSON gerado para cada Post. Assim, se um Post for escrito em espanhol, o atributo JSON “lang” é definido como “es”. Portanto, se você criar um filtro com a cláusula lang:es, ele corresponderá apenas a mensagens de Post classificadas como espanhol. As informações da linha do tempo também podem ajudar a interpretar melhor os dados de Post recebidos. Suponha que você esteja pesquisando o compartilhamento de conteúdo sobre as Olimpíadas de Verão de 2008 e 2012. Se você aplicasse apenas o operador is:retweet para corresponder a Retweets, nenhum dado corresponderia em 2008. No entanto, para 2012 provavelmente haveria milhões de Retweets. A partir disso, você poderia concluir erroneamente que, em 2008, Retweets não eram uma convenção entre usuários ou que simplesmente ninguém fez Retweet sobre aquelas Olimpíadas. Como os Retweets se tornaram um objeto de primeira classe em 2009, é preciso adicionar uma cláusula de regra ”RT @” para ajudar a identificá-los em 2008. Tanto os Retweets quanto a classificação de idioma do Post são exemplos de atributos de Post com longa história e muitos detalhes de produto. A seguir, discutiremos mais detalhes desses e de outras classes de atributos importantes para corresponder e entender os Dados da X.

Reconhecendo falsos negativos

Ao criar filtros, é importante lembrar que os Operadores de metadata com os quais se faz correspondência têm “datas de nascimento”. Se você criar um filtro com um Operador que atua sobre metadata introduzida depois que o Post foi publicado, terá um falso negativo. Por exemplo, suponha que você esteja interessado em todos os Posts que mencionam ‘snow’ e compartilham um vídeo. Se você criar uma regra com o Operador has:videos, que corresponde a Posts com vídeos nativos, essa cláusula não corresponderá a nenhum Post anterior a 2015. No entanto, o compartilhamento de vídeos já era comum no X muito antes de 2015. Antes disso, os usuários compartilhavam links para vídeos hospedados em outros lugares, mas em 2015 o X incorporou novos recursos de “compartilhar vídeo” diretamente na plataforma. Para localizar esses Posts anteriores de interesse, você incluiria uma cláusula de regra como url:"youtube.com". Observe que, com as Search APIs, há casos em que metadata foi “preenchida retroativamente” conforme o índice era reconstruído. Um bom exemplo são os cashtags,quepassaramaseramplamenteusadosparadiscutirsıˊmbolosdeac\co~esem2009.Depoisqueooperadordecashtags, que passaram a ser amplamente usados para discutir símbolos de ações em 2009. Depois que o operador de cashtag foi introduzido em 2015, o índice de Search foi reconstruído e, nesse processo, a entidade de símbolo foi extraída de todos os corpos de Post, incluindo os do início de 2006, quando $ era usado principalmente como gíria: “I hope it nownow $oon!”.

Identificando e filtrando atributos de Post importantes para o seu caso de uso

Algumas metadata, como os ids numéricos de contas do X, existem desde o início (e são um exemplo de metadata de conta que nunca mudam). Outras metadata só foram introduzidas bem depois do lançamento do X em 2006. Exemplos de novas metadata incluem metadata de Retweets, localização de Posts, títulos e descrições de URLs e mídia “nativa”. Abaixo estão alguns dos tipos mais comuns de atributos de Post que foram profundamente afetados por essas atualizações da plataforma X. O comportamento de filtragem/correspondência desses atributos depende, na maioria dos casos, de qual API histórica de Post é usada. Para ajudar a determinar qual produto é mais adequado para sua pesquisa e caso de uso, os detalhes dos atributos fornecidos abaixo incluem informações de produto em alto nível.

Perfis do X

Como o X é, em sua essência, um canal global de comunicação em tempo real, pesquisas com dados de Post geralmente enfatizam quem está se comunicando. Muitas vezes, é útil saber de onde um usuário do X é. Saber que a bio de uma conta inclui menções a interesses e hobbies pode levar você a Posts relevantes. É muito comum querer monitorar Posts de contas de interesse. Os atributos de perfil são fundamentais para todos esses casos de uso. Cada conta no X tem um Perfil que inclui metadata como o @handle do X, nome de exibição, uma breve bio, localização (texto livre inserido pelo usuário), número de seguidores e muitos outros. Alguns atributos nunca mudam, como o id numérico do usuário e a data de criação da conta. Outros geralmente mudam dia a dia, semana a semana ou mês a mês, como o número de Posts publicados e o número de contas seguidas e de seguidores. Outros atributos da conta também podem mudar a qualquer momento, mas tendem a mudar com menos frequência: nome de exibição, localização e bio. O payload JSON de cada Post inclui metadata de perfil da conta do autor do Post. Se for um Retweet, também inclui metadata de perfil da conta que publicou o Post original. A mutabilidade da metadata de perfil de um Post depende inteiramente do produto histórico utilizado. As Search APIs fornecem Posts históricos com as configurações de perfil como estão no momento da recuperação. No Historical PowerTrack, o perfil é como era no momento em que o Post foi publicado, exceto para dados anteriores a 2011. Para Posts anteriores a 2011, a metadata de perfil reflete o perfil como era em setembro de 2011.

Post original e Retweets

Retweets são outro exemplo de convenções impulsionadas por usuários que se tornaram objetos oficiais. O Retweet surgiu como uma forma de “encaminhar” conteúdo para outras pessoas. Começou como um processo manual de copiar/colar um Post e antepor o padrão “RT @”. Esse processo acabou sendo automatizado por meio de um novo botão de Retweet, com novas metadata JSON. O Retweet “oficial” nasceu e a ação de retweetar tornou-se um evento de Post de primeira classe. Junto com o novo botão de Retweet, novas metadata foram introduzidas, como o payload completo do Post original. Determinar se um Post é original ou compartilhado é um critério comum de filtragem. Em alguns casos, apenas conteúdo original é necessário. Em outros, o engajamento do Post é prioritário, então Retweets são fundamentais. O Operador PowerTrack is:retweet permite incluir ou excluir Retweets. Se estiver obtendo data de antes de agosto de 2009, é preciso ter duas estratégias para correspondência de Retweet (ou não correspondência). Antes de agosto de 2009, a própria mensagem do Post precisa ser verificada, usando correspondência de frase exata, para identificar o padrão “RT @”. Para períodos após agosto de 2009, o Operador is:retweet está disponível.

Classificações de idioma de Post

O idioma em que um Post é escrito é de interesse comum. O idioma do Post pode ajudar a inferir a localização de um Post e, muitas vezes, apenas um idioma específico é necessário para análise ou exibição. (Perfis do X também têm uma configuração de idioma preferencial.) Para filtrar pela classificação de idioma de um Post, os produtos históricos do X (Search API e Historical PowerTrack) diferem bastante. Quando o arquivo do Search foi criado, todos os Posts foram preenchidos retroativamente com a classificação de idioma do X. Portanto, o operador lang: está disponível para todo o arquivo de Posts. No Historical PowerTrack, os metadados de classificação de idioma do X estão disponíveis no arquivo a partir de 26 de março de 2013. 

Georreferenciamento de Posts

Ser capaz de identificar onde um Post foi publicado (ou seja, georreferenciá-lo) é importante para muitos casos de uso. Há três métodos principais para georreferenciar Posts:
  • Referências geográficas no conteúdo de um Post
  • Posts geotagueados pelo usuário.
  • Localização “home” do perfil da conta definida pelo usuário
Referências geográficas em uma mensagem de Post
Fazer a correspondência de referências geográficas na mensagem de Post, embora muitas vezes seja o método mais desafiador por depender de conhecimento local, é uma opção para todo o arquivo de Posts. Aqui está um exemplo de correspondência georreferenciada de 2006 para a área de San Francisco com base no filtro “golden gate”: https://x.com/biz/statuses/28311
Posts com geotag definidos pelo usuário
Em novembro de 2009, a X introduziu a Post Geotagging API, que permitiu marcar Posts com uma localização exata. Em junho de 2010, a X lançou o X Places, que representa uma área geográfica na escala de estabelecimento, bairro ou cidade. Aproximadamente 1–2% dos Posts têm geotag por qualquer um dos métodos. O histórico de geotagging disponível depende da Historical API que você está usando. Com as Search APIs, a capacidade de começar a corresponder Posts usando alguns Geo Operators começou em março de 2010, e com outros em fevereiro de 2015. Se você estiver usando o Historical PowerTrack, o georreferenciamento começa em 1º de setembro de 2011. Quando o acervo do Historical PowerTrack foi construído, todo o geotagging anterior a essa data não foi incluído.
Localização “inicial” do perfil da conta definida pelo usuário
Todos os usuários do X podem definir a Localização do Perfil, indicando sua localização principal. Milhões de usuários do X fornecem essa informação, o que aumenta significativamente a quantidade de geodados no X Firehose. Esses metadados de localização são uma string livre, gerada pelo usuário e não normalizada. Aproximadamente 30% das contas têm metadados de Profile Geo que podem ser resolvidos em nível de país. Assim como em Post geo, os métodos de correspondência e os períodos disponíveis dependem da Historical API que você está usando. O Historical PowerTrack permite que os usuários tentem suas próprias correspondências personalizadas nessas strings livres. Para facilitar esse processo, o X também fornece um Profile Geo Enrichment que realiza a geocodificação quando possível, fornecendo metadados normalizados e Operadores correspondentes. Os Operadores de Profile Geo estão disponíveis tanto no Historical PowerTrack quanto nas Search APIs. No Historical PowerTrack, esses metadados de Profile Geo estão disponíveis a partir de junho de 2014. Nas Search APIs, esses metadados estão disponíveis a partir de fevereiro de 2015. Compartilhar links de páginas da web, fotos e vídeos sempre foi um caso de uso fundamental do X. No início da sua história, todas essas ações envolviam incluir um link (URL) na própria mensagem do Post. Em 2011, o X integrou o compartilhamento de fotos diretamente na sua interface do usuário. Em 2016, foram adicionados vídeos nativos. Dado esse histórico, há uma variedade de Operadores de filtragem usados para correspondência desse conteúdo. Há um conjunto de Operadores que verificam se os Posts têm links, fotos e vídeos compartilhados. Além disso, como a maioria das URLs compartilhadas no X é encurtada para consumir menos caracteres de um Post (por exemplo, geradas por serviços como bitly ou tinyurl), o X fornece enriquecimentos de dados que geram uma URL completa e expandida que pode ser usada para correspondência. Por exemplo, se você quiser corresponder Posts que incluam links discutindo X e sistemas de alerta precoce, um filtro que faça referência a ‘severe weather communication’ corresponderia a um Post contendo esta URL http://bit.ly/1XV1tG4. Em março de 2012, o enriquecimento de URL expandida foi introduzido. Antes disso, os payloads de Post incluíam apenas a URL fornecida pelo usuário. Assim, se o usuário incluía uma URL encurtada, podia ser desafiador corresponder às URLs (expandidas) de interesse. Com o Historical PowerTrack e as Search APIs, essas metadata estão disponíveis a partir de março de 2012. Em julho de 2016, o enriquecimento de URL aprimorado foi introduzido. Essa versão aprimorada fornece o título e a descrição HTML de um site no payload do Post, juntamente com Operadores para correspondência nesses campos. Com o Historical PowerTrack, essas metadata passam a estar disponíveis em julho de 2016. Com as Search APIs, essas metadata começam a surgir em dezembro de 2014. Em setembro de 2016, o X introduziu ‘anexos nativos’, em que um link compartilhado ao final não é contado no limite de 140 caracteres do Post. Ambos os enriquecimentos de URL ainda se aplicam a esses links compartilhados. Para outros detalhes específicos do produto sobre filtragem de URL, consulte os artigos correspondentes para mais informações.
I