Saltar al contenido principal
Consulte nuestras guías comparativas:

X API: Diccionario de datos de Enterprise

Introducción

Enterprise Los Posts son el componente atómico básico de todo en X. Todas las X API que devuelven Posts proporcionan esos datos codificados en JavaScript Object Notation (JSON). JSON se basa en pares clave-valor, con atributos con nombre y valores asociados. Los Objetos de Post recuperados de la API incluyen la “actualización de estado” de un usuario de X, pero los Retweets, las respuestas y los Tweets con cita también son Objetos de Post. Si un Post está relacionado con otro Post, como un Retweet, una respuesta o un Tweet con cita, cada uno se identificará o se incrustará en el Objeto de Post. Incluso el Post más simple en el formato de datos nativo de X tendrá objetos JSON anidados para representar otros atributos de un Post, como el autor, los usuarios mencionados, la ubicación etiquetada, los hashtags, los símbolos de cashtag, el contenido multimedia o los enlaces URL. Al trabajar con los datos de X, este es un concepto importante que entender. El formato de los datos del Post que recibirá de la X API depende del tipo de Post recibido, de la X API que esté utilizando y de la configuración de formato. Los endpoints de Enterprise que devuelven Objetos de Post se han actualizado para proporcionar los metadatos necesarios para comprender el historial de edición del Post. Obtenga más información sobre estos metadatos en la página “Editar Posts”.
En el formato nativo de X, la carga útil JSON incluirá atributos de ‘nivel raíz’ y objetos JSON anidados (que se representan aquí con la notación {}):
{
	"created_at": "Fri Feb 14 19:00:55 +0000 2020",
	"id_str": "1228393702244134912",
	"text": "¿Qué escribió el desarrollador en su tarjeta de San Valentín?\n  \nwhile(true) {\n    I = Love(You);  \n}",
	"entities": {
		"hashtags": [],
		"symbols": [],
		"user_mentions": [],
		"urls": []
	},
	"user": {
		"entities": {
			"url": {}
		}
	},
	"place": {}
}

Formatos de datos disponibles

Tenga en cuenta: se recomienda encarecidamente usar el formato Enriched Native para las API de datos de Enterprise.
  • El formato Enriched Native incluye todos los metadatos incorporados desde 2017, como los metadatos de encuestas, y métricas adicionales como reply_count y quote_count.
  • El formato Activity Streams no se ha actualizado con nuevos metadatos ni enriquecimientos desde la actualización del límite de caracteres de 2017.
Las API de datos de Enterprise entregan datos en dos formatos. El formato de Enterprise más cercano al formato nativo de Standard v1.1 es Enriched Native. El formato de datos de Enterprise heredado es Activity Streams, implementado originalmente por Gnip y utilizado como un formato normalizado en X y otros proveedores de datos de redes sociales en ese momento. Aunque este formato sigue disponible, X solo ha invertido en nuevas funciones y desarrollos en el formato Enriched Native desde 2017. El formato Enriched Native es exactamente lo que sugiere el nombre: incluye objetos nativos de X, así como enriquecimientos adicionales disponibles para productos de datos de Enterprise, como metadatos de expansión de URL, geolocalización de perfil, metadatos de encuestas y métricas de interacción adicionales.

Comparación de objetos por formato de datos

Sea cual sea su caso de uso en X, comprender qué representan estos objetos y atributos de Post codificados en JSON es fundamental para identificar correctamente las señales de datos de su interés. Para ayudar en ese esfuerzo, hay un conjunto de páginas dedicadas a cada objeto en cada formato de datos. Reflejando la jerarquía de JSON anterior, a continuación se incluyen enlaces a cada uno de estos objetos:
Enriquecido nativoActivity Streams
Link Objeto de PostLink Objeto de actividad
Link Objeto de usuarioLink Objeto de actor
Link Objeto de entidadesLink Objeto de entidades de X
Link Objeto de entidades extendidasLink Objeto de entidades extendidas de X
Link Objeto geográficoLink Objeto de ubicación
n/aLink Objeto de Gnip

Mejores prácticas de análisis

  • El JSON de X se codifica con caracteres UTF-8.
  • Los analizadores deben tolerar con facilidad la variación en el orden de los fields. Se debe asumir que el JSON de Post se sirve como un hash no ordenado de data.
  • Los analizadores deben tolerar la adición de fields “nuevos”.
  • Los analizadores de JSON deben tolerar fields “faltantes”, ya que no todos los fields aparecen en todos los context.
  • Por lo general, es seguro considerar un field con valor nulo, un conjunto vacío y la ausencia de un field como equivalentes.

Objetos de datos enriquecidos nativos de Enterprise

Objeto Tweet Enriquecido Nativo

¿Te interesa conocer más sobre cómo el formato de datos Enriquecido Nativo se corresponde con el de X API v2? Consulta nuestra guía de comparación: Enriquecido Nativo frente a X API v2

Objeto de Post

Al usar productos de datos de Enterprise, notará que gran parte del diccionario de datos es similar al formato nativo de datos de Post, con algunos metadatos enriquecidos adicionales. El nivel base del formato nativo enriquecido utiliza muchos de los mismos nombres de objeto que el formato de datos de X API v1.1. El Objeto de Post tiene una larga lista de atributos de nivel raíz, incluidos atributos fundamentales como id, created_at y text. Los objetos de Post también tendrán objetos anidados que incluyen user, entities y extended_entities. Los objetos de Post también tendrán otros objetos de Post anidados como retweeted_status, quoted_status y extended_tweet. El formato nativo enriquecido además tendrá un objeto matching_rules.
Diccionario de datos de X
A continuación, encontrará el diccionario de datos de estos atributos de nivel raíz, así como enlaces a los diccionarios de datos de los objetos secundarios.
AtributoTipoDescripción
created_atStringHora UTC en la que se creó este Post. Ejemplo:

“created_at”: “Wed Oct 10 20:19:24 +0000 2018”
idInt64La representación entera del identificador único para este Post. Este número es mayor a 53 bits y algunos lenguajes de programación pueden tener dificultades/defectos silenciosos al interpretarlo. Es seguro usar un entero con signo de 64 bits para almacenar este identificador. Use id_str para obtener el identificador de forma segura. Consulte IDs de X para más información. Ejemplo:

“id”:1050118621198921728
id_strStringLa representación de cadena del identificador único para este Post. Las implementaciones deben usar esto en lugar del entero grande en id. Ejemplo:

“id_str”:“1050118621198921728”
textStringEl texto UTF-8 real de la actualización de estado. Consulte X-text para obtener detalles sobre qué caracteres se consideran válidos actualmente. Ejemplo:

“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
sourceStringUtilidad utilizada para publicar el Post, como una cadena con formato HTML. Los Posts del sitio web de X tienen un valor de source de web.

Ejemplo:

“source”:“X Web Client”
truncatedBooleanIndica si el valor del parámetro text fue truncado, por ejemplo, como resultado de un retweet que excede el límite original de longitud de texto del Post de 140 caracteres. El texto truncado terminará en puntos suspensivos, como esto ... Dado que X ahora rechaza Posts largos en lugar de truncarlos, la gran mayoría de Posts tendrán esto establecido en false. Tenga en cuenta que aunque los retweets nativos pueden tener su propiedad text de nivel superior acortada, el texto original estará disponible bajo el objeto retweeted_status y el parámetro truncated se establecerá al valor del estado original (en la mayoría de los casos, false). Ejemplo:

“truncated”:true
in_reply_to_status_idInt64Anulable. Si el Post representado es una respuesta, este campo contendrá la representación entera del ID del Post original. Ejemplo:

“in_reply_to_status_id”:1051222721923756032
in_reply_to_status_id_strStringAnulable. Si el Post representado es una respuesta, este campo contendrá la representación de cadena del ID del Post original. Ejemplo:

“in_reply_to_status_id_str”:“1051222721923756032”
in_reply_to_user_idInt64Anulable. Si el Post representado es una respuesta, este campo contendrá la representación entera del ID del autor del Post original. Esto no necesariamente será siempre el usuario mencionado directamente en el Post. Ejemplo:

“in_reply_to_user_id”:6253282
in_reply_to_user_id_strStringAnulable. Si el Post representado es una respuesta, este campo contendrá la representación de cadena del ID del autor del Post original. Esto no necesariamente será siempre el usuario mencionado directamente en el Post. Ejemplo:

“in_reply_to_user_id_str”:“6253282”
in_reply_to_screen_nameStringAnulable. Si el Post representado es una respuesta, este campo contendrá el nombre de pantalla del autor del Post original. Ejemplo:

“in_reply_to_screen_name”:“xapi”
userObjeto de usuarioEl usuario que publicó este Post. Consulte el diccionario de datos de usuario para obtener una lista completa de atributos.

Ejemplo que destaca atributos seleccionados:

{ “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
}
}
coordinatesCoordinatesNullable. Representa la ubicación geográfica de este Post según lo reportado por el usuario o la aplicación cliente. El array interno de coordenadas está formateado como geoJSON (longitud primero, luego latitud). Ejemplo:

“coordinates”:
<br/> “coordinates”:
[
-75.14310264,
40.05701649
],
“type”:“Point”
}
placePlacesNullable Cuando está presente, indica que el Post está asociado (pero no necesariamente originado desde) un lugar. Ejemplo:

“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 solo aparece cuando el Post es un Tweet citado. Este campo contiene el valor entero del ID de Post del Tweet citado. Ejemplo:

“quoted_status_id”:1050119905717055488
quoted_status_id_strStringEste campo solo aparece cuando el Post es un Tweet citado. Esta es la representación en cadena del ID de Post del Tweet citado. Ejemplo:

“quoted_status_id_str”:“1050119905717055488”
is_quote_statusBooleanIndica si este es un Tweet citado. Ejemplo:

“is_quote_status”:false
quoted_statusPostEste campo solo aparece cuando el Post es un Tweet citado. Este atributo contiene el objeto de Post del Post original que fue citado.
retweeted_statusPostLos usuarios pueden amplificar la difusión de Posts creados por otros usuarios mediante Retweet. Los Retweets se pueden distinguir de los Posts típicos por la existencia de un atributo retweeted_status. Este atributo contiene una representación del Post original que fue retweeteado. Tenga en cuenta que los retweets de retweets no muestran representaciones del retweet intermediario, sino solo el Post original. (Los usuarios también pueden deshacer un retweet que crearon eliminando su retweet.)
quote_countIntegerNullable. Indica aproximadamente cuántas veces este Post ha sido citado por usuarios de X. Ejemplo:

“quote_count”:33

Nota: Este objeto solo está disponible con los productos de nivel Premium y Enterprise.
reply_countIntNúmero de veces que se ha respondido a este Post. Ejemplo:

“reply_count”:30

Nota: Este objeto solo está disponible con los productos de nivel Premium y Enterprise.
retweet_countIntNúmero de veces que este Post ha sido retweeteado. Ejemplo:

“retweet_count”:160
favorite_countIntegerNullable. Indica aproximadamente cuántas veces este Post ha recibido like de usuarios de X. Ejemplo:

“favorite_count”:295
entitiesEntitiesEntidades que han sido extraídas del texto del Post. Consulte también Entities in X Objects. Ejemplo:

“entities”:
<br/> “hashtags”:[],
“urls”:[],
“user_mentions”:[],
“media”:[],
“symbols”:[]
“polls”:[]
}
extended_entitiesExtended EntitiesCuando hay entre una y cuatro fotos nativas o un video o un GIF animado en el Post, contiene un array ‘media’ de metadatos. Esto también está disponible en Tweets citados. Consulte también Entities in X Objects. Ejemplo:

“entities”:
<br/> “media”:[]
}
favoritedBooleanNullable. Indica si este Post ha recibido like del usuario autenticado. Ejemplo:

“favorited”:true
retweetedBooleanIndica si este Post ha sido retweeteado por el usuario autenticado. Ejemplo:

“retweeted”:false
possibly_sensitiveBooleanNullable. Este campo indica que el contenido puede ser reconocido como sensible. El autor del Post puede seleccionar dentro de las preferencias de su propia cuenta y elegir “Marcar medios que publiques como que tienen material que puede ser sensible” para que cada Post creado después tenga esta bandera activada.

Esto también puede ser juzgado y etiquetado por un agente interno de soporte de X.

”possibly_sensitive”:false
filter_levelStringIndica el valor máximo del parámetro filter_level que puede usarse y aún transmitir este Post en stream. Así que un valor de medium será transmitido en streams none, low, y medium.

Ejemplo:

“filter_level”: “low”
langStringNullable. Cuando está presente, indica un identificador de idioma BCP 47 correspondiente al idioma detectado automáticamente del texto del Post, o und si no se pudo detectar ningún idioma.

Ejemplo:

“lang”: “en”
edit_historyObjectIdentificadores únicos que indican todas las versiones de un Post. Para Posts sin ediciones, habrá un ID. Para Posts con historial de ediciones, habrá múltiples IDs, organizados en orden ascendente que refleja el orden de las ediciones, con la versión más reciente en la última posición del array.

Los IDs de Post se pueden usar para hidratar y visualizar versiones anteriores de un Post.

Ejemplo:

edit_history”: <br/> “initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
}
edit_controlsObjectCuando está presente, indica durante cuánto tiempo un Post aún es editable y el número de ediciones restantes. Los Posts solo son editables durante los primeros 30 minutos después de la creación y se pueden editar hasta cinco veces.

Los IDs de Post se pueden usar para hidratar y visualizar versiones anteriores de un Post.

Ejemplo:

“edit_controls”: <br/> “editable_until_ms”: 123
“edits_remaining”: 3
}
editableBooleanCuando está presente, indica si un Post era elegible para edición cuando se publicó. Este campo no es dinámico y no cambiará de True a False cuando un Post alcance su límite de tiempo editable o el número máximo de ediciones. Las siguientes características del Post harán que este campo sea false:

_ El Post está promocionado
_ El Post tiene una encuesta
_ El Post es una respuesta que no es un hilo propio
_ El Post es un retweet (ten en cuenta que los Quote Tweets sí son elegibles para edición)
_ El Post es nullcast
_ Post de Comunidad
_ Post de Superfollow
_ Post Colaborativo
matching_rulesArray of Rule ObjectsPresente en productos filtrados como X Search y PowerTrack. Proporciona el id y tag asociados con la regla que coincidió con el Post. Más información sobre reglas de coincidencia aquí. Con PowerTrack, más de una regla puede coincidir con un Post.

Ejemplo:

“matching_rules”: ” [<br/> “tag”: “xapi emojis”,
“id”: 1050118621198921728,
“id_str”: “1050118621198921728”
}]“
Atributos adicionales de Post
Las X API que proporcionan Posts (por ejemplo, el endpoint GET statuses/lookup) pueden incluir estos atributos adicionales de Post:
AttributeTypeDescription
current_user_retweetObjectPerspectival Solo aparece en los métodos que admiten el parámetro include_my_retweet cuando se establece en true. Detalla el ID de Post del propio Retweet del usuario (si existe) de este Post. Ejemplo:

