Saltar al contenido principal
Tenga en cuenta Hemos lanzado una nueva herramienta de cumplimiento para X API v2 llamada batch compliance. Esta nueva herramienta le permite cargar conjuntos de datos grandes de id de Post o de usuario para recuperar su estado de cumplimiento y determinar qué data requiere acción para poner sus conjuntos de datos en conformidad.
Además, tanto batch compliance como compliance firehose se han actualizado para admitir ediciones de Post. En compliance firehose se agregó un nuevo evento “tweet_edit”. Consulte la documentación de Compliance Data Objects para más detalles. Obtenga más información sobre cómo funciona la metadata de Edit Post en la página Edit Posts fundamentals.

Descripción general

Enterprise Uno de los valores fundamentales de X es defender y respetar la voz del usuario. Esto incluye respetar sus expectativas e intención cuando eliminan, modifican o editan el contenido que deciden compartir en X. Consideramos que esto es fundamental para la salud a largo plazo de una de las plataformas públicas de información en tiempo real más grandes del mundo. X pone el control en manos de sus usuarios, brindándoles la capacidad de gestionar su propia experiencia en X. Creemos que las empresas que consumen data de X tienen la responsabilidad de honrar las expectativas e intención de los usuarios finales. Para obtener más información sobre los tipos de eventos de cumplimiento posibles en la plataforma de X, consulte nuestro artículo Honoring User Intent on X. Cualquier desarrollador o empresa que consuma data de X a través de una API tiene la obligación de realizar todos los esfuerzos razonables para respetar los cambios en el contenido del usuario. Esta obligación se extiende a eventos del usuario como eliminaciones, modificaciones y cambios en las opciones de uso compartido (p. ej., cuando el contenido pasa a estar protegido o retenido). Esto también incluye cuando los usuarios editan sus Posts. Consulte el lenguaje específico en la Developer Policy y/o en su X Data Agreement para comprender cómo esta obligación afecta su uso de la data de X. X ofrece las siguientes soluciones que proporcionan información sobre estos eventos de cumplimiento del usuario y sobre si un Post o un Usuario específico está disponible públicamente o no. A continuación se presenta una breve descripción general de las soluciones y sus patrones de integración generales:

GET statuses/lookup y GET users/lookup

  • Formato: API REST. Consulta: GET statuses/lookup y GET users/lookup.
  • Estos endpoints siempre devuelven la versión más reciente de cualquier edición de Post. Todos los Objetos de Post que describen Posts creados después de la introducción de la función de edición incluirán metadatos de edición de Post. Esto se aplica incluso a los Posts que no fueron editados.
  • Para todos los Posts, las solicitudes realizadas más de 30 minutos después de su creación representarán el estado final de esos Posts.
  • Entregan información de disponibilidad para Posts o usuarios específicos, según lo definido por quien realiza la llamada como parte de la solicitud a la API.
  • Pueden usarse para verificaciones puntuales ad hoc sobre el estado de disponibilidad actual de un grupo específico de Posts/usuarios.
  • Ideal para clientes que necesitan una forma de comprobar el estado actual de un Post o de un usuario específico en un momento dado.
  • Estas API proporcionan un mecanismo útil que puede utilizarse por clientes que necesiten comprobar la disponibilidad de una pieza de contenido, por ejemplo cuando:
    1. Mostrar Posts
    2. Interactuar con uno o varios Posts o usuarios de forma 1:1
    3. Distribuir contenido de X a un tercero mediante una descarga de archivo permitida
    4. Almacenar Posts por períodos prolongados

Compliance Firehose (solo Enterprise)

  • Formato: Streaming API. Consulte: Compliance Firehose.
  • Entrega un stream en tiempo real de actividades de cumplimiento en X. Estas actividades incluyen cuando se editan los Posts.
  • Puede utilizarse para mantener el estado de cumplimiento en un conjunto de data almacenada a medida que se producen nuevos eventos de cumplimiento en la plataforma.
  • Ideal para clientes que consumen y almacenan grandes volúmenes de data de X durante períodos prolongados.

Guías

Mejores prácticas de conformidad