“current_user_retweet”: <br/> “id”: 6253282,
“id_str”: “6253282”
}
scopesObjectUn conjunto de pares clave-valor que indican la entrega contextual prevista del Post que lo contiene. Actualmente utilizado por los Promoted Products de X. Ejemplo:

“scopes”:{“followers”:false}
withheld_copyrightBooleanCuando está presente y establecido en “true”, indica que este contenido se ha retenido debido a una reclamación DMCA. Ejemplo:

“withheld_copyright”: true
withheld_in_countriesArray of StringCuando está presente, indica una lista de códigos de país de dos letras en mayúsculas de los que se retiene este contenido. X admite los siguientes valores que no corresponden a países para este campo:

“XX” - El contenido se retiene en todos los países “XY” - El contenido se retiene debido a una solicitud DMCA.

Ejemplo:

“withheld_in_countries”: [“GR”, “HK”, “MY”]
withheld_scopeStringCuando está presente, indica si el contenido retenido es el “status” o un “user”.

Ejemplo:

“withheld_scope”: “status”
Atributos obsoletos
CampotypeDescripción
geoObjetoObsoleto. Nullable. Use el campo coordinates en su lugar. Este atributo obsoleto tiene sus coordenadas con el formato [lat, long], mientras que el resto de la información de geolocalización de los Post usa el formato [long, lat].

Objetos de Post anidados

En varios casos, un Objeto de Post incluirá otros objetos anidados. Si trabaja con objetos anidados, esa carga útil JSON contendrá múltiples Objetos de Post, y cada Objeto de Post puede incluir sus propios objetos. El objeto de nivel raíz contendrá información sobre el tipo de acción realizada, es decir, si es un Retweet o un Quote Tweet, y también puede contener un objeto que describa el Post “original” que se está compartiendo. Los Posts extendidos incluirán un objeto extendido anidado que supera los 140 caracteres, mecanismo que se utilizó para evitar cambios incompatibles cuando se realizó la actualización en 2017. Cada diccionario de objeto anidado se describe a continuación. Retweets Los Retweets siempre contienen dos Objetos de Post. El Post “original” que se está haciendo Retweet se proporciona en un objeto “retweeted_status”. El objeto de nivel raíz encapsula el propio Retweet, e incluye un Objeto de usuario para la cuenta que realiza la acción de Retweet y la hora del Retweet. Hacer Retweet es una acción para compartir un Post con tus seguidores, y no se puede agregar ningún contenido nuevo. Además, no se puede proporcionar una ubicación (nueva) con un Retweet. Aunque el Post “original” pueda tener etiqueta geográfica, los objetos “geo” y “place” del Retweet siempre serán null. Incluso antes de la introducción de los Posts extendidos, el objeto “entities” de nivel raíz, en algunos casos, se truncaba y quedaba incompleto debido a que la cadena “RT @username ” se añadía al mensaje del Post que se estaba haciendo Retweet. Tenga en cuenta que, si un Retweet recibe un Retweet, el “retweet_status” seguirá apuntando al Post original, lo que significa que el Retweet intermedio no se incluye. Se observa un comportamiento similar al usar x.com para “mostrar” un Retweet. Si copia el ID de Post único asignado a la “acción” de Retweet, se muestra el Post original. A continuación se muestra un ejemplo de la estructura de un Retweet. Nuevamente, al analizar Retweets, es clave analizar el objeto “retweeted_status” para obtener el mensaje completo del Post (original) y los metadatos de la entidad.
{
	"tweet": {
		"text": "RT @author mensaje original",
		"user": {
			"screen_name": "Retweeter"
		},
		"retweeted_status": {
			"text": "mensaje original",
			"user": {
				"screen_name": "OriginalTweeter"
			},
			"place": {},
			"entities": {},
			"extended_entities": {}
		}
	},
	"entities": {},
	"extended_entities": {}
}
Tweets citados
Los Tweets citados son muy similares a los Retweets, salvo que incluyen un nuevo mensaje de Post. Estos nuevos mensajes pueden contener su propio conjunto de hashtags, enlaces y otros metadatos de “entities”. Los Tweets citados también pueden incluir información de ubicación compartida por el usuario que publica el Tweet citado, junto con medios como GIF, videos y fotos. Los Tweets citados contendrán al menos dos Objeto de Post y, en algunos casos, tres. El Post que se cita, que a su vez puede ser un Tweet citado, se proporciona en un objeto “quoted_status”. El objeto de nivel raíz encapsula el propio Tweet citado, e incluye un objeto de usuario de la cuenta que realiza la acción de compartir y la hora del Tweet citado. Tenga en cuenta que los Tweets citados ahora pueden tener fotos, GIF o videos añadidos mediante la interfaz de usuario ‘Post’. Cuando se incluyen enlaces a medios alojados externamente en el mensaje del Tweet citado, el “entities.urls” de nivel raíz los describirá. Los medios adjuntos a los Tweets citados aparecerán en los metadatos “extended_entities” de nivel raíz. Cuando se lanzaron por primera vez los Tweets citados, se añadía un enlace acortado (URL de t.co) al mensaje del Post ‘original’ y se proporcionaba en el campo “text” de nivel raíz. Además, los metadatos de esa URL de t.co se incluían en el arreglo ‘entities.urls’ de nivel raíz. En mayo de 2018, cambiamos esto para que la URL acortada de t.co al Tweet citado no se incluya en el campo “text” de nivel raíz. En segundo lugar, los metadatos del Tweet citado no se incluirán en los metadatos “entities.urls”. En su lugar, los metadatos de URL del Tweet citado estarán en un nuevo objeto “quoted_status_permalink” en el nivel raíz (o nivel superior), es decir, al mismo nivel que el objeto “quoted_status”. A continuación se muestra un ejemplo de la estructura de un Tweet citado usando este formato original.
{
	"created_at": "Tue Feb 14 19:30:06 +0000 2017",
	"id_str": "831586333415976960",
	"text": "¡Definitivamente digno de citar! 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": "Esta es una prueba del sistema de tuiteo \ud83d\ude0e para actualizar #supportdocs @twitterboulder aquí: 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": "Prueba de cita 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 extendidos
El JSON que describe los Posts extendidos se introdujo cuando se lanzaron los Posts de 280 caracteres en noviembre de 2017. El JSON de Post se amplió para encapsular estos mensajes más largos, sin afectar a los miles de Apps que analizan estos objetos fundamentales de X. Para mantener la compatibilidad total con versiones anteriores, se conservaron el campo original de 140 caracteres ‘text’ y los objetos de entidad derivados de este. En el caso de Posts de más de 140 caracteres, este campo ‘text’ en el nivel raíz se truncaría y, por lo tanto, quedaría incompleto. Dado que los objetos ‘entities’ de nivel raíz contienen arreglos de metadatos clave extraídos del mensaje ‘text’, como hashtags y enlaces incluidos, estas colecciones quedarían incompletas. Por ejemplo, si un mensaje de Post tuviera 200 caracteres, con un hashtag incluido al final, el arreglo heredado ‘entities.hashtags’ de nivel raíz no lo incluiría. Se introdujo un nuevo campo ‘extended_tweet’ para almacenar los mensajes de Post más largos y los metadatos completos de entidades. El objeto “extended_tweet” proporciona el campo “full_text” que contiene el mensaje de Post completo y no truncado cuando supera los 140 caracteres. El objeto “extended_tweet” también contiene un objeto “entities” con arreglos completos de hashtags, enlaces, menciones, etc. Los Posts extendidos se identifican con un booleano “truncated” a nivel raíz. Cuando su valor es true (“truncated”: true), se deben analizar los campos “extended_tweet” en lugar de los campos de nivel raíz. Observa en el ejemplo JSON a continuación que el campo “text” de nivel raíz está truncado y el arreglo “entities.hashtags” de nivel raíz está vacío, aunque el mensaje del Post incluye tres hashtags. Dado que se trata de un Post extendido, el campo “truncated” se establece en true y el objeto “extended_tweet” proporciona metadatos completos del Post en “full_text” y “entities”.
{
	"created_at": "Thu May 10 17:41:57 +0000 2018",
	"id_str": "994633657141813248",
	"text": "Simplemente otro Tweet Extendido con más de 140 caracteres, generado como un ejemplo de documentación, que muestra que [\"tru… https://t.co/U7Se4NM7Eu",
	"display_text_range": [0, 140],
	"truncated": true,
	"user": {
		"id_str": "944480690",
		"screen_name": "FloodSocial"
	},
	"extended_tweet": {
		"full_text": "Simplemente otro Tweet Extendido con más de 140 caracteres, generado como un ejemplo de documentación, que muestra que [\"truncated\": true] y la presencia de un objeto \"extended_tweet\" con texto completo y \"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 usuario nativo enriquecido

El objeto de usuario contiene metadatos de la cuenta de usuario de X que describen al usuario de X referenciado. 

Diccionario de datos del usuario

AtributoTipoDescripción
idInt64La representación entera del identificador único para este Usuario. Este número es mayor a 53 bits y algunos lenguajes de programación pueden tener dificultades/defectos silenciosos al interpretarlo. Usar un entero con signo de 64 bits para almacenar este identificador es seguro. Usa id_str para obtener el identificador de forma segura. Consulta X IDs para más información. Ejemplo:

“id”: 6253282
id_strStringLa representación de cadena del identificador único para este Usuario. Las implementaciones deben usar esto en lugar del entero grande, posiblemente no consumible en id. Ejemplo:

“id_str”: “6253282”
nameStringEl nombre del usuario, tal como lo han definido. No necesariamente el nombre de una persona. Típicamente limitado a 50 caracteres, pero sujeto a cambios. Ejemplo:

“name”: “API”
screen_nameStringEl nombre de pantalla, identificador o alias con el que este usuario se identifica. Los screen_names son únicos pero sujetos a cambios. Usa id_str como identificador de usuario siempre que sea posible. Típicamente un máximo de 15 caracteres de longitud, pero algunas cuentas históricas pueden existir con nombres más largos. Ejemplo:

“screen_name”: “api”
locationStringAnulable. La ubicación definida por el usuario para el perfil de esta cuenta. No necesariamente una ubicación, ni interpretable por máquina. Este campo ocasionalmente será interpretado de forma difusa por el servicio de Búsqueda. Ejemplo:

“location”: “San Francisco, CA”
derivedArrays of Enrichment ObjectsSolo APIs Enterprise. Colección de metadatos de Enriquecimiento derivados para el usuario. Proporciona los metadatos de Enriquecimiento Profile Geo. Consulta la documentación referenciada para más información, incluyendo diccionarios de datos JSON. Ejemplo:

“derived”:“locations”: [“country”:“United States”,“country_code”:“US”,“locality”:“Denver”]
urlStringAnulable. Una URL proporcionada por el usuario en asociación con su perfil. Ejemplo:

“url”: “https://developer.x.com
descriptionStringAnulable. La cadena UTF-8 definida por el usuario que describe su cuenta. Ejemplo:

“description”: “The Real X API.”
protectedBooleanCuando es verdadero, indica que este usuario ha elegido proteger sus Posts. Consulta Acerca de Posts Públicos y Protegidos. Ejemplo:

“protected”: true
verifiedBooleanCuando es verdadero, indica que el usuario tiene una cuenta verificada. Consulta Cuentas Verificadas. Ejemplo:

“verified”: false
followers_countIntEl número de seguidores que esta cuenta tiene actualmente. Bajo ciertas condiciones de estrés, este campo indicará temporalmente “0”. Ejemplo:

“followers_count”: 21
friends_countIntEl número de usuarios que esta cuenta está siguiendo (también conocidos como sus “seguidos”). Bajo ciertas condiciones de estrés, este campo indicará temporalmente “0”. Ejemplo:

“friends_count”: 32
listed_countIntEl número de listas públicas de las que este usuario es miembro. Ejemplo:

“listed_count”: 9274
favourites_countIntEl número de Posts que este usuario ha marcado como “me gusta” en la vida útil de la cuenta. Se usa la ortografía británica en el nombre del campo por razones históricas. Ejemplo:

“favourites_count”: 13
statuses_countIntEl número de Posts (incluyendo retweets) emitidos por el usuario. Ejemplo:

“statuses_count”: 42
created_atStringLa fecha y hora UTC en que la cuenta de usuario fue creada en X. Ejemplo:

“created_at”: “Mon Nov 29 21:18:15 +0000 2010”
profile_banner_urlStringLa URL basada en HTTPS que apunta a la representación web estándar del banner de perfil cargado por el usuario. Al agregar un elemento de ruta final a la URL, es posible obtener diferentes tamaños de imagen optimizados para pantallas específicas. Para variantes de tamaño, consulta Imágenes de Perfil de Usuario y Banners.

Ejemplo:

“profile_banner_url”: “https://si0.twimg.com/profile&#95;banners/819797/1348102824
profile_image_url_httpsStringUna URL basada en HTTPS que apunta a la imagen de perfil del usuario. Ejemplo:

“profile_image_url_https”:
https://abs.twimg.com/sticky/default&#95;profile&#95;images/default&#95;profile&#95;normal.png
default_profileBooleanCuando es verdadero, indica que el usuario no ha alterado el tema o fondo de su perfil de usuario. Ejemplo:

“default_profile”: false
default_profile_imageBooleanCuando es verdadero, indica que el usuario no ha cargado su propia imagen de perfil y se usa una imagen predeterminada en su lugar. Ejemplo:

“default_profile_image”: false

Atributos en desuso (no compatibles)

FieldTypeDescription
utc_offsetnullEl valor se establecerá en null. Sigue disponible mediante GET account/settings
time_zonenullEl valor se establecerá en null. Sigue disponible mediante GET account/settings como tzinfo_name
langnullEl valor se establecerá en null. Sigue disponible mediante GET account/settings como language
geo_enablednullEl valor se establecerá en null. Sigue disponible mediante GET account/settings. Este campo debe ser true para que el usuario actual pueda adjuntar datos geográficos al usar POST statuses / update
followingnullEl valor se establecerá en null. Sigue disponible mediante GET friendships/lookup
follow_request_sentnullEl valor se establecerá en null. Sigue disponible mediante GET friendships/lookup
has_extended_profilenullEn desuso. El valor se establecerá en null.
notificationsnullEn desuso. El valor se establecerá en null.
profile_locationnullEn desuso. El valor se establecerá en null.
contributors_enablednullEn desuso. El valor se establecerá en null.
profile_image_urlnullEn desuso. El valor se establecerá en null. NOTA: Las imágenes de perfil solo están disponibles mediante el campo profile_image_url_https.
profile_background_colornullEn desuso. El valor se establecerá en null.
profile_background_image_urlnullEn desuso. El valor se establecerá en null.
profile_background_image_url_httpsnullEn desuso. El valor se establecerá en null.
profile_background_tilenullEn desuso. El valor se establecerá en null.
profile_link_colornullEn desuso. El valor se establecerá en null.
profile_sidebar_border_colornullEn desuso. El valor se establecerá en null.
profile_sidebar_fill_colornullEn desuso. El valor se establecerá en null.
profile_text_colornullEn desuso. El valor se establecerá en null.
profile_use_background_imagenullEn desuso. El valor se establecerá en null.
is_translatornullEn desuso. El valor se establecerá en null.
is_translation_enablednullEn desuso. El valor se establecerá en null.
translator_typenullEn desuso. El valor se establecerá en null.

Ejemplo de objeto de usuario:

"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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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 geográficos nativos enriquecidos

Los Posts pueden asociarse a una ubicación, generando un Post “con etiqueta geográfica”. Las ubicaciones de los Posts pueden asignarse usando la interfaz de usuario de X o al publicar un Post mediante la API. Las ubicaciones de los Posts pueden ser un “punto” exacto o un X Place con una “caja delimitadora” que describe un área más amplia, desde un recinto hasta una región completa. Hay tres objetos JSON de “nivel raíz” que se usan para describir la ubicación asociada a un Post: place, geo y coordinates. Además, el formato nativo enriquecido incluye la ubicación derivada del enriquecimiento de perfil geográfico dentro del objeto de usuario. El objeto place siempre está presente cuando un Post está etiquetado geográficamente con un lugar. Los Places son ubicaciones específicas y con nombre, con coordenadas geográficas correspondientes. Cuando los usuarios deciden asignar una ubicación a su Post, se les presenta una lista de X Places candidatos. Al usar la API para publicar, se puede adjuntar un X Place especificando un place_id al publicar. Los Posts asociados con Places no necesariamente se originan en esa ubicación, sino que también pueden ser sobre esa ubicación. Los objetos geo y coordinates solo están presentes (no nulos) cuando al Post se le asigna una ubicación exacta. Si se proporciona una ubicación exacta, el objeto coordinates entregará un arreglo [long, lat] con las coordenadas geográficas y se asignará un X Place que corresponda a esa ubicación.

Diccionario de datos de Place

FieldTypeDescription
idStringID que representa este lugar. Tenga en cuenta que se representa como una cadena, no como un entero. Ejemplo:

“id”:“01a9a39529b27f36”
urlStringURL que indica la ubicación de metadatos adicionales de Place para este lugar. Ejemplo:

“url”:“https://api.x.com/1.1/geo/id/01a9a39529b27f36.json
place_typeStringTipo de ubicación representada por este lugar. Ejemplo:

“place_type”:“city”
nameStringRepresentación breve y legible por humanos del nombre del lugar. Ejemplo:

“name”:“Manhattan”
full_nameStringRepresentación completa y legible por humanos del nombre del lugar. Ejemplo:

“full_name”:“Manhattan, NY”
country_codeStringCódigo de país abreviado que representa el país que contiene este lugar. Ejemplo:

“country_code”:“US”
countryStringNombre del país que contiene este lugar. Ejemplo:

“country”:“United States”
bounding_boxObjectUn cuadro delimitador de coordenadas que delimita este lugar. Ejemplo:


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

attributesObjectAl usar PowerTrack, las APIs de búsqueda de 30 días y de archivo completo, y los streams de volumen, este hash es null. Ejemplo:

“attributes”:

Cuadro delimitador

CampoTipoDescripción
coordinatesArray of Array of Array of FloatUna serie de puntos de longitud y latitud que definen un cuadro que contendrá la entidad Place a la que está asociado este cuadro delimitador. Cada punto es un array con el formato [longitude, latitude]. Los puntos se agrupan en un array por cada cuadro delimitador. Los arrays de cuadros delimitadores se encapsulan en un array adicional para ser compatibles con la notación de polígono. Ejemplo:


“coordinates”: [
[
[
-74.026675,
40.683935
],
[
-74.026675,
40.877483
],
[
-73.910408,
40.877483
],
[
-73.910408,
40.3935
]
]
]
typeStringEl tipo de data codificada en la propiedad coordinates. Será “Polygon” para cuadros delimitadores y “Point” para Posts con coordenadas exactas. Ejemplo:

“type”:“Polygon”

Diccionario de datos del objeto Geo

CampoTipoDescripción
coordinatesColección de FloatLa longitud y la latitud de la ubicación del Post, como una colección con el formato [latitude, longitude]. Ejemplo:

**  “geo”:

“type”:** “Point”,

**    “coordinates”: [

54.27784
,

-0.41068

    ]

  **
typeStringEl tipo de datos codificados en la propiedad coordinates. En los campos coordinates de un Post, este valor será “Point”. Ejemplo:

“type”: “Point”
Diccionario de datos del objeto Coordinates
CampoTipoDescripción
coordinatesColección de FloatLa longitud y la latitud de la ubicación del Post, como una colección con el formato [longitude, latitude]. Ejemplo:

**  “coordinates”:

“type”:** “Point”,

**    “coordinates”: [

-0.41068
,

54.27784

    ]

  **
typeStringEl tipo de datos codificados en la propiedad coordinates. En los campos coordinates de un Post, este valor será “Point”. Ejemplo:

“type”: “Point”

Ubicaciones derivadas

CampoTipoDescripción
derivedobjeto de ubicacionesUbicación derivada del enriquecimiento geográfico del 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”

**         

       

      ]

    **

Ejemplos:

{
  "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": {

    }
  }
}
Diccionario de data: Enterprise

Entidades de X  

Ir a sección en esta página Introducción Objeto entities   - Objeto hashtag   - Objeto media   - Objeto tamaño de media   - Objeto URL   - Objeto mención de usuario   - Objeto símbolo   - Objeto encuesta Detalles de Retweet y Quote Tweet Entidades en objetos de usuario Entidades en Mensajes Directos Siguientes pasos

Introducción

Las entidades proporcionan metadatos e información contextual adicional sobre el contenido publicado en X. La sección entities ofrece arreglos con elementos comunes incluidos en los Posts: hashtags, menciones de usuarios, enlaces, símbolos bursátiles (tickers), encuestas de X y contenido multimedia adjunto. Estos arreglos son útiles para los desarrolladores al ingerir Posts, ya que X básicamente ha preprocesado (o preparseado) el cuerpo del texto. En lugar de tener que buscar y localizar explícitamente estas entidades en el cuerpo del Post, su parser puede ir directamente a esta sección JSON y allí estarán. Además de facilitar el parseo, la sección entities también aporta metadatos útiles de valor añadido. Por ejemplo, si utiliza el Enhanced URLs enrichment, los metadatos de URL incluyen direcciones completamente expandidas, así como los títulos y descripciones del sitio web asociados. Otro ejemplo: cuando hay menciones de usuarios, los metadatos de entities incluyen el id numérico del usuario, lo cual es útil al realizar solicitudes a muchas X APIs. Cada payload JSON de un Post incluye una sección entities, con el conjunto mínimo de atributos hashtags, urls, user_mentions y symbols, incluso si ninguna de esas entidades forma parte del mensaje del Post. Por ejemplo, si examina el JSON de un Post con un cuerpo de “Hello World!” y sin contenido multimedia adjunto, el JSON del Post incluirá el siguiente contenido con arreglos de entidades que contienen cero elementos:
"entities": {
        "hashtags": [
        ],
        "urls": [
        ],
        "user_mentions": [
        ],
        "symbols": [
        ]
      }
Notas:
  • las entidades media y polls solo aparecerán cuando ese tipo de contenido forme parte del Post.
  • si trabajas con media nativa (fotos, videos o GIF), el objeto Extended Entities es la opción recomendada.

Objeto Entities

Las secciones entities y extended_entities están compuestas por arreglos de objetos de entidad. A continuación, encontrará descripciones de cada uno de estos objetos de entidad, incluidos diccionarios de datos que describen los nombres de atributos del objeto, los tipos y una breve descripción. También indicaremos qué PowerTrack Operators coinciden con estos atributos e incluiremos algunos payloads JSON de ejemplo. Una colección de entidades comunes que se encuentran en los Posts, incluidas las etiquetas (hashtags), los enlaces y las menciones de usuario. Este objeto entities sí incluye un atributo media, pero su implementación en la sección entities solo es completamente precisa para Posts con una sola foto. Para todos los Posts con más de una foto, un video o un GIF animado, se remite al lector a la sección extended_entities.

Diccionario de datos de entidades

El objeto entities es un contenedor de matrices (arrays) de otros subobjetos de entidad. Tras ilustrar la estructura de entities, se proporcionarán diccionarios de datos para estos subobjetos y los operadores que los relacionan.
CampoTipoDescripción
hashtagsArray de Objetos HashtagRepresenta hashtags que han sido analizados del texto del Post. Ejemplo:


“hashtags”: [

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

]
mediaArray de Objetos MediaRepresenta elementos multimedia cargados con el Post. Ejemplo:


“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 incluidas en el texto de un Post.

Ejemplo (sin enriquecimiento de URLs mejoradas habilitado):


“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

]


Ejemplo (con enriquecimiento de URLs mejoradas habilitado):

“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 otros usuarios de X mencionados en el texto del Post. Ejemplo:


“user_mentions”: [

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

]
symbolsArray de Objetos SymbolRepresenta símbolos, es decir $cashtags, incluidos en el texto del Post. Ejemplo:


“symbols”: [

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

]
pollsArray de Objetos PollRepresenta encuestas de X incluidas en el Post. Ejemplo:

“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  

La sección entities contendrá un array hashtags con un objeto por cada hashtag incluido en el cuerpo del Post, e incluirá un array vacío si no hay hashtags. El operador # de PowerTrack se utiliza para hacer coincidencia sobre el atributo text. El operador has:hashtags hará coincidencia si hay al menos un elemento en el array.
FieldTypeDescripción
indicesArray of IntUn array de enteros que indica los desplazamientos dentro del texto del Post donde comienza y termina el hashtag. El primer entero representa la ubicación del carácter # en la cadena de texto del Post. El segundo entero representa la ubicación del primer carácter después del hashtag. Por lo tanto, la diferencia entre ambos números será la longitud del nombre del hashtag más uno (por el carácter ‘#’). Ejemplo:

“indices”:[32,38]
textStringNombre del hashtag, sin el carácter inicial ‘#’. Ejemplo:

“text”:“nodejs”

Objeto multimedia  

La sección entities contendrá un arreglo media con un único objeto multimedia si se ha “adjuntado” algún objeto multimedia al Post. Si no se ha adjuntado contenido multimedia nativo, no habrá arreglo media en entities. Por las siguientes razones, se debe usar la sección extended_entities para procesar el contenido multimedia nativo del Post:
  • El type de los medios siempre indicará “photo”, incluso cuando se adjunten un video o un GIF al Post.
  • Aunque se pueden adjuntar hasta cuatro fotos, solo la primera se listará en la sección entities.
El operador has:media hará coincidencia si este arreglo tiene contenido.
CampoTipoDescripción
display_urlStringURL del contenido multimedia para mostrar a los clientes. Ejemplo:

“display_url”:“pic.x.com/rJC5Pxsu”
expanded_urlStringUna versión expandida de display_url. Enlaza a la página de visualización del contenido multimedia. Ejemplo:

“expanded_url”: “http://x.com/yunorno/status/114080493036773378/photo/1
idInt64ID del contenido multimedia expresado como un entero de 64 bits. Ejemplo:

“id”:114080493040967680
id_strStringID del contenido multimedia expresado como una cadena. Ejemplo:

“id_str”:“114080493040967680”
indicesArray of IntUn array de enteros que indica las posiciones dentro del texto del Post donde la URL comienza y termina. El primer entero representa la ubicación del primer carácter de la URL en el texto del Post. El segundo entero representa la ubicación del primer carácter que no es URL que aparece después de la URL (o el final de la cadena si la URL es la última parte del texto del Post). Ejemplo:

“indices”:[15,35]
media_urlStringUna URL http:// que apunta directamente al archivo multimedia subido. Ejemplo:

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

Para contenido multimedia en Mensajes Directos, media_url es la misma URL https que media_url_https y debe accederse firmando una solicitud con el access token del usuario usando OAuth 1.0a.

No es posible acceder a las imágenes a través de una sesión autenticada de x.com. Visite esta página para aprender cómo adaptarse a estos cambios recientes.

No puede incrustar directamente estas imágenes en una página web.

Consulte Formato de URL de contenido multimedia fotográfico para saber cómo formatear la URL de una foto, como media_url_https, basándose en los sizes disponibles.
media_url_httpsStringUna URL https:// que apunta directamente al archivo multimedia subido, para incrustar en páginas https. Ejemplo:

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

Para contenido multimedia en Mensajes Directos, media_url_https debe accederse firmando una solicitud con el access token del usuario usando OAuth 1.0a.

No es posible acceder a las imágenes a través de una sesión autenticada de x.com. Visite esta página para aprender cómo adaptarse a estos cambios recientes.

No puede incrustar directamente estas imágenes en una página web.

Consulte Formato de URL de contenido multimedia fotográfico para saber cómo formatear la URL de una foto, como media_url_https, basándose en los sizes disponibles.
sizesSize ObjectUn objeto que muestra los tamaños disponibles para el archivo multimedia. Ejemplo:


“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 Formato de URL de contenido multimedia fotográfico para saber cómo formatear la URL de una foto, como media_url_https, basándose en los sizes disponibles.
source_status_idInt64Nullable. Para Posts que contienen contenido multimedia que originalmente estaba asociado con un Post diferente, este ID apunta al Post original. Ejemplo:

“source_status_id”: 205282515685081088
source_status_id_strInt64Nullable. Para Posts que contienen contenido multimedia que originalmente estaba asociado con un Post diferente, este ID basado en cadena apunta al Post original. Ejemplo:

“source_status_id_str”: “205282515685081088”
typeStringTipo de contenido multimedia subido. Los tipos posibles incluyen photo, video y animated_gif. Ejemplo:

“type”:“photo”
urlStringURL encapsulada para el enlace del contenido multimedia. Esto corresponde con la URL incrustada directamente en el texto sin procesar del Post, y los valores para el parámetro indices. Ejemplo:

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

Objetos de tamaño de medios

Todos los Posts con contenido multimedia nativo (fotos, videos y GIF) incluirán un conjunto de tamaños “thumb”, “small”, “medium” y “large” con altura y anchura en píxeles. Para las fotos y las URL de imágenes de vista previa, Formato de URL de contenido multimedia de foto especifica cómo construir distintas URL para cargar contenido multimedia de fotos en diferentes tamaños.

Objeto Sizes 

FieldTypeDescription
thumbSize ObjectInformación sobre una versión en miniatura del medio. Ejemplo:

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

Las fotos en tamaño miniatura se limitarán a rellenar (fill) un límite de 150x150 y se recortarán.
largeSize ObjectInformación sobre una versión grande del medio. Ejemplo:

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

Las fotos en tamaño pequeño se limitarán a ajustarse (fit) dentro de un límite de 680x680.
mediumSize ObjectInformación sobre una versión mediana del medio. Ejemplo:

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

Las fotos en tamaño mediano se limitarán a ajustarse (fit) dentro de un límite de 1200x1200.
smallSize ObjectInformación sobre una versión pequeña del medio. Ejemplo:

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

Las fotos en tamaño grande se limitarán a ajustarse (fit) dentro de un límite de 2048x2048.

Objeto de tamaño

CampoTipoDescripción
wIntAncho en píxeles de este tamaño. Ejemplo:

“w”:150
hIntAltura en píxeles de este tamaño. Ejemplo:

“h”:150
resizeStringMétodo de redimensionamiento utilizado para obtener este tamaño. Un valor de fit indica que el medio se redimensionó para ajustarse a una dimensión, manteniendo su relación de aspecto nativa. Un valor de crop indica que el medio se recortó para ajustarse a una resolución específica. Ejemplo:

“resize”:“crop”

Formato de URL de medios de fotos

Los medios de fotos en X se pueden cargar en distintos tamaños. Lo ideal es cargar la imagen más pequeña que sea lo suficientemente grande para ajustarse al viewport de imagen específico. Para cargar diferentes tamaños, se deben combinar el objeto Size y media_url (o media_url_https) en un formato concreto. Usaremos el objeto de ejemplo de la entidad de medios ya proporcionado para construir una URL de medios de fotos. Los media_url o media_url_https se pueden cargar por sí solos, lo que hará que, de forma predeterminada, se cargue la variante medium. No obstante, es preferible proporcionar una URL de medios de fotos completamente formateada siempre que sea posible. Hay tres partes en una URL de medios de fotos:
Base URLLa URL base es la URL de medios sin la extensión de archivo.

Por ejemplo:

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

La URL base sería:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq
FormatEl formato es el tipo de imagen en el que está codificada la foto. Los formatos posibles son jpg o png, y aparecen como la extensión de la URL de medios.

Por ejemplo:

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

El formato sería: jpg
NameEl name es el nombre del campo del tamaño que se va a cargar.

Por ejemplo:


 “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
   }
 }
}

El name al cargar la foto de tamaño grande sería: large
Tomamos estas tres partes (URL base, formato y name) y las combinamos para formar la URL de medios de fotos que se va a cargar. Hay 2 formatos para cargar imágenes de esta manera, legacy y modern. Todas las cargas de imágenes deben dejar de usar el formato legacy y usar el formato modern. Usar el formato modern dará como resultado una mejor tasa de aciertos en la CDN para el solicitante, mejorando así las latencias de carga al ser menos probable que haya que generar y cargar el medio desde el centro de datos.
Legacy formatEl formato heredado está obsoleto. Todas las cargas de fotos deben migrar al formato moderno.

<base_url>.<format>:<name>

Por ejemplo:

https://pbs.twimg.com/media/DOhM30VVwAEpIHq.jpg:large
Modern formatEl formato moderno para cargar fotos se estableció en X en 2015 y es el estándar de facto desde 2017. Todas las cargas de fotos deben pasar a este formato.

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

Por ejemplo:

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


Nota: los elementos de la cadena query de la URL del medio de foto están en orden alfabético. Si la carga de medios añadiera elementos de query adicionales, sería necesario mantener el orden alfabético. Por ejemplo, si existiera el hipotético nuevo elemento de query llamado preferred_format, iría después de format y name en la cadena de query.

Objeto URL 

La sección entities contendrá un arreglo urls con un objeto por cada enlace incluido en el cuerpo del Post, y un arreglo vacío si no hay enlaces. El operador has:links coincide si hay al menos un elemento en el arreglo. El operador url: se usa para hacer coincidir el atributo expanded_url. Si usas el Expanded URL enrichment, el operador url: se usa para hacer coincidir el atributo unwound.url (URL completamente desplegada). Si usas el Enhanced URL enrichment, los operadores url_title: y url_description: se usan para hacer coincidir los atributos unwound.title y unwound.description.
FieldTypeDescription
display_urlStringURL pegada/escrita en el Post. Ejemplo:

“display_url”:“bit.ly/2so49n2”
expanded_urlStringVersión expandida de display_url. Ejemplo:

“expanded_url”:“http://bit.ly/2so49n2
indicesArray of IntArreglo de enteros que representan los desplazamientos dentro del texto del Post donde comienza y termina la URL. El primer entero representa la ubicación del primer carácter de la URL en el texto del Post. El segundo entero representa la ubicación del primer carácter que no es parte de la URL después del final de esta. Ejemplo:

“indices”:[30,53]
urlStringURL envuelta, correspondiente al valor incrustado directamente en el texto sin procesar del Post y a los valores del parámetro indices. Ejemplo:

“url”:“https://t.co/yzocNFvJuL
Si usas las mejoras Expanded y/o Enhanced URL, los siguientes metadatos están disponibles en el atributo unwound:
FieldTypeDescription
urlStringLa versión completamente desplegada del enlace incluido en el Post. Ejemplo:

“url”:“https://blog.x.com/en&#95;us/topics/insights/2016/using-twitter-as-a-go-to-communication-channel-during-severe-weather-events.html
statusIntEstado HTTP final del proceso de despliegue, donde ‘200’ indica éxito. Ejemplo:

200
titleStringTítulo HTML del enlace. Ejemplo:

“title”:“Using X as a ‘go-to’ communication channel during severe weather”
descriptionStringDescripción HTML del enlace. Ejemplo:

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

Objeto de mención de usuario  

La sección entities contendrá una matriz user_mentions con un objeto por cada mención de usuario incluida en el cuerpo del Post, y contendrá una matriz vacía si no hay ninguna mención de usuario. El operador @ de PowerTrack se utiliza para hacer coincidencia con el atributo screen_name. El operador has:mentions coincidirá si hay al menos un elemento en la matriz.
CampoTipoDescripción
idInt64ID del usuario mencionado, como entero. Ejemplo:

“id”:6253282
id_strStringID del usuario mencionado, como cadena. Ejemplo:

“id_str”:“6253282”
indicesArray of IntUna matriz de enteros que representan los desplazamientos dentro del texto del Post donde comienza y termina la referencia al usuario. El primer entero representa la ubicación del carácter ‘@’ de la mención de usuario. El segundo entero representa la ubicación del primer carácter que no forma parte del screen_name después de la mención de usuario. Ejemplo:

“indices”:[4,15]
nameStringNombre para mostrar del usuario mencionado. Ejemplo:

“name”:“API”
screen_nameStringNombre de usuario (screen_name) del usuario mencionado. Ejemplo:

“screen_name”:“api”

Objeto de símbolo  

La sección entities contendrá un arreglo symbols con un objeto por cada $cashtag incluido en el cuerpo del Post, y un arreglo vacío si no hay ningún símbolo. El operador $ de PowerTrack se usa para hacer coincidencia en el atributo text. El operador has:symbols hará coincidencia si hay al menos un elemento en el arreglo.
CampotypeDescripción
indicesArray of IntUn arreglo de enteros que indica los desplazamientos dentro del texto del Post donde comienza y termina el símbolo/cashtag. El primer entero representa la ubicación del carácter enlacadenadetextodelPost.Elsegundoenterorepresentalaubicacioˊndelprimercaraˊcterdespueˊsdelcashtag.Porlotanto,ladiferenciaentrelosdosnuˊmerosseraˊlalongituddelnombredelcashtagmaˊsuno(porelcaraˊcter en la cadena de texto del Post. El segundo entero representa la ubicación del primer carácter después del cashtag. Por lo tanto, la diferencia entre los dos números será la longitud del nombre del cashtag más uno (por el carácter ‘’). Ejemplo:

“indices”:[12,17]
textStringNombre del cashtag, sin el carácter inicial ‘$’. Ejemplo:

“text”:“twtr”

Objeto de encuesta

La sección entities contendrá una matriz polls con un único objeto poll si el Post incluye una encuesta. Si no se incluye ninguna encuesta, no habrá una matriz polls en la sección entities. Tenga en cuenta que estos metadatos de encuesta solo están disponibles con las siguientes APIs de Enterprise:
FieldTypeDescription
optionsArray of Option ObjectUna matriz de opciones, cada una con una posición en la encuesta y el texto para esa posición. Ejemplo:

“options”: [

“position”: 1,
“text”: “I read documentation once.”
}
]
}
end_datetimeStringMarca de tiempo (UTC) de cuándo finaliza la encuesta. Ejemplo:

“end_datetime”: “Thu May 25 22:20:27 +0000 2017”
duration_minutesStringDuración de la encuesta en minutos. Ejemplo:

“duration_minutes”: 60

Detalles de Retweet y Quote Tweet

Desde la perspectiva de la X API, los Retweets y los Quote Tweets son tipos especiales de Posts que contienen el Post original como un objeto incrustado. Por lo tanto, los objetos de Retweet y Quote Tweet son padres de un Post «original» hijo (y, por ende, duplican el tamaño). Los Retweets tienen un objeto de nivel superior “retweeted_status”, y los Quote Tweets tienen un objeto “quoted_status”. Por coherencia, estos objetos de nivel superior de Retweet y Quote Tweet también tienen una propiedad text y entities asociadas. Sin embargo, las entities en el nivel superior pueden diferir de las entities proporcionadas por las entities «originales» incrustadas. En el caso de los Retweets, se antepone texto nuevo al cuerpo del Post original. Para los Posts citados, se agrega texto nuevo al final del cuerpo del Post. En general, la mejor práctica es recuperar el texto, las entities, el autor original y la fecha del Post original en retweeted_status siempre que exista. Una excepción es obtener entities de X que formen parte del añadido de la cita. Consulta a continuación para más detalles y consejos.

Retweets

Un detalle importante con los Retweets es que no se pueden agregar entidades de X adicionales al Post. Los usuarios no pueden añadir hashtags, URL u otros detalles cuando hacen Retweet. Sin embargo, el atributo de texto del Retweet (de nivel superior) se compone del texto del Post original con “RT @username: ” antepuesto.   En algunos casos, especialmente con cuentas con nombres de usuario largos, la combinación de estos caracteres nuevos y el cuerpo del Post original puede exceder fácilmente el límite original de longitud del texto del Post de 140 caracteres. Para preservar la compatibilidad con la visualización y el almacenamiento basados en 140 caracteres, el cuerpo de nivel superior trunca el final del cuerpo del Post y agrega puntos suspensivos (“…”). En consecuencia, algunas entidades de nivel superior ubicadas al final del Post original podrían ser incorrectas o estar ausentes, por ejemplo, en el caso de un hashtag o una URL truncados. Este Post, https://x.com/FloodSocial/status/907974220298125312, tiene el siguiente texto del Post:                Just another test Post that needs to be exactly 140 characters with trailing URL and hashtag
http://wapo.st/2w8iwPQ #Testing
En el ejemplo anterior, tanto la URL como el hashtag se vieron afectados. Dado que el hashtag se truncó por completo y la URL se truncó parcialmente, estos faltan en las entidades de nivel superior. También notarás la entidad adicional de nivel superior user_mentions que proviene del prefijo “RT @floodsocial: ” en el campo text. Sin embargo, el texto del Post y las entidades en retweeted_status reflejan perfectamente el Post original, sin truncamiento ni entidades incorrectas; de ahí nuestra recomendación de confiar en el objeto anidado retweeted_status para los Retweets.

Quote Tweets

Los Quote Tweets se introdujeron en 2016 y difieren de los Retweets en que, cuando “citas” un Post, agregas contenido nuevo “encima” de un Post compartido. Este contenido nuevo puede incluir casi cualquier elemento que pueda tener un Post original, incluidos texto, hashtags, menciones y URL. Los Quote Tweets pueden contener contenido multimedia nativo (fotos, videos y GIF) y aparecerán bajo el objeto entities. Dado que se pueden agregar entidades de X, es probable que las entidades de la cita difieran de las entidades originales. En este ejemplo, una URL nueva y un hashtag se colocaron al final del Quote Tweet. Este Post, https://x.com/FloodSocial/status/907983973225160704, tiene el siguiente texto de Post: extraño e igualmente trágico cuando las islas se inundan… pruebas transatlánticas de quote tweets | @thisuser @thatuserhttp://bit.ly/2vMMDuu #testing En este caso, las entities de nivel superior no reflejan los detalles de la cita. Sin embargo, el texto del Post y las entities en extended_tweet reflejan perfectamente el Quote Tweet, sin truncamiento ni entities incorrectas; por lo tanto, recomendamos basarse en el objeto anidado extended_tweet para los Quote Tweets.

Entidades para el objeto de usuario

Las entidades para objetos de usuario describen las URL que aparecen en los campos de URL y descripción definidos por el usuario en el perfil. No describen hashtags ni user_mentions. A diferencia de las entidades de Post, las entidades de usuario pueden aplicarse a varios campos dentro de su objeto padre; para desambiguar, encontrará nodos padre llamados url y description que indican qué campo contiene la URL con entidad. En este ejemplo, el campo url del usuario contiene un enlace de t.co que está completamente expandido dentro del nodo entities/url/urls[0] de la respuesta. El usuario no tiene una URL con envoltura en su descripción.

Ejemplo de JSON

{
  "id": 6253282,
  "id_str": "6253282",
  "name": "X API",
  "screen_name": "xapi",
  "location": "San Francisco, CA",
  "description": "La X API oficial. Publico sobre cambios en la API, problemas del servicio y respondo con gusto preguntas sobre X y nuestra API. ¿No obtienes respuesta? Está en mi sitio web.",
  "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 extendidas de X 

Ir a en esta página Introducción Objeto Extended Entities Ejemplos de Tweets y cargas JSON   - Tweet con cuatro fotos nativas   - Tweet con video nativo   - Tweet con un GIF animado Pasos siguientes

Introducción

Si un Post contiene contenido multimedia nativo (compartido mediante la interfaz de usuario del Post en lugar de a través de un enlace externo), también habrá una sección extended_entities. En lo referente a contenido multimedia nativo (foto, video o GIF), extended_entities es la fuente de metadatos preferida por varias razones. Actualmente, se pueden adjuntar hasta cuatro fotos a un Post. Los metadatos de entities solo contendrán la primera foto (hasta 2014, solo se podía incluir una), mientras que la sección extended_entities incluirá todas las fotos adjuntas. Con contenido multimedia nativo, otra limitación de los metadatos de entities.media es que el tipo de medio siempre indicará ‘photo’, incluso cuando el medio adjunto sea un video o un GIF animado. El tipo real de medio se especifica en el atributo extended_entities.media[].type y se establece en photo, video o animated_gif. Por estas razones, si trabaja con contenido multimedia nativo, los metadatos de extended_entities son los recomendados. Todos los Posts con fotos, videos y GIF animados adjuntos incluirán un objeto JSON extended_entities. El objeto extended_entities contiene un único arreglo media de objetos media (consulte la sección entities para su diccionario de datos). No se incluyen otros tipos de entidades, como hashtags y enlaces, en la sección extended_entities. El objeto media de la sección extended_entities es idéntico en estructura al incluido en la sección entities. Los Posts solo pueden tener un tipo de contenido multimedia adjunto. En el caso de las fotos, se pueden adjuntar hasta cuatro. Para videos y GIF, se puede adjuntar uno. Dado que los metadatos type del contenido multimedia en la sección extended_entities indican correctamente el tipo de medio (‘photo’, ‘video’ o ‘animated_gif’) y admiten hasta cuatro fotos, es la fuente de metadatos preferida para contenido multimedia nativo.
{
      "extended_entities": {
        "media": [

        ]
      }
    }

Ejemplos de Posts y cargas útiles JSON

A continuación se muestran algunos Posts de ejemplo y su metadatos de entidades asociadas. Post con cuatro fotos nativas Post con hashtag, mención de usuario, cashtag, URL y cuatro fotos nativas:
Aquí está la sección entities de este 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": "Tuiteando bajo la lluvia, Parte 1 - Blog de Gnip - Blog de Datos Sociales y Ciencia de Datos",
              "description": "Si me hubieran dicho hace unos años que algún día estaría comparando datos de series temporales de precipitación y redes sociales, habría pensado que estaban bromeando. Durante 13 años en OneRain ayudé a desarrollar software y monitoreo... Continuar leyendo →"
            },
            "indices": [
              35,
              58
            ]
          }
        ],
        "user_mentions": [
          {
            "screen_name": "MentionThis",
            "name": "Solo Yo",
            "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"
              }
            }
          }
        ]
      }
    }