Recomendaciones y mejores prácticas

  • Cree esquemas de almacenamiento de datos que guarden el ID numérico de Post y el ID de usuario: Los mensajes del usuario requieren tomar medidas sobre todos los Posts de ese usuario. Por lo tanto, dado que todos los mensajes de cumplimiento se entregan únicamente por ID numérico, es importante diseñar esquemas de almacenamiento que mantengan la relación entre el Post y el usuario basándose en IDs numéricos. Quienes consumen datos deberán monitorear los eventos de cumplimiento tanto por ID de Post como por ID de usuario y poder actualizar el almacén de datos local de forma adecuada.
  • Cree esquemas que contemplen todos los estados de cumplimiento: Dependiendo de cómo se aborden las actividades de cumplimiento en diversas aplicaciones, puede ser necesario agregar otros metadatos al almacén de datos. Por ejemplo, quienes consumen datos pueden decidir agregar metadatos a una base de datos existente para facilitar la restricción de la visualización de contenido en países afectados por un mensaje status_withheld.
  • Cómo manejar eliminaciones de Retweet: Los Retweets son un tipo especial de Post en el que el mensaje original está anidado en un objeto dentro del Retweet. En este caso, hay dos IDs de Post referenciados en un Retweet: el ID del Retweet y el ID del mensaje original (incluido en el objeto anidado). Cuando se elimina un mensaje original, se emite un mensaje de eliminación de Post para el ID original. Los eventos de eliminación de Post normalmente desencadenan eventos de eliminación para todos los Retweets. Sin embargo, en algunos casos no se envían todos y los sistemas cliente deben ser tolerantes a eliminaciones de Retweet incompletas. La eliminación del ID original debería ser suficiente para eliminar todos los Retweets posteriores. Es una buena práctica hacer referencia al ID de Post original al almacenar Retweets y eliminar todos los Retweets referenciados al recibir eventos de eliminación de Post.

Objetos de cumplimiento de datos

API de Compliance Firehose

Los posibles tipos de eventos de cumplimiento incluyen eventos de Post (o “status”) y eventos de Usuario, para los cuales hay varios tipos descritos a continuación.   Tenga en cuenta:
  • Lea más sobre los estados de usuario aquí y nuestra política para desarrolladores sobre Posts eliminados aquí.
  • Compliance Firehose se ha actualizado para proporcionar eventos ‘tweet_edit’. 
  • Varios eventos de eliminación, protección y suspensión de usuario no son necesariamente permanentes y pueden alternar entre estados indefinidamente. Estos incluyen: user_delete, user_undelete, user_protect, user_unprotect y user_suspend, user_unsuspend.
  • Los user_deletes van seguidos de status_deletes 30 días después solo si el usuario no ha optado por user_undelete su cuenta. Es posible que un user_delete sea revertido por el usuario y que 30 días después no se eliminen todos sus Posts.
  • user_suspend es una acción que se mantiene vigente a menos que el usuario esté sujeto a un evento user_unsuspend. Estos no están sujetos a cambios en un período de 30 días.
Consulte la columna ‘Acción recomendada’ para entender cómo procesar cada tipo de evento a fin de respetar la privacidad y la intención del usuario final.
Tipo de mensaje originalObjetoPermanente (Sí/No)Acción recomendada
deleteStatusEliminar el Post asociado.
status_withheldStatusSuprimir el Post asociado en los países específicos indicados en el mensaje status_withheld.
dropStatusNoQuitar el Post de la vista pública.
undropStatusNoEl Status puede mostrarse nuevamente y tratarse como público.
tweet_editStatusRespetar y, cuando corresponda, mostrar la nueva edición.
user_deleteUserNoSuprimir o eliminar todos los Posts del usuario asociado.
user_undeleteUserNoTodos los Posts del usuario asociado pueden mostrarse nuevamente y tratarse como públicos.
user_protectUserNoSuprimir o eliminar todos los Posts del usuario asociado.
user_unprotectUserNoTodos los Posts del usuario asociado pueden mostrarse nuevamente y tratarse como públicos.
user_suspendUserNoSuprimir o eliminar todos los Posts del usuario asociado.
user_unsuspendUserNoTodos los Posts del usuario asociado pueden mostrarse nuevamente y tratarse como públicos.
scrub_geoUserEliminar todos los datos geográficos proporcionados por X para todos los Posts del usuario anteriores al Post especificado en el mensaje scrub_geo. Tenga en cuenta que los Posts posteriores de un usuario pueden contener datos geográficos que pueden usarse.
user_withheldUserSuprimir los Posts del usuario asociado en los países específicos indicados en el mensaje user_withheld.
deleteFavoriteEliminar el like/favorito asociado.