Solo en el siguiente payload “extendido” encontrarás las cuatro fotos nativas (como máximo). Observa que la primera foto del array es la misma que la foto única incluida en la sección no extendida de X entities. La estructura de metadata de media para fotos es la misma tanto en entities como en extended_entities. Aquí está la sección extended_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 con video nativo

A continuación se muestran los metadatos de entidades extendidas de este Post con un 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"
                }
              ]
            }
          }
        ]
      }
    }
Cuando un anunciante elige limitar la reproducción de video únicamente a plataformas de X (propiedad y operación de X), el objeto video_info se reemplaza por un objeto additional_media_info. El objeto additional_media_info contiene información adicional de medios proporcionada por el publicador, como title, description y embeddable flag. El contenido de video solo está disponible para clientes oficiales de X cuando embeddable=false. En este caso, todas las URL de video incluidas en el payload serán de X, de modo que el usuario pueda abrir el video en una propiedad de X al hacer clic en el enlace. A continuación se muestra un ejemplo de cómo se ve el objeto extended entities en esta situación:
{
      "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 desde McCown",
              "description": "NFL",
              "embeddable": false,
              "monetizable": true
            }
          }
        ]
      }
    }
Como se mencionó anteriormente, aquí está la sección entities que tiene el type configurado incorrectamente en ‘photo’. Nuevamente, se recomienda utilizar la sección extended_entities para todos los tipos de medios nativos, incluidos ‘video’ y ‘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 con un GIF animado

A continuación se muestran los metadatos de entidades ampliadas de este Post con un 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"
                }
              ]
            }
          }
        ]
      }
    }

Ejemplos de cargas útiles enriquecidas nativas

Post

{
	"created_at": "Fri Sep 18 18:36:15 +0000 2020",
	"id": 1307025659294675000,
	"id_str": "1307025659294674945",
	"text": "Aquí tienes un artículo que destaca las actualizaciones en el nuevo payload de 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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "Entendiendo el nuevo payload de Tweet en la X API v2",
				"description": "X anunció recientemente la nueva X API v2, reconstruida desde cero para ofrecer nuevas funcionalidades..."
			},
			"indices": [
				74,
				97
			]
		}],
		"user_mentions": [],
		"symbols": []
	},
	"favorited": false,
	"retweeted": false,
	"possibly_sensitive": false,
	"filter_level": "low",
	"lang": "en",
	"matching_rules": [{
		"tag": null
	}]
}

Responder a un Post

{
	"created_at": "Fri Aug 21 19:10:05 +0000 2020",
	"id": 1296887316556980200,
	"id_str": "1296887316556980230",
	"text": "Vea cómo @PennMedCDH está usando datos de X para entender la crisis sanitaria del 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": "La voz del equipo #XDevelopers y su fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "Penn Med Center for Digital Health ha creado un mapa de X sobre COVID-19 que incluye gráficos que detallan el sentimiento, los síntomas reportados, datos desglosados por estado y datos fronterizos sobre el brote de COVID-19. Además, su iniciativa Penn Med With You utiliza información regional agregada de X para alimentar su sitio web y servicio de mensajería de texto. El servicio utiliza esta información para difundir recursos relevantes y 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 extendido

{
	"created_at": "Wed Aug 19 16:26:16 +0000 2020",
	"id": 1296121314218897400,
	"id_str": "1296121314218897408",
	"text": "¡El endpoint para ocultar respuestas se lanza hoy! \n\nLos desarrolladores pueden ocultar respuestas a Tweets - una manera crucial en que los desarrolladores pu… 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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "¡El endpoint para ocultar respuestas se lanza hoy! \n\nLos desarrolladores pueden ocultar respuestas a Tweets - una manera crucial en que los desarrolladores pueden ayudar a mejorar la salud de la conversación pública usando la #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 respuestas ya disponible en la nueva X API",
					"description": "Hoy nos complace anunciar la disponibilidad general del endpoint para ocultar respuestas en la nueva X API. El endpoint para ocultar respuestas te permite crear herramientas que ayuden a las personas a ocultar o mostrar respuestas a sus Tweets. Las personas gestionan sus respuestas por diversas razones, incluyendo dar menos atención a comentarios abusivos, que distraen, engañosos, o para hacer las conversaciones más atractivas. A través de este endpoint, puedes crear herramientas para ayudar a las personas en X a ocultar o mostrar respuestas de manera más rápida y..."
				},
				"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 con extended_entities

{
	"created_at": "Wed Aug 12 17:01:42 +0000 2020",
	"id": 1293593516040269800,
	"id_str": "1293593516040269825",
	"text": "¡Por fin está aquí! 🥁 Saluda a la nueva #XAPI.\n\nEstamos reconstruyendo la X API v2 desde cero para b… 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": "La voz del equipo #XDevelopers y tu fuente oficial de actualizaciones, noticias y eventos relacionados con la #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": "¡Por fin está aquí! 🥁 Saluda a la nueva #XAPI.\n\nEstamos reconstruyendo la X API v2 desde cero para servir mejor a nuestra comunidad de desarrolladores. Y el lanzamiento de hoy es solo el comienzo.\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": "Presentamos una X API nueva y mejorada",
					"description": "Presentamos la nueva X API - reconstruida desde cero para ofrecer nuevas funciones más rápido para que los desarrolladores puedan ayudar al mundo a conectarse con la conversación pública que ocurre en 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: Creé una Alexa Skill para X usando APL que te permite ver Tweets y Tendencias en el echo show!\n\nEchale un vistazo aquí…",
	"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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "Creé una Alexa Skill para X usando APL que te permite ver Tweets y Tendencias en el echo show!\n\nEchale un vistazo… 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": "Relaciones con Desarrolladores para Investigación Académica @X. Háblame sobre investigación con datos de X. Anteriormente: Amazon Alexa. Las opiniones son mías",
			"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": "Creé una Alexa Skill para X usando APL que te permite ver Tweets y Tendencias en el echo show!\n\nEchale un vistazo aquí 👇\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
	}]
}

Citar Tweet

{
	"created_at": "Mon Nov 16 18:09:36 +0000 2020",
	"id": 1328399838128468000,
	"id_str": "1328399838128467969",
	"text": "Según lo previsto, los endpoints de Labs v2 mencionados a continuación han sido retirados. Por favor, infórmanos en los foros si tienes… 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": "La voz del equipo #XDevelopers y tu fuente oficial de actualizaciones, noticias y eventos relacionados con la #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": "👋 Recordatorio: X Developer Labs v2 para ocultar respuestas y búsqueda reciente será retirado el próximo lunes, 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": "La voz del equipo #XDevelopers y tu fuente oficial de actualizaciones, noticias y eventos relacionados con la #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": "👋 Recordatorio: X Developer Labs v2 para ocultar respuestas y búsqueda reciente será retirado el próximo lunes, 16 de noviembre. Te recomendamos migrar a los nuevos endpoints para ocultar respuestas y búsqueda reciente ahora disponibles en la v2 #XAPI. Detalles: 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": "Retiro de Labs v2: búsqueda reciente y ocultar respuestas",
						"description": "Como mencionamos en nuestros anuncios de Acceso Temprano y ocultar respuestas, los siguientes endpoints de X Developer Labs v2 serán retirados el 16 de noviembre. Labs v2 búsqueda reciente Labs v2 ocultar respuestas Si se invocan, estos endpoints responderán con un estado HTTP 410 y no devolverán datos. Basándonos en tus comentarios de Labs, incorporamos la funcionalidad correspondiente en la X API v2. La documentación relevante se puede encontrar usando los enlaces a continuación. Haz clic aquí para inscribirte en el acceso v2 si aún no lo has hecho..."
					},
					"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": "Como estaba previsto, los endpoints de Labs v2 mencionados a continuación ya han sido retirados. ¡Háganoslo saber en los foros si tienen preguntas o necesitan ayuda con 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 un Tweet citado