Ejemplos de payload

Consulta los siguientes ejemplos de payload para cada evento de cumplimiento descrito en la tabla anterior. Edición de Post
{"tweet_edit":
   {
     "id": "1557445923210514432"
     "initial_tweet_id": "1557433858676740098",
     "edit_tweet_ids": ["1557433858676740098", "1557445923210514432"],
     "timestamp_ms": "1660155761384"
   }
 }
DELETE de Post
{
  "delete": {
    "status": {
      "id": 601430178305220600,
      "id_str": "601430178305220608",
      "user_id": 3198576760,
      "user_id_str": "3198576760"
    },
    "timestamp_ms": "1432228155593"
  }
}
Post retenido
{
  "status_withheld": {
    "status": {
      "id": 601430178305220600,
      "id_str": "601430178305220608",
      "user_id": 3198576760,
      "user_id_str": "3198576760"
    },
    "withheld_in_countries": [
      "XY"
    ],
    "timestamp_ms": "1432228155593"
  }
}
Soltar
{
  "drop": {
    "status": {
      "id": 601430178305220600,
      "id_str": "601430178305220600",
      "user_id": 3198576760,
      "user_id_str": "3198576760"
    },
    "timestamp_ms": "1432228155593"
  }
}
Revertir eliminación
{
  "undrop": {
    "status": {
      "id": 601430178305220600,
      "id_str": "601430178305220600",
      "user_id": 3198576760,
      "user_id_str": "3198576760"
    },
    "timestamp_ms": "1432228155593"
  }
}

Depurar geolocalización

{
  "scrub_geo": {
    "user_id": 519761961,
    "up_to_status_id": 411552403083628540,
    "up_to_status_id_str": "411552403083628544",
    "user_id_str": "519761961",
    "timestamp_ms": "1432228180345"
  }
}
Eliminación de usuario
{
  "user_delete": {
    "id": 771136850,
    "timestamp_ms": "1432228153548"
  }
}
Revertir eliminación de usuario
{
  "user_undelete": {
    "id": 796250066,
    "timestamp_ms": "1432228149062"
  }
}
Usuario oculto
{
  "user_withheld": {
    "user": {
      "id": 1375036644,
      "id_str": "1375036644"
    },
    "withheld_in_countries": [
      "XY"
    ],
    "timestampMs": "2014-08-27T23:49:41.839+00:00"
  }
}
Protección del usuario
{
  "user_protect": {
    "id": 3182003550,
    "timestamp_ms": "1432228177137"
  }
}
Quitar protección de usuario
{
  "user_unprotect": {
    "id": 2911076065,
    "timestamp_ms": "1432228180113"
  }
}
Suspensión de usuarios
{
  "user_suspend": {
    "id": 3120539094,
    "timestamp_ms": "1432228194217"
  }
}
Rehabilitación de la cuenta del usuario
{
  "user_unsuspend": {
    "id": 3293130873,
    "timestamp_ms": "1432228193828"
  }
}

Integración de Compliance Firehose

Compliance Firehose es una API de stream en tiempo real que entrega eventos de cumplimiento que ocurren en la plataforma X. Para comprender los eventos de cumplimiento y cómo se generan en X, consulta nuestro artículo Honoring User Intent on X. Es importante señalar que los eventos de Post y de Usuario se entregan de forma independiente y que cada uno debe procesarse por separado (es decir, la eliminación de un Post no implica un evento de Usuario y viceversa). Varios eventos de Usuario no son necesariamente permanentes y pueden alternar entre estados indefinidamente. Estos incluyen: user_delete, user_undelete, user_protect, user_unprotect, user_suspend y user_unsuspend. Los user_delete van seguidos por status_delete 30 días después solo si el usuario no ha seleccionado user_undelete para su cuenta. Es posible que un user_delete sea revertido por el usuario y que, por lo tanto, 30 días después no se produzcan eliminaciones de todos sus Posts. El user_suspend es una acción que permanece vigente a menos que el usuario esté sujeto a un evento user_unsuspend. Estos no están sujetos a cambios en un período de 30 días. Nunca es apropiado mostrar eventos de cumplimiento directamente a los usuarios de tu software ni incorporarlos de otro modo en tus productos o experiencias para clientes. Están destinados únicamente a mantener el cumplimiento y respetar las acciones de los usuarios de X.