{
 	"created_at": "Thu Feb 06 17:26:44 +0000 2020",
 	"id": 1225470895902412800,
 	"id_str": "1225470895902412800",
 	"text": "RT @AureliaSpecker: 📣 Si disfrutaste el tutorial sobre el trayecto diario en Londres que escribí en noviembre del año pasado, echa un vistazo a la versión refactorizada 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": "La voz del equipo #XDevelopers y tu fuente oficial de actualizaciones, noticias y eventos relacionados con la #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": "📣 Si disfrutaste el tutorial sobre el trayecto diario en Londres que escribí en noviembre del año pasado, echa un vistazo a la versión refactorizada 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 • Suiza en Londres • madre de plantas de interior • peluquera personal de @_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": "Escribí un tutorial sobre cómo obtener información personalizada del trayecto diario usando la 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 • Suiza en Londres • madre de plantas de interior • peluquera personal de @_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": "Escribí un tutorial sobre cómo obtener información personalizada de trayectos usando la X API🚇\n\n#DEVcommunity #Pythontutorial \n\nÉchale un vistazo aquí 👇\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": "📣 Si disfrutaste el tutorial de trayectos de Londres que escribí en noviembre del año pasado, echa un vistazo a la versión refactorizada que usa el nuevo endpoint de búsqueda de 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": "Escribí un tutorial sobre cómo obtener información personalizada de trayectos usando la 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 • Suiza en Londres • madre de plantas de interior • peluquera personal de @_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": "Escribí un tutorial sobre cómo obtener información personalizada de desplazamientos usando la X API🚇\n\n#DEVcommunity #Pythontutorial \n\nEchale un vistazo aquí 👇\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 datos de Activity Streams de Enterprise

¿Te interesa saber más sobre cómo se correlaciona el formato de datos de Activity Streams con el formato de X API v2?
Consulta nuestra guía comparativa: Activity Streams frente a X API v2
Ten en cuenta: se recomienda encarecidamente usar el formato Enriched Native para las API de datos de Enterprise.
  • El formato Enriched Native incluye todos los metadatos incorporados desde 2017, como poll metadata, y métricas adicionales como reply_count y quote_count.
  • El formato Activity Streams no se ha actualizado con nuevos metadatos ni enriquecimientos desde la actualización del límite de caracteres de 2017.

Objeto de actividad

Activity Streams es una traducción de un esquema de objetos del formato de datos original de X, creada por Gnip para “normalizar el formato” de los datos de Post y otros datos de redes sociales mediante el Activity Base Schema de terceros descrito aquí. Los Posts se normalizan al esquema de activity streams, incluyendo los tipos de objeto note, person, place y service como objetos anidados. Los Posts pueden incluir otros objetos de actividad de Post anidados para Retweets u otros, como twitter_quoted_status o long_object. El tipo de objeto de nivel base “activity” es similar al objeto de nivel base de Post del formato nativo enriquecido. Los ejemplos de cargas útiles en formato activity streams se pueden encontrar aquí.

Diccionario de datos

A continuación encontrará el diccionario de datos de estos atributos de “actividad” a nivel raíz, así como enlaces a los diccionarios de datos de los objetos secundarios.
AtributoTipoDescripción
idstringUn IRI único para el Post. En detalle, “tag” es el esquema, “search.x.com” representa el dominio del esquema, y 2005 es cuando se derivó el esquema.
Al almacenar Posts, esto debe utilizarse como identificador único o clave primaria.
“id”: “tag:search.x.com,2005:1050118621198921728”
objectTypestringTipo de objeto, siempre establecido como “activity”
“objectType”: “activity”
objectobjectUn objeto que representa el Post que se está publicando o compartiendo.
Para Retweets, contendrá una “activity” completa, con los campos pertinentes descritos en este esquema.
Para Posts originales, contendrá un objeto “note”, con los campos descritos aquí.
“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_objectobjectUn objeto que representa el cuerpo de texto completo si el texto del Post supera los 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_rangearraySi el texto del Post supera los 140 caracteres.


“display_text_range”: [
0,
142
]
verbstringEl tipo de acción que realiza el usuario.
Posts, “post”
Retweets, “share”
Posts eliminados, “delete”
El verbo es la forma correcta de distinguir entre un Tweet y un Retweet verdadero. Sin embargo, esto solo aplica a retweets verdaderos, no a Tweets modificados o citados, que no utilizan la funcionalidad de Retweet de X. Para una descripción de los verbos AS
haga clic aquí.
Para eliminaciones, tenga en cuenta que solo se incluirá un número limitado de campos, como se muestra en la carga útil de ejemplo a continuación.
“verb”: “post”
postedTimedate (ISO 8601)La hora en que ocurrió la acción, por ejemplo, la hora en que se publicó el Post.


“postedTime”: “2018-10-10T20:19:24.000Z”
generatorobjectUn objeto que representa la utilidad utilizada para publicar el Post. Contendrá el nombre (“displayName”) y un enlace (“link”) de la aplicación fuente que genera el Post.
“generator”:
“displayName”: “X Web Client”,
“link”: “http://x.com
providerobjectUn objeto JSON que representa el proveedor de la actividad. Contendrá un objectType (“service”), el nombre del proveedor (“displayName”), y un enlace al sitio web del proveedor (“link”).
“provider”:

“objectType”: “service”,
“displayName”: “X”,
“link”: “http://www.x.com
linkstringUn enlace permanente del Post.
“link”: “http://x.com/API/statuses/1050118621198921728
bodystringEl texto del Post.

En Retweets, tenga en cuenta que X modifica el valor del cuerpo a nivel raíz agregando “RT @username” al principio, y truncando el texto original agregando puntos suspensivos al final. Por tanto, para Retweets, su aplicación debe consultar object.body para asegurar que extrae el texto no modificado del Post original (que está siendo retuiteado).
“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_rangearrayDescribe el rango de caracteres dentro del texto del cuerpo que indica el Post mostrado. Los Posts con @menciones iniciales comenzarán en más de 0 y los Posts con medios adjuntos o que superan los 140 caracteres indicarán el display_text_range en el long_object.

“display_text_range”: [
14,
42
]
o
“long_object”:
“display_text_range”: [
0,
277
]…
actorobjectUn objeto que representa al usuario de X que publicó. El Objeto Actor hace referencia a un Usuario de X, y contiene todos los metadatos relevantes para ese usuario.
Ver
detalles del objeto actor
inReplyToobjectUn objeto JSON que hace referencia al Post al que se está respondiendo, si aplica. Contiene un enlace al Post.
“inReplyTo”:

“link”: “http://x.com/GOP/statuses/349573991561838593
locationobjectUn objeto JSON que representa el “Place” de X donde se creó el Post. Es un objeto transmitido desde la plataforma X.

Ver
objeto de ubicación
twitter_entitiesobjectEl objeto entities del formato de datos de X que contiene listas de URLs, menciones y hashtags. Consulte la documentación de X sobre Entities aquí. Tenga en cuenta que en los Retweets, X puede truncar los valores de entities que extrae a nivel raíz. Por lo tanto, para los Retweets, su App debe consultar object.twitter_entities para asegurar que está utilizando valores no truncados.

Ver detalles del objeto twitter_entities
twitter_extended_entitiesobjectUn objeto del formato de datos nativo de X que contiene “media”. Estará presente para cualquier Post donde el objeto twitter_entities tenga datos presentes en el campo “media”, e incluirá múltiples fotos cuando estén presentes en el Post. Tenga en cuenta que esta es la ubicación correcta para recuperar información de medios para Posts con múltiples fotos.

Las múltiples fotos se representan mediante objetos JSON separados por comas dentro del array “media”.

Ver detalles del objeto twitter_extended_entities
gnipobjectUn objeto agregado al payload de actividad para indicar las reglas coincidentes y datos enriquecidos agregados basados en enriquecimientos activos en el stream o producto.

Ver detalles del objeto gnip
edit_historyObjectIdentificadores únicos que indican todas las versiones de un Post. Para Posts sin ediciones, habrá un ID. Para Posts con historial de ediciones, habrá múltiples IDs organizados en orden ascendente que reflejan el orden de las ediciones, con la versión más reciente en la última posición del array.

Los IDs de Post pueden utilizarse para hidratar y ver versiones anteriores de un Post.

Ejemplo:

edit_history”:
“initial_tweet_id”: “1283764123”
“edit_tweet_ids”: [“1283764123”, “1394263866”]
edit_controlsObjectCuando está presente, indica por cuánto tiempo un Post aún es editable y el número de ediciones restantes. Los Posts solo son editables durante los primeros 30 minutos después de la creación y pueden editarse hasta cinco veces.

Los IDs de Post pueden utilizarse para hidratar y ver versiones anteriores de un Post.

Ejemplo:

“edit_controls”:
“editable_until_ms”: 123
“edits_remaining”: 3
editableBooleanCuando está presente, indica si un Post era elegible para edición cuando fue publicado. Este campo no es dinámico y no cambiará de True a False cuando un Post alcance su límite de tiempo editable o número máximo de ediciones. Las siguientes características del Post harán que este campo sea false:

_ El Post está promocionado
_ El Post tiene una encuesta
_ El Post es una respuesta que no es un hilo propio
_ El Post es un Retweet (tenga en cuenta que los Quote Tweets son elegibles para edición)
_ El Post es nullcast
_ Post de Community
_ Post de Superfollow
_ Post colaborativo

Atributos adicionales de Post

AtributotypeDescripción
twitter_langstring
favoritesCountintNullable. Indica aproximadamente cuántas veces este Post ha recibido like por parte de usuarios de X.

“favoritesCount”: 298
retweetCountintNúmero de veces que este Post ha sido retuiteado. Ejemplo:

“retweetCount”: 153

Atributos en desuso

CampotypeDescripción
geoobjectUbicación puntual donde se creó el Post.
twitter_filter_levelstringCampo en desuso mantenido para evitar cambios incompatibles.

Objetos de actividad de Post anidados

En varios casos, un Objeto de Post incluirá otros Posts anidados. Si trabaja con objetos anidados, esa carga útil JSON contendrá múltiples objetos y cada Objeto de Post puede contener sus propios objetos. El objeto de nivel raíz contendrá información sobre el tipo de acción realizada, es decir, si es un Retweet o un Quote Tweet, y también puede contener un objeto que describa el Post «original» que se está compartiendo. Los Posts extendidos incluirán un objeto extendido anidado que supera los 140 caracteres, el cual se utilizó para evitar cambios incompatibles cuando se realizó la actualización en 2017. Cada diccionario de objeto anidado se describe a continuación. Retweets El formato del stream de actividad de Retweets incluye un objeto anidado con el type “activity” y el verb “note” para representar el Post original que está siendo Retwitteado.
{
	"id": "tag:search.x.com,2005:222222222222",
	"objectType": "activity",
	"verb": "share",
	"body": "RT @TheOriginalTweeter: Café y arte ☕️",
	"actor": {
		"displayName": "TheRetweeter"
	},
	"object": {
		"id": "tag:search.x.com,2005:11111111111",
		"objectType": "activity",
		"verb": "post",
		"body": "Café y arte ☕️",
		"actor": {
			"displayName": "TheOriginalTweeter"
		},
		"object": {
			"objectType": "note",
			"id": "object:search.x.com,2005:11111111111",
			"summary": "Café y 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": {}
}
Estado citado en X Formato de stream de actividad con Tweets citados integrados { "id": "tag:search.x.com,2005:222222222222", "objectType": "activity", "verb": "post", "body": "Citando un 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": {} } } Retweet de un Tweet citado:
    {
    	"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: Muy emocionado de poner a disposición este primer conjunto de endpoints - muchos más por venir antes de terminar. El equipo #DevRel de @XDevelopers…",
    	"actor": {},
    	"object": {},
    	"favoritesCount": 0,
    	"twitter_entities": {},
    	"twitter_lang": "en",
    	"retweetCount": 13,
    	"gnip": {},
    	"twitter_filter_level": "low",
    	"twitter_quoted_status": {}
    }

Objeto largo

Formato de stream de actividad de extended_tweet
{
  "id": "tag:search.x.com,2005:1050118621198921728",
  "objectType": "activity",
  "verb": "post",
  "postedTime": "2018-10-10T20:19:24.000Z",
  "generator": {
    "displayName": "Cliente Web de 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 cabida a más expresión, ahora contaremos todos los emojis por igual—incluyendo aquellos con género‍‍‍ ‍‍y tono de piel… https://t.co/MkGjXf9aXm",
  "long_object": {
    "body": "Para dar cabida a más expresión, ahora contaremos todos los emojis por igual—incluyendo aquellos con género‍‍‍ ‍‍y modificadores de tono de piel 👍🏻👍🏽👍🏿. Esto ahora se refleja en Twitter-Text, nuestra biblioteca de código abierto. \n\n¿Usas Twitter-Text? Consulta la publicación del foro para más detalles: https://t.co/Nx1XZmRCXA",
    "display_text_range": [
      0,
      277
    ],
    "twitter_entities": {ver objeto twitter_entities},
  "actor": {ver objeto actor},
  "object": {
    "objectType": "note",
    "id": "object:search.x.com,2005:1050118621198921728",
    "summary": "Para dar cabida a más expresión, ahora contaremos todos los emojis por igual—incluyendo aquellos con género‍‍‍ ‍‍y tono de piel… https://t.co/MkGjXf9aXm",
    "link": "http://x.com/API/statuses/1050118621198921728",
    "postedTime": "2018-10-10T20:19:24.000Z"
  },
  "favoritesCount": 298,
  "twitter_entities": {ver objeto twitter_entities},
  "twitter_lang": "en",
  "retweetCount": 153,
  "gnip": {ver objeto gnip},
  "twitter_filter_level": "low"
}

Objeto actor

El objeto actor contiene metadatos de la cuenta de usuario de X que describen al usuario de X que creó la actividad.

Diccionario de datos

AtributoTipoDescripción
objectTypestring”objectType”: “person”
idstringLa representación en cadena del identificador único de este autor. Ejemplo:

“id:x.com:2244994945”
linkhttp://www.x.com/XDeveloeprs
displayNameStringEl nombre del usuario, tal como lo ha definido. No necesariamente es el nombre de una persona. Por lo general, limitado a 50 caracteres, pero sujeto a cambios. Ejemplo:

“displayName”: “XDevelopers”
preferredUsernamestringEl nombre visible, handle o alias con el que este usuario se identifica. Es único, pero puede cambiar. Usa id como identificador de usuario siempre que sea posible. Por lo general, tiene un máximo de 15 caracteres, pero pueden existir cuentas históricas con nombres más largos. Ejemplo:

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

“objectType”:** “place”,

“displayName”: “127.0.0.1”

**        }**
linksarrayNullable. Una URL proporcionada por el usuario asociada a su perfil. Ejemplo:

**       “links”: [

          {

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

“rel”: “me”

**          }

        ]**
summarystringNullable. La cadena UTF-8 definida por el usuario que describe su cuenta. Ejemplo:

“summary”: “The voice of the #XDevelopers team…“
protectedBooleanCuando es true, indica que este usuario ha decidido proteger sus Posts. Consulta About Public and Protected Posts. Ejemplo:

“protected”: true
verifiedBooleanCuando es true, indica que el usuario tiene una cuenta verificada. Consulta Verified Accounts. Ejemplo:

“verified”: false
followersCountIntLa cantidad de seguidores que esta cuenta tiene actualmente. En determinadas condiciones de estrés, este campo indicará temporalmente “0”. Ejemplo:

“followers_count”: 21
friendsCountIntLa cantidad de usuarios a los que esta cuenta sigue (también llamados “followings”). En determinadas condiciones de estrés, este campo indicará temporalmente “0”. Ejemplo:

“friends_count”: 32
listedCountIntLa cantidad de List públicas de las que este usuario es miembro. Ejemplo:

“listed_count”: 9274
favoritesCountIntLa cantidad de Posts a los que este usuario ha dado like durante la vida de la cuenta. Se usa la ortografía británica en el nombre del campo por razones históricas. Ejemplo:

“favourites_count”: 13
statusesCountIntLa cantidad de Posts (incluidos los Retweets) emitidos por el usuario. Ejemplo:

“statuses_count”: 42
postedTimedateLa fecha y hora UTC en que se creó la cuenta de usuario en X. Ejemplo:

“postedTime”: “2013-12-14T04:35:55.036Z”
imagestringUna URL basada en HTTPS que apunta a la imagen de perfil del usuario. Ejemplo:

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

Atributos obsoletos (deprecated)

CampoTypeDescripción
utcOffsetnullEl valor se establecerá en null. Sigue disponible mediante GET account/settings
twitterTimeZonenullEl valor se establecerá en null. Sigue disponible mediante GET account/settings como tzinfo_name
languagesnullEl valor se establecerá en null. Sigue disponible mediante GET account/settings como language

Ejemplos:

			"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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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 cambios y problemas del servicio. Sigue a @XDevelopers para obtener más información.",
    "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 Location

Los objetos Location pueden existir dentro del conjunto de objetos actor definido a nivel de la cuenta de X o dentro del objeto profileLocations del objeto gnip. Los objetos Location tienen el tipo de objeto place y pueden incluir un nombre, una dirección o coordenadas geográficas. Los objetos Location son similares a Geo en el formato enriquecido nativo.

Diccionario de datos de ubicación

CampoTipoDescripción
objectTypestringConsulte aquí para obtener información más detallada. Ejemplo:

“objectType”: “place”
displayNamestringEl nombre completo de la ubicación.

“displayName”: “United States”
namestringNombre de la ubicación según el formato JSON de lugares de X.
linkstringEnlace a la representación JSON completa del lugar en X.

“link”:https://api.x.com/1.1/geo/id/27c45d804c777999.json
geoobjectObjeto de coordenadas geográficas de X. Puede ser un polígono o un punto.

Consulte geo
countryCodeStringCódigo de país abreviado que representa el país donde se ubica este lugar. Ejemplo:

“countryCode”: “US”
countryStringNombre del país donde se ubica este lugar. Ejemplo:

“country”: “United States”

objetos derivados de profileLocations

CampoTipoDescripción
addressobjectDentro del objeto de ubicación profileLocation en el objeto gnip. Dirección de la ubicación derivada mediante el enriquecimiento geográfico del perfil. El nivel de granularidad puede variar. 

“address”: {

**          “country”: “United States”,

          “countryCode”: “US”,

          “locality”: “Providence”,

          “region”: “Rhode Island”,

          “subRegion”: “Providence County”

        }**
geoobjectDentro del objeto de ubicación profileLocation en el objeto gnip. Coordenadas del centroide de la ubicación derivadas mediante el enriquecimiento geográfico del perfil.

”geo”: {

**          “coordinates”: [

-98.5
,

39.76

          ],

          “type”: “point”

        }**
Ejemplos
	"location": {
    "objectType": "place",
    "displayName": "Kansas, EE. UU.",
    "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": "California, EE. UU."
    }

Objeto de entidades de X

Para el formato Activity Streams, el campo twitter_entities usa el mismo formato y diccionario de datos que se muestran en el formato enriquecido nativo entities object aquí.

Ejemplo:

"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 de entidades extendidas de X

Para el formato Activity Streams, twitter_extended_entities utiliza el mismo formato y diccionario de datos que se muestran en el formato nativo enriquecido objeto extended_entities aquí.

Ejemplo:

"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

El objeto gnip, dentro del formato Activity Streams, contiene los metadatos añadidos por los enriquecimientos activos, así como la indicación de las reglas que coinciden con la actividad.

Diccionario de datos

CampoTipoDescripción
matching_rulesarrayContiene un array de objetos de reglas coincidentes que indican la regla con la que coincide la actividad.
“matching_rules”: [

**      {

        “tag”: null,

“id”:** 1026514022567358500**,

“id_str”:** “1026514022567358464”

**      }

    ]**
urlsarrayContiene un array de enlaces dentro de la actividad y los metadatos de la URL expandida para el enriquecimiento de desenrollado 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 of location objectsContiene el objeto de ubicación derivado del enriquecimiento 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”

**      }

    ]

  }**

Ejemplo:

	"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
      }
    ]
  }

Ejemplos de cargas útiles de streams de actividad