Integración con el Compliance Firehose

Para integrar el Compliance Firehose en su sistema, deberá crear una integración que pueda hacer lo siguiente:
  1. Establecer una conexión de stream con cada partición de la API de stream del Compliance Firehose
  2. Manejar altos volúmenes de data: desacoplar la ingesta del stream del procesamiento adicional utilizando procesos asíncronos
  3. Reconectarse automáticamente a las particiones del stream cuando se desconecte por cualquier motivo
  4. Procesar eventos de cumplimiento que sean relevantes para los datos de Post y User que haya almacenado, de acuerdo con la guía presentada arriba

Respetar la intención del usuario en Twitter

Creemos que respetar la privacidad y la intención de los usuarios de X es fundamental para la salud a largo plazo de una de las plataformas públicas de información en tiempo real más grandes del mundo. X pone los controles de privacidad en manos de sus usuarios, dándoles la capacidad de gestionar su propia experiencia en X. Como empresas que consumen datos de X, tenemos la responsabilidad colectiva de respetar la privacidad y las acciones de los usuarios finales para mantener este entorno de confianza y respeto. Hay una variedad de situaciones que pueden afectar a los Posts y a las cuentas de usuario y que influyen en cómo se muestran en la plataforma. Las acciones que afectan la privacidad y la intención se definen tanto a nivel de Estado (Post) como a nivel de Usuario. Estas acciones incluyen:

Usuario

AcciónDescripción
Proteger cuentaUn usuario de X puede proteger o desproteger su cuenta en cualquier momento. Las cuentas protegidas requieren la aprobación manual del usuario para cada persona a la que se le permita ver los Posts de su cuenta. 
Para obtener más información, consulta About Public and Protected Posts.
Eliminar cuentaUn usuario de X puede decidir eliminar su cuenta y todos los mensajes de estado asociados en cualquier momento. X conserva la información de la cuenta durante 30 días después de la eliminación, por si el usuario decide revertir la eliminación y reactivar su cuenta.
Suprimir datos de ubicaciónUn usuario de X puede eliminar todos los datos de ubicación de Posts anteriores en cualquier momento. Esto se conoce como “scrub geo”.
Suspender cuentaX se reserva el derecho de suspender cuentas que infrinjan las Reglas de X o cuando se sospeche que una cuenta ha sido vulnerada o comprometida. Las suspensiones de cuenta solo pueden revertirse (anular la suspensión) por X.
Retener cuentaX se reserva el derecho de retener de forma reactiva el acceso a cierto contenido en un país específico en ocasiones. Una cuenta retenida solo puede dejar de estar retenida por X. 
Para obtener más información, consulta Country Withheld Content.

Estado

AcciónDescripción
Eliminar estadoUn usuario de X puede eliminar un estado en cualquier momento. Los estados eliminados no se pueden revertir y se eliminan de forma permanente.
Retener estadoX se reserva el derecho de retener de forma reactiva el acceso a cierto contenido en un país específico en determinados momentos. Un estado retenido solo puede dejar de estar retenido por X.
Para obtener más información, consulta Country Withheld Content.

Seguimiento de cambios de usuario y estado

El estado de un usuario o de un estado puede cambiar en cualquier momento debido a alguna de las acciones anteriores, lo que afecta la manera en que se espera que los consumidores de X data traten la disponibilidad y la privacidad de todo el contenido asociado. Cuando ocurren estas acciones, se envía un mensaje de cumplimiento correspondiente que indica que el estado de un usuario o de un estado ha cambiado.

Referencia de API

GET compliance/firehose

Métodos

MétodoDescripción
GET /compliance/:streamConectarse al stream de datos

Autenticación

Todas las solicitudes a la Compliance Firehose API deben usar autenticación básica HTTP, construida a partir de una combinación válida de dirección de correo electrónico y contraseña utilizada para iniciar sesión en su cuenta en console.gnip.com. Las credenciales deben enviarse en el encabezado Authorization en cada solicitud.

GET /compliance/:stream

Establece una conexión persistente con el stream de datos Compliance firehose, a través del cual se entregarán los eventos de cumplimiento.
Request MethodHTTP GET
Connection TypeKeep-Alive
URLSe encuentra en la página de ayuda de la API del stream en tu panel y se asemeja a la siguiente estructura:


https://gnip-stream.x.com/stream/compliance/accounts/:account_name/publishers/twitter/:stream_label.json?partition=1

Nota: El parámetro “partition” es obligatorio. Deberás conectarte a las 8 particiones, cada una con el 12,5% del volumen total, para consumir el stream completo.
CompressionGzip. Para conectarte al stream usando compresión Gzip, simplemente envía un encabezado Accept-Encoding en la solicitud de conexión. El encabezado debería verse como lo siguiente:

Accept-Encoding: gzip
Character EncodingUTF-8
Response FormatJSON. El encabezado de tu solicitud debe especificar el formato JSON para la respuesta.
Rate Limit10 solicitudes por 60 segundos.
Read TimeoutConfigura un tiempo de espera de lectura en tu cliente y asegúrate de que sea superior a 30 segundos.
Support for Tweet editsTodas las ediciones de Tweet desencadenan un evento de Compliance “tweet_edit”. Consulta la documentación de Compliance Data Objects para más detalles.
Example Curl Request La siguiente solicitud de ejemplo se realiza con cURL en la línea de comandos:
curl --compressed -v -uexample@customer.com "https://gnip-stream.x.com/stream/compliance/accounts/:account_name/publishers/twitter/:stream_label.json?partition=1"
Nota: la solicitud anterior solo se conecta a partition=1 del Compliance firehose; deberá conectarse a las 8 particiones para consumir la totalidad de este stream.

Códigos de respuesta

La API puede devolver las siguientes respuestas para estas solicitudes. La mayoría de los códigos de error se devuelven con una cadena con detalles adicionales en el cuerpo. Para respuestas distintas de 200, los clientes deben intentar reconectarse.
EstadoTextoDefinición
200CorrectoLa conexión se abrió correctamente y se enviarán nuevas actividades a medida que lleguen.
401No autorizadoLa autenticación HTTP falló debido a credenciales no válidas. Inicia sesión en console.gnip.com con tus credenciales para asegurarte de que las estás usando correctamente en tu solicitud.
406No aceptableGeneralmente, esto ocurre cuando tu cliente no incluye correctamente los encabezados para aceptar la codificación gzip del stream, pero también puede ocurrir en otras circunstancias. Contendrá un mensaje JSON similar a: “Esta conexión requiere compresión. Para habilitar la compresión, envía un encabezado ‘Accept-Encoding: gzip’ en tu solicitud y prepárate para descomprimir el stream a medida que se lea en el lado del cliente.”
429Límite de tasa alcanzadoTu App ha superado el límite de solicitudes de conexión.
503Servicio no disponibleProblema del servidor de Twitter. Vuelve a conectarte usando un patrón de retroceso exponencial. Si no se ha publicado ningún aviso sobre este problema en la X API Status Page, contacta con soporte.

Otras recomendaciones y prácticas recomendadas

  • Cree esquemas de almacenamiento de datos que conserven el id numérico del Tweet y el id de usuario: Los mensajes de usuario requieren tomar medidas sobre todos los Tweets de ese usuario. Por lo tanto, dado que todos los mensajes de cumplimiento se entregan únicamente por id numérico, es importante diseñar esquemas de almacenamiento que mantengan la relación entre el Tweet y el usuario en función de ids numéricos. Los consumidores de datos deberán monitorear los eventos de cumplimiento tanto por id de Tweet como por id de usuario y poder actualizar el almacén de datos local de manera adecuada.
  • Cree esquemas que contemplen todos los estados de cumplimiento: Según cómo se gestionen las actividades de cumplimiento en distintas aplicaciones, puede ser necesario agregar otros metadatos al almacén de datos. Por ejemplo, los consumidores de datos pueden decidir agregar metadatos a una base de datos existente para facilitar la restricción de la visualización de contenido en países afectados por un mensaje status_withheld.
  • Gestión de eliminaciones de Retweet: Los Retweets son un tipo especial de Tweet en el que el mensaje original está anidado en un objeto dentro del Retweet. En este caso, se hace referencia a dos ids de Tweet en un Retweet: el id del Retweet y el id del mensaje original (incluido en el objeto anidado). Cuando se elimina un mensaje original, se emite un mensaje de eliminación de Tweet para el id original. NO se emiten mensajes de eliminación posteriores para todos los Retweets. La eliminación del id original debería ser suficiente para eliminar todos los Retweets posteriores.
I