Actividad 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": "Aquí hay un artículo que destaca las actualizaciones en el nuevo 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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "Aquí hay un artículo que destaca las actualizaciones en el nuevo 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": "Entendiendo el nuevo payload de Tweet en la X API v2",
			"expanded_url_description": "X anunció recientemente la nueva X API v2, reconstruida desde cero para ofrecer nuevas funciones..."
		}]
	},
	"twitter_filter_level": "low"
}
Actividad de Post de respuesta
{
	"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": "Vea cómo @PennMedCDH está usando datos de X para entender la crisis sanitaria del 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": "La voz del equipo #XDevelopers y su fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "Vea cómo @PennMedCDH está usando datos de X para entender la crisis sanitaria del 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": "Penn Med Center for Digital Health ha creado un mapa de X sobre COVID-19 que incluye gráficos que detallan el sentimiento, los síntomas reportados, datos desglosados por estado y datos fronterizos sobre el brote de COVID-19. Además, su iniciativa Penn Med With You utiliza información regional agregada de X para alimentar su sitio web y servicio de mensajería de texto. El servicio utiliza esta información para difundir recursos relevantes y oportunos."
		}]
	},
	"twitter_filter_level": "low"
}
Actividad de Post con 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": "¡El endpoint para ocultar respuestas se lanza hoy! \n\nLos desarrolladores pueden ocultar respuestas a Tweets - una forma crucial en que los desarrolladores pu… https://t.co/VyfXs1RTXn",
	"long_object": {
		"body": "¡El endpoint para ocultar respuestas se lanza hoy! \n\nLos desarrolladores pueden ocultar respuestas a Tweets - una forma crucial en que los desarrolladores pueden ayudar a mejorar la salud de la conversación pública usando el #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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con el #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": "¡El endpoint para ocultar respuestas se lanza hoy! \n\nLos desarrolladores pueden ocultar respuestas a Tweets - una forma crucial en que los desarrolladores pu… 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 respuestas ya disponible en el nuevo X API",
			"expanded_url_description": "Hoy nos complace anunciar la disponibilidad general del endpoint para ocultar respuestas en el nuevo X API. El endpoint para ocultar respuestas te permite crear herramientas que ayuden a las personas a ocultar o mostrar respuestas a sus Tweets. Las personas gestionan sus respuestas por muchas razones, incluyendo dar menos atención a comentarios abusivos, que distraen, engañosos, o para hacer las conversaciones más atractivas. A través de este endpoint, puedes crear herramientas para ayudar a las personas en X a ocultar o mostrar respuestas de forma más rápida y..."
		}]
	},
	"twitter_filter_level": "low"
}
Actividad de Post con 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": "¡Por fin llegó! 🥁 Te presentamos la nueva #XAPI.\n\nEstamos reconstruyendo la X API v2 desde cero para b… https://t.co/UeCndQGMjx",
	"long_object": {
		"body": "¡Por fin llegó! 🥁 Te presentamos la nueva #XAPI.\n\nEstamos reconstruyendo la X API v2 desde cero para servir mejor a nuestra comunidad de desarrolladores. Y el lanzamiento de hoy es solo el comienzo.\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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "¡Por fin está aquí! 🥁 Saluda a la nueva #API.\n\nEstamos reconstruyendo la X API v2 desde cero 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": "Presentamos una X API nueva y mejorada",
			"expanded_url_description": "Presentamos la nueva X API - reconstruida desde cero para ofrecer nuevas funciones más rápido para que los desarrolladores puedan ayudar al mundo a conectarse con la conversación pública que sucede en X."
		}]
	},
	"twitter_filter_level": "low"
}
Actividad de Retweet
{
	"id": "tag:search.x.com,2005:1229851574555508737",
	"objectType": "activity",
	"verb": "share",
	"postedTime": "2020-02-18T19:33:59.000Z",
	"generator": {
		"displayName": "Aplicación Web de X",
		"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: Creé una Skill de Alexa para X usando APL que permite ver Tweets y Tendencias en el echo show!\n\nEchale un vistazo 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": "La voz del equipo #XDevelopers y tu fuente oficial para actualizaciones, noticias y eventos relacionados con la #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": "Aplicación Web de X",
			"link": "https://mobile.x.com"
		},
		"provider": {
			"objectType": "service",
			"displayName": "X",
			"link": "http://www.x.com"
		},
		"link": "http://x.com/suhemparack/statuses/1229843515603144704",
		"body": "Creé una Skill de Alexa para X usando APL que permite ver Tweets y Tendencias en el echo show!\n\nEchale un vistazo… https://t.co/RP9NgltX7i",
		"long_object": {
			"body": "Creé una Skill de Alexa para X usando APL que permite ver Tweets y Tendencias en el echo show!\n\nEchale un vistazo aquí 👇\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": "Relaciones con Desarrolladores para Investigación Académica en @X. Háblame sobre investigación con datos de X. Anteriormente: Amazon Alexa. Las opiniones son mías",
			"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": "Creé una Skill de Alexa para X usando APL que permite ver Tweets y Tendencias en el echo show!\n\nEchale un vistazo… 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"
}
Actividad de cita de Tweet
{
 	"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": "Según lo previsto, los endpoints de Labs v2 mencionados a continuación han sido retirados. Por favor, infórmennos en los foros si tienen… https://t.co/ahQvTYaOcZ",
 	"long_object": {
 		"body": "Según lo previsto, los endpoints de Labs v2 mencionados a continuación han sido retirados. Por favor, infórmennos en los foros si tienen preguntas o necesitan ayuda con 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": "La voz del equipo #XDevelopers y su fuente oficial para actualizaciones, noticias y eventos relacionados con #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": "Según lo previsto, los endpoints de Labs v2 mencionados a continuación han sido retirados. Por favor, infórmennos en los foros si tienen… 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": "Retiro de búsqueda reciente y ocultar respuestas de Labs v2",
 			"expanded_url_description": "Como anunciamos en nuestros comunicados sobre Acceso Temprano y ocultar respuestas, los siguientes endpoints de X Developer Labs v2 serán retirados el 16 de noviembre. Búsqueda reciente de Labs v2 Ocultar respuestas de Labs v2 Al ser invocados, estos endpoints responderán con un estado HTTP 410 y no devolverán datos. Basándonos en sus comentarios sobre Labs, incorporamos la funcionalidad correspondiente en X API v2. La documentación relevante se puede encontrar usando los enlaces a continuación. Haga clic aquí para inscribirse en el acceso v2 si aún no lo ha hecho...",
 		}]
 	},
 	"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": "👋 Recordatorio amigable: X Developer Labs v2 ocultar respuestas y búsqueda reciente serán retirados el próximo lunes, nove… https://t.co/EEWN2Q9aXh",
 		"long_object": {
 			"body": "👋 Recordatorio amigable: X Developer Labs v2 ocultar respuestas y búsqueda reciente serán retirados el próximo lunes, 16 de noviembre. Los alentamos a migrar a los nuevos endpoints de ocultar respuestas y búsqueda reciente ahora disponibles en v2 #XAPI. Detalles: 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": "La voz del equipo #XDevelopers y su fuente oficial para actualizaciones, noticias y eventos relacionados con #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": "👋 Recordatorio amigable: X Developer Labs v2 ocultar respuestas y búsqueda reciente serán retirados el próximo lunes, 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"
 	}
 }
Actividad de Quote Tweet de Retweet
{
	"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: 📣 Si disfrutaste el tutorial del trayecto en Londres que escribí en noviembre del año pasado, echa un vistazo a la versión refactorizada que usa…",
	"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": "La voz del equipo #XDevelopers y tu fuente oficial de actualizaciones, noticias y eventos relacionados con la #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": "📣 Si disfrutaste el tutorial del trayecto en Londres que escribí en noviembre del año pasado, echa un vistazo a la versión refactorizada que u… https://t.co/cAepHunkFp",
		"long_object": {
			"body": "📣 Si disfrutaste el tutorial del trayecto en Londres que escribí en noviembre del año pasado, echa un vistazo a la versión refactorizada que usa el nuevo endpoint de búsqueda de 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 • Suiza en Londres • madre de plantas de interior • peluquera personal 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:1224709550214873090",
			"summary": "📣 Si disfrutaste el tutorial del trayecto en Londres que escribí en noviembre del año pasado, echa un vistazo a la versión refactorizada 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": "Escribí un tutorial sobre cómo obtener información de viaje personalizada usando la X API🚇\n\n#DEVcommunity #Pythontutorial… https://t.co/pL0qJ4vhtE",
		"long_object": {
			"body": "Escribí un tutorial sobre cómo obtener información de viaje personalizada usando la X API🚇\n\n#DEVcommunity #Pythontutorial \n\nÉchale un vistazo aquí 👇\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 • Suiza en Londres • madre de plantas de interior • peluquera personal 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": "Escribí un tutorial sobre cómo obtener información de viaje personalizada usando la 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"
	}
}

Cronología de metadatos de Tweet

Ir a en esta página Introducción Conceptos clave Cronología de X Consejos de filtrado Próximos pasos

Introducción**

En esencia, X es una red de comunicación pública, en tiempo real y global. Desde 2006, la evolución de X ha estado impulsada tanto por los patrones y convenciones de uso de los usuarios como por nuevas funciones y mejoras de producto. Si utiliza datos de X para investigación histórica, comprender la cronología de esta evolución es importante para identificar Posts de interés en el archivo de datos. X se lanzó como una sencilla App móvil por SMS y ha crecido hasta convertirse en una plataforma de comunicación integral. Una plataforma con un conjunto completo de APIs. Las APIs siempre han sido un pilar de la red de X. La primera API se lanzó poco después del lanzamiento de X. Cuando se introdujo por primera vez el etiquetado geográfico de Posts en 2009, se puso a disposición a través de una Geo API (y más tarde la capacidad de «geoetiquetar» un Post se integró en la interfaz de usuario de X.com). Hoy en día, las APIs de X impulsan la red de comunicación bidireccional que se ha convertido en fuente de noticias de última hora y de intercambio de información. Las oportunidades para crear sobre este canal de comunicación global y en tiempo real son infinitas. X pone a disposición dos APIs históricas que proporcionan acceso a cada Post disponible públicamente: Historical PowerTrack y la Full-Archive Search API. Ambas APIs proporcionan un conjunto de operadores para consultar y recopilar Posts de interés. Estos operadores hacen coincidencia con una variedad de atributos asociados con cada Post, cientos de atributos como el contenido de texto del Post, el nombre de la cuenta del autor y los enlaces compartidos en el Post. Los Posts y sus atributos se codifican en JSON, un formato común de intercambio de datos basado en texto. Así, a medida que se introducían nuevas funciones, aparecían nuevos atributos JSON y, por lo general, se incorporaban nuevos operadores de la API para hacer coincidencia con esos atributos. Si su caso de uso incluye la necesidad de escuchar lo que el mundo ha dicho en X, cuanto mejor entienda cuándo los operadores empezaron a contar con metadatos JSON para hacer coincidencia, más eficaces podrán ser sus filtros históricos de PowerTrack. A continuación, presentaremos algunos conceptos clave que sientan las bases para comprender cómo las actualizaciones en los metadatos de los Posts afectan la búsqueda de su señal de datos de interés.

Conceptos clave**

De convenciones de usuarios a objetos de primera clase en X

Los usuarios de X introdujeron de forma orgánica nuevos patrones de comunicación que ahora son fundamentales para la red de X. Un ejemplo seminal es el hashtag, hoy casi universal en todas las redes sociales. Los hashtags surgieron como una forma de organizar conversaciones y temas. En una red con cientos de millones de mensajes al día, las herramientas para encontrar Posts de interés son clave, y los hashtags se han convertido en un método fundamental. Poco después de que aumentara su uso, los hashtags recibieron reconocimiento y soporte oficiales por parte de X. Cuando los hashtags pasaron a ser un objeto de “primera clase”, esto implicó varias cosas. Significó que los hashtags se volvieron clicables y buscables en la interfaz de usuario de X.com. También implicó que los hashtags pasaran a formar parte de la familia de entities de X, junto con las @mentions, el contenido multimedia adjunto, los símbolos bursátiles y los enlaces compartidos. Estas entidades se codifican de forma conveniente en un arreglo JSON preprocesado, lo que facilita a los desarrolladores procesarlas, escanearlas y almacenarlas. Los Retweets son otro ejemplo de convenciones impulsadas por los usuarios que se convierten en objetos oficiales. El Retweet surgió como una forma de “reenviar” contenido a otros. Comenzó como un proceso manual de copiar y pegar un Post y anteponerle el patrón “RT @”. Este proceso acabó automatizándose mediante un nuevo botón de Retweet, con nuevos metadatos JSON. Nació el Retweet “oficial”. Otros ejemplos incluyen las “mentions”, compartir contenido multimedia y enlaces web, y compartir una ubicación con tu Post. Cada uno de estos patrones de uso dio lugar a nuevas funciones en la interfaz de usuario de x.com, nuevo JSON de soporte y, por tanto, nuevas formas de hacer matching de Posts. Todos estos atributos fundamentales del Post han dado lugar a PowerTrack Operators utilizados para hacer matching con ellos.

Metadatos del Post, mutabilidad, actualizaciones y vigencia

Si bien los mensajes de Post pueden tener hasta un número fijo de caracteres, la descripción JSON de un Post consta de más de 100 atributos. Atributos como quién publicó, en qué momento, si es un Post original o un Retweet, y un arreglo de objetos de primera clase como hashtags, menciones y enlaces compartidos. Para la cuenta que publicó, hay un objeto User (o Actor) con una variedad de atributos que proporcionan el Profile del usuario y otros metadatos de la cuenta. Los Profiles incluyen una breve descripción biográfica, una ubicación principal (texto libre), el idioma preferido y un enlace opcional a un sitio web. Algunos metadatos de la cuenta nunca cambian (por ejemplo, el user ID numérico y la fecha de creación), algunos cambian lentamente con el tiempo, mientras que otros atributos cambian con mayor frecuencia. Las personas cambian de trabajo y se mudan. Las empresas actualizan su información. Cuando esté recopilando Posts históricos, es importante comprender que algunos metadatos están tal como estaban cuando se publicó el Post, y otros metadatos están tal como están cuando se envía la query Con todas las APIs históricas, la descripción del perfil del usuario, el nombre para mostrar y los atributos de “home” del perfil se actualizan a los valores vigentes en el momento de la query.

“Medios” nativos

X.com y las apps móviles de X permiten agregar fotos y videos a un Post con solo hacer clic en un botón y explorar tus galerías de fotos. Ahora que están integrados como acciones de primer nivel, los videos y fotos compartidos de esta manera se denominan “medios nativos”. Muchos Operadores de query funcionan con estos recursos “nativos”, incluidos has:videos, has:images y has:media. Estos solo coinciden con contenido multimedia compartido mediante funciones de X. Para hacer coincidir otro contenido multimedia alojado fuera de la plataforma de X, querrás usar Operadores que coincidan con los metadatos de la URL. Entonces, antes de profundizar en los detalles de producto de Historical PowerTrack y Full-Archive Search, hagamos un recorrido por cómo X, como producto y plataforma, evolucionó con el tiempo. Cronología de X A continuación encontrarás una cronología seleccionada de X. La mayoría de estas actualizaciones de X afectaron de algún modo, de forma fundamental, el comportamiento del usuario, los contenidos JSON de los Post, los Operadores de query o los tres. Considerando a X como una plataforma de API, los siguientes eventos afectaron de alguna manera los payloads JSON que se utilizan para codificar los Posts. A su vez, esos detalles JSON afectan cómo las API históricas de X hacen matching sobre ellos. Ten en cuenta que esta lista cronológica es, en general, precisa y no exhaustiva.

2006

  • Octubre
    • @replies se convierte en una convención.
    • Surgen por primera vez los cashtags,perosuusoparamencionarsıˊmbolosbursaˊtilesnosevuelvecomuˊnhastaprincipiosde2009.Loscashtags, pero su uso para mencionar símbolos bursátiles no se vuelve común hasta principios de 2009. Los cashtags pasaron a ser enlaces clicables y buscables en junio de 2012.
  • Noviembre - Se introducen los Favoritos.

2007

  • Enero: las @replies pasan a ser un objeto de primera clase con un botón de respuesta en la interfaz y metadatos in_reply_to.
  • Abril: los Retweets se convierten en una convención.
  • Agosto: los #hashtags surgen como una herramienta principal para buscar y organizar Posts.

2009

  • Febrero: los $cashtags se convierten en una convención común para hablar de símbolos bursátiles.
  • Mayo: se introduce la versión beta de Retweet con “Via @” antepuesto al cuerpo del Post.
  • Junio: se introducen las cuentas verificadas.
  • Agosto: los Retweets se convierten en un objeto de primera clase con el patrón “RT @” y nuevos metadatos retweet_status.
  • Octubre: se lanza la función List.
  • Noviembre: se lanza la API de geotagging de Post, que proporciona el primer método para que los usuarios compartan su ubicación mediante apps de terceros.

2010

  • Junio: se introdujo X Places para geolocalizar los Posts.
  • Agosto: se lanzó el botón Post para sitios web, lo que facilitó compartir enlaces.

2011

  • Mayo: se introdujo el botón Follow, lo que facilitó seguir cuentas asociadas a sitios web.
  • Agosto: se incorporó la función de fotos nativas.

2012

  • Junio: los $Cashtags pasan a ser enlaces clicables y buscables.

2014

2015

  • Abril: Un cambio en el diseño de la interfaz de usuario de X para los Posts reduce la cantidad de Posts con etiquetas geográficas.
  • Octubre: Se introducen X Polls. Inicialmente, Polls admitía dos opciones con un período de votación de 24 horas. En noviembre, Polls empezó a admitir cuatro opciones con períodos de votación de 5 minutos a siete días. Los metadatos de las encuestas estuvieron disponibles (solo en formato nativo enriquecido) en febrero de 2017.

2016

2017

  • Febrero: metadatos de X Poll incluidos en los metadatos de Post (solo formato nativo enriquecido).
  • Abril: se introducen las “Respuestas simplificadas”, con las cuentas mencionadas en la respuesta excluidas del cómputo de los 140 caracteres (“dmw140, parte 2”).
2018 2022
  • 29 de septiembre: la capacidad de editar Posts se lanza a un pequeño grupo de prueba. Los metadatos de los Posts editados se agregan al Objeto de Post cuando corresponde. Esto incluye los objetos edit_history y edit_controls. Estos metadatos no se devolverán para Posts creados antes de que se incorporara la funcionalidad de edición. No hay operadores asociados para estos metadatos. Para obtener más información sobre cómo funcionan las ediciones de Post, consulta los fundamentos de edición de Posts
Consejos de filtrado Familiarizarse con la cronología de X sobre cuándo y cómo se agregaron nuevas funciones puede ayudarte a crear consultas más efectivas. Aquí, query significa un filtro o regla que aplican las APIs históricas de X al archivo de Posts, usando PowerTrack Operators para hacer coincidencia con el JSON de los Posts. Un ejemplo es el operador lang:, que se utiliza para hacer coincidir Posts en un idioma especificado. X ofrece un servicio de clasificación de idiomas (que admite más de 50 idiomas) y las X APIs proporcionan estos metadatos en el JSON que se genera para cada Post. Así, si un Post está escrito en español, el atributo JSON “lang” se establece en “es”. Por lo tanto, si creas un filtro con la cláusula lang:es, solo hará coincidencia con Posts clasificados como español. La información de la cronología también puede ayudar a interpretar mejor los datos de los Posts recibidos. Supongamos que investigas la difusión de contenido sobre los Juegos Olímpicos de Verano de 2008 y 2012. Si aplicas solo el operador is:retweet para hacer coincidir Retweets, no habría datos coincidentes en 2008. Sin embargo, para 2012 probablemente habría millones de Retweets. A partir de esto, podrías concluir erróneamente que en 2008 los Retweets no eran una convención de los usuarios, o que simplemente nadie hizo Retweet sobre esos Juegos Olímpicos. Dado que los Retweets se convirtieron en un objeto de primera clase en 2009, necesitas agregar una cláusula de regla RT @ para ayudar a identificarlos en 2008. Tanto los Retweets como la clasificación por idioma de los Posts son ejemplos de atributos de Post con una larga historia y muchos detalles de producto. A continuación, analizaremos más detalles de estas y otras clases de atributos importantes para hacer coincidencia y comprender los datos de X.

Reconocimiento de falsos negativos

Al escribir filtros, un punto clave es que los Operadores de metadatos con los que se realiza la coincidencia tienen fechas de “creación”. Si crea un filtro con un Operador que actúa sobre metadatos introducidos después de que se publicó el Post, obtendrá un falso negativo. Por ejemplo, supongamos que le interesan todos los Posts que mencionan ‘snow’ y comparten un video. Si crea una regla con el Operador has:videos, que coincide con Posts con videos nativos, esa cláusula no coincidirá con ningún Post anterior a 2015. Sin embargo, compartir videos era común en X mucho antes de 2015. Antes de eso, los usuarios compartían enlaces a videos alojados en otros sitios; en 2015, X incorporó nuevas funciones de “compartir video” directamente en la plataforma. Para encontrar esos Posts anteriores de interés, incluiría una cláusula de regla como url:"youtube.com". Tenga en cuenta que, con las Search APIs, hay casos en los que se “completaron” metadatos a posteriori a medida que se reconstruía el índice. Un buen ejemplo son los cashtags,quesepopularizaronparahablardesıˊmbolosbursaˊtilesen2009.Despueˊsdequeseintrodujoeloperadorcashtags, que se popularizaron para hablar de símbolos bursátiles en 2009. Después de que se introdujo el operador cashtag en 2015, se reconstruyó el índice de Search y, en el proceso, se extrajo la entidad de símbolo de todos los cuerpos de los Posts, incluidos los de principios de 2006, cuando $ se usaba principalmente como jerga: “I hope it nownow $oon!”.

Identificación y filtrado de atributos de Post importantes para su caso de uso

Algunos metadatos, como los id numéricos de cuentas de X, existen desde el primer día (y son un ejemplo de metadatos de cuenta que nunca cambian). Otros metadatos no se introdujeron hasta mucho después del inicio de X en 2006. Entre los metadatos incorporados más recientemente se incluyen los metadatos de Retweets, las ubicaciones de los Posts, los títulos y descripciones de URL y el contenido multimedia “nativo”. A continuación se presentan algunos de los tipos más comunes de atributos de Post que se han visto afectados de forma fundamental por estas actualizaciones de la plataforma X. El comportamiento de filtrado/empate para estos depende, en la mayoría de los casos, de qué API histórica de Post se utilice. Para ayudar a determinar qué producto se adapta mejor a su investigación y caso de uso, los detalles de atributos que se proporcionan a continuación incluyen información general a nivel de producto.

Perfiles de X

Dado que, en esencia, X es un canal de comunicación global en tiempo real, la investigación con datos de Posts suele centrarse en quién se comunica. A menudo es útil saber cuál es el lugar de residencia de un usuario de X. Con frecuencia, saber que la biografía de una cuenta incluye menciones de intereses y aficiones puede llevarle a Posts relevantes. Es muy común querer escuchar Posts de cuentas de interés. Los atributos del perfil son clave para todos estos casos de uso. Cada cuenta en X tiene un perfil que incluye metadata como el @handle de X, el nombre para mostrar, una breve biografía, la ubicación (texto libre introducido por el usuario), el número de seguidores, entre otros. Algunos atributos nunca cambian, como el id numérico del usuario y la fecha de creación de la cuenta. Otros suelen cambiar día a día, semana a semana o mes a mes, como el número de Posts publicados y el número de cuentas seguidas y de seguidores. Otros atributos de la cuenta también pueden cambiar en cualquier momento, pero tienden a hacerlo con menos frecuencia: nombre para mostrar, ubicación y biografía. La carga útil JSON de cada Post incluye metadata de perfil de la cuenta del autor del Post. Si es un Retweet, también incluye metadata de perfil de la cuenta que publicó el Post original. La mutabilidad de la metadata de perfil de un Post depende por completo del producto histórico utilizado. Las Search APIs ofrecen Posts históricos con la configuración del perfil tal como está en el momento de la recuperación. Para Historical PowerTrack, el perfil es tal como era en el momento en que se publicó el Post, excepto para datos anteriores a 2011. Para Posts anteriores a 2011, la metadata del perfil refleja el perfil tal como era en septiembre de 2011.

Post original y Retweets

Los Retweets son otro ejemplo de convenciones impulsadas por los usuarios que se convierten en objetos oficiales. El Retweet surgió como una forma de “reenviar” contenido a otros. Empezó como un proceso manual de copiar y pegar un Post y anteponerle el patrón “RT @”. Este proceso acabó automatizándose mediante un nuevo botón de Retweet, con nuevos metadatos JSON. Nació el Retweet “oficial” y la acción de retuitear se convirtió en un evento de Post de primera clase. Junto con el nuevo botón de Retweet, se introdujeron nuevos metadatos, como la carga útil completa del Post original. Determinar si un Post es original o compartido es un criterio de filtrado común. En algunos casos, solo se necesita contenido original. En otros, la interacción del Post es prioritaria, por lo que los Retweets son clave. El operador de PowerTrack is:retweet permite incluir o excluir Retweets. Si se extraen datos anteriores a agosto de 2009, se necesitan dos estrategias para identificar (o no) Retweets. Antes de agosto de 2009, es necesario revisar el propio mensaje del Post y buscar coincidencias exactas con el patrón “RT @”. Para períodos posteriores a agosto de 2009, el operador is:retweet está disponible.

Clasificaciones de idioma de los Posts

El idioma en que está escrito un Post es de interés general. El idioma del Post puede ayudar a inferir su ubicación y, a menudo, solo se requiere un idioma específico para el análisis o la visualización. (Los perfiles de X también tienen una configuración de idioma preferido). Para filtrar por la clasificación de idioma de un Post, los productos históricos de X (Search API y Historical PowerTrack) difieren considerablemente. Cuando se creó el archivo de Search, todos los Posts se completaron retroactivamente con la clasificación de idioma de X. Por lo tanto, el operador lang: está disponible para todo el archivo de Posts. Con Historical PowerTrack, los metadatos de clasificación de idioma de X están disponibles en el archivo a partir del 26 de marzo de 2013. 

Geo-referencing Posts

Poder indicar dónde se publicó un Post (es decir, georreferenciarlo) es importante para muchos casos de uso. Hay tres métodos principales para la georreferenciación de Posts:
  • Referencias geográficas en el contenido de un Post
  • Posts geotagueados por el usuario.
  • Ubicación de “home” del perfil de la cuenta establecida por un usuario
Referencias geográficas en un mensaje de Post
La coincidencia basada en referencias geográficas dentro del mensaje de Post, si bien suele ser el método más desafiante porque depende del conocimiento local, es una opción para todo el archivo de Posts. Aquí hay un ejemplo de coincidencia georreferenciada de 2006 para el área de San Francisco, basado en un filtro de “golden gate”: https://x.com/biz/statuses/28311
Posts con geotag agregada por el usuario
En noviembre de 2009, X introdujo su Post Geotagging API, que permitió etiquetar Posts con una ubicación exacta. En junio de 2010, X introdujo X Places, que representa áreas geográficas a escala de recinto, vecindario o ciudad. Aproximadamente entre el 1% y el 2% de los Posts están geotagueados mediante cualquiera de los dos métodos. El historial de geotag disponible depende de la Historical API que esté utilizando. Con las Search APIs, la posibilidad de empezar a hacer coincidencias en Posts con algunos Geo Operators comenzó en marzo de 2010, y con otros en febrero de 2015. Si está utilizando Historical PowerTrack, la georreferenciación comienza el 1 de septiembre de 2011. Cuando se creó el archivo de Historical PowerTrack, no se incluyó ninguna geotag anterior a esta fecha.
Ubicación de “inicio” del perfil de la cuenta definida por un usuario
Todos los usuarios de X pueden establecer su Ubicación de perfil para indicar su lugar de residencia. Millones de usuarios de X proporcionan esta información, lo que incrementa significativamente la cantidad de geodatos en X Firehose. Estos metadatos de ubicación son una cadena de texto no normalizada, generada por el usuario y de formato libre. Aproximadamente el 30% de las cuentas tienen metadatos de Profile Geo que pueden resolverse a nivel de país. Al igual que con la geolocalización de los Post, los métodos de coincidencia y los periodos disponibles dependen de la Historical API que utilice. Historical PowerTrack permite a los usuarios intentar su propia coincidencia personalizada en estas cadenas de formato libre. Para facilitar ese proceso, X también ofrece un Profile Geo Enrichment que realiza la geocodificación cuando es posible, proporcionando metadatos normalizados y los Operadores correspondientes. Los Profile Geo Operators están disponibles tanto en Historical PowerTrack como en las Search APIs. Con Historical PowerTrack, estos metadatos de Profile Geo están disponibles a partir de junio de 2014. Con las Search APIs, estos metadatos están disponibles a partir de febrero de 2015. Compartir enlaces a páginas web, fotos y videos siempre ha sido un caso de uso fundamental en X. En sus primeros años, todas estas acciones implicaban incluir un enlace URL en el propio mensaje del Post. En 2011, X integró en su interfaz de usuario la posibilidad de compartir fotos directamente. En 2016 se añadieron los videos nativos. Dado este historial, existe una variedad de Operadores de filtrado para hacer coincidencias con este contenido. Hay un conjunto de Operadores que determinan si los Posts tienen enlaces, fotos o videos compartidos. Además, dado que la mayoría de las URLs compartidas en X se acortan para consumir menos caracteres de un Post (p. ej., generadas por un servicio como bitly o tinyurl), X proporciona enriquecimientos de data que generan una URL completa y expandida con la que se puede hacer coincidencia. Por ejemplo, si quisieras hacer coincidencia con Posts que incluyan enlaces sobre X y sistemas de alerta temprana, un filtro que haga referencia a “comunicación sobre clima severo” coincidiría con un Post que contenga esta URL http://bit.ly/1XV1tG4. En marzo de 2012 se introdujo el enriquecimiento de URL expandida. Antes de ese momento, las cargas útiles de los Posts incluían solo la URL proporcionada por el usuario. Por lo tanto, si el usuario incluía una URL acortada, podía resultar difícil hacer coincidencia con las URLs (expandidas) de interés. Con Historical PowerTrack y las APIs de búsqueda, estos metadatos están disponibles a partir de marzo de 2012. En julio de 2016 se introdujo el enriquecimiento de URL mejorada. Esta versión mejorada proporciona el título y la descripción HTML de un sitio web en la carga útil del Post, junto con Operadores para hacer coincidencia con esos campos. Con Historical PowerTrack, estos metadatos están disponibles en julio de 2016. Con las APIs de búsqueda, estos metadatos comienzan a aparecer en diciembre de 2014. En septiembre de 2016, X introdujo “adjuntos nativos”, donde un enlace compartido al final no cuenta para el límite de 140 caracteres del Post. Ambos enriquecimientos de URL siguen aplicándose a estos enlaces compartidos. Para otros detalles específicos del producto sobre el filtrado de URLs, consulta los artículos correspondientes para obtener más información.
I