Creación de consultas para buscar Posts
Los endpoints de búsqueda aceptan una única consulta mediante una solicitud GET y devuelven un conjunto de Posts históricos que coinciden con la consulta. Las consultas se componen de operadores que se utilizan para hacer coincidir una variedad de atributos del Post.
Limitaciones de las consultas
Tus consultas estarán limitadas según el nivel de acceso que utilices.
Si tienes acceso Básico o Pro, tu consulta puede tener hasta 512 caracteres en el endpoint de búsqueda reciente.
Si tienes acceso Pro, tu consulta puede tener hasta 1.024 caracteres en el endpoint de búsqueda en el archivo completo.
Disponibilidad de operadores
Si bien la mayoría de los operadores están disponibles para cualquier desarrollador, hay varios reservados para ciertos niveles de acceso. Indicamos qué nivel de acceso tiene cada operador en la tabla de la lista de operadores mediante las siguientes etiquetas:
- Operadores básicos (Core): Disponibles al usar cualquier Project.
- Operadores avanzados: Disponibles al usar un Project con cierto nivel de acceso
Tipos de operadores: autónomos y que requieren conjunción
Los operadores autónomos pueden usarse solos o junto con cualquier otro operador (incluidos aquellos que requieren conjunción).
Por ejemplo, la siguiente consulta funcionará porque utiliza el operador #hashtag, que es autónomo:
#xapiv2
Los operadores que requieren conjunción no pueden usarse por sí solos en una consulta; solo pueden usarse cuando se incluye al menos un operador autónomo en la consulta. Esto se debe a que usar estos operadores solos sería demasiado general y generaría coincidencias con un volumen extremadamente alto de Posts.
Por ejemplo, las siguientes consultas no están permitidas, ya que contienen únicamente operadores que requieren conjunción:
has:media
has:links OR is:retweet
Si agregamos un operador autónomo, como la frase "X data", la consulta funcionará correctamente.
"X data" has:mentions (has:media OR has:links)
Operadores booleanos y agrupación
Si desea encadenar varios operadores en una sola consulta, dispone de las siguientes herramientas:
| |
|---|
| Lógica AND | Operadores sucesivos separados por un espacio aplican la lógica booleana “AND”, lo que significa que los Posts coincidirán solo si se cumplen ambas condiciones. Por ejemplo, snow day #NoSchool coincidirá con Posts que contengan los términos snow y day y el hashtag #NoSchool. |
| Lógica OR | Operadores sucesivos con OR entre ellos aplican la lógica OR, lo que significa que los Posts coincidirán si se cumple cualquiera de las condiciones. Por ejemplo, especificar grumpy OR cat OR #meme coincidirá con cualquier Post que contenga al menos los términos grumpy o cat, o el hashtag #meme. |
| Lógica NOT, negación | Anteponer un guion (-) a una palabra clave (o a cualquier operador) la niega (NOT). Por ejemplo, cat #meme -grumpy coincidirá con Posts que contienen el hashtag #meme y el término cat, pero solo si no contienen el término grumpy. Una cláusula de consulta común es -is:retweet, que no coincidirá con Retweets, por lo que coincidirá solo con Posts originales, Quote Tweets y respuestas. Todos los operadores se pueden negar, pero los operadores negados no se pueden usar solos. |
| Agrupación | Puede usar paréntesis para agrupar operadores. Por ejemplo, (grumpy cat) OR (#meme has:images) devolverá Posts que contengan los términos grumpy y cat, o Posts con imágenes que contengan el hashtag #meme. Tenga en cuenta que primero se aplican los AND y luego los OR. |
Una nota sobre las negaciones
El operador -is:nullcast siempre debe estar negado.
Los operadores negados no se pueden usar solos.
No niegue un conjunto de operadores agrupados entre paréntesis. En su lugar, niegue cada operador individual. Por ejemplo, en lugar de usar skiing -(snow OR day OR noschool), recomendamos usar skiing -snow -day -noschool.
Al combinar la funcionalidad AND y OR, el siguiente orden de operaciones determinará cómo se evalúa tu consulta.
- Primero se combinan los operadores conectados con lógica AND
- Luego se aplican los operadores conectados con lógica OR
Por ejemplo:
apple OR iphone ipad se evaluará como apple OR (iphone ipad)
ipad iphone OR android se evaluará como (iphone ipad) OR android
Para eliminar incertidumbres y asegurarte de que tu consulta se evalúe como pretendes, agrupa los términos con paréntesis cuando corresponda.
Por ejemplo:
(apple OR iphone) ipad
iphone (ipad OR android)
Puntuación, diacríticos y distinción entre mayúsculas y minúsculas
Si especifica una consulta de palabra clave o hashtag con acentos o diacríticos, esta coincidirá con el texto del Post que contenga tanto el término con acentos y diacríticos como el mismo término con caracteres normales. Por ejemplo, las consultas con la palabra clave Diacrítica o el hashtag #cumpleaños coincidirán con Diacrítica o #cumpleaños, así como con Diacritica o #cumpleanos sin la tilde en í o la eñe.
Los caracteres con acentos o diacríticos se tratan igual que los caracteres normales y no se consideran límites de palabra. Por ejemplo, una consulta con la palabra clave cumpleaños solo coincidiría con actividades que contengan la palabra cumpleaños y no coincidiría con actividades que contengan cumplea, cumplean u os.
Todos los operadores se evalúan sin distinción entre mayúsculas y minúsculas. Por ejemplo, la consulta cat coincidirá con Posts que contengan cualquiera de las siguientes variantes: cat, CAT, Cat.
El comportamiento de coincidencia del filtered stream funciona de manera diferente al de Search Posts. Al crear una regla de filtered stream, tenga en cuenta que las palabras clave y los hashtags que incluyen acentos y diacríticos solo coincidirán con términos que también incluyan el acento y el diacrítico, y no coincidirán con términos que usen caracteres normales en su lugar.
Por ejemplo, las reglas de filtered stream que incluyan la palabra clave Diacrítica o el hashtag #cumpleaños solo coincidirán con los términos Diacrítica y #cumpleaños, y no coincidirán con Diacritica o #cumpleanos sin la tilde en í o la eñe.
Especificidad y eficiencia
Cuando empiece a crear su consulta, es importante tener en cuenta algunos aspectos.
- Usar operadores amplios y autónomos en su consulta, como una sola palabra clave o un #hashtag, generalmente no se recomienda, ya que probablemente coincidirá con un volumen masivo de Posts. Crear una consulta más sólida dará como resultado un conjunto más específico de Posts coincidentes y, con suerte, reducirá la cantidad de ruido en la carga útil que tendrá que revisar para encontrar información valiosa.
- Por ejemplo, si su consulta fuera solo la palabra clave
happy, probablemente obtendría entre 200.000 y 300.000 Posts por día.
- Agregar más operadores condicionales acota sus resultados de búsqueda; por ejemplo:
(happy OR happiness) place_country:GB -birthday -is:retweet
- Escribir consultas eficientes también ayuda a mantenerse dentro de la restricción de longitud de caracteres de la consulta. El conteo de caracteres incluye toda la cadena de consulta, incluidos los espacios y los operadores.
- Por ejemplo, la siguiente consulta tiene 59 caracteres:
(happy OR happiness) place_country:GB -birthday -is:retweet
Al usar los endpoints de Search Posts, los operadores no harán coincidencia con el contenido del Post original citado, pero sí con el contenido incluido en el Quote Tweet.
Sin embargo, tenga en cuenta que filtered stream hará coincidencia tanto con el contenido del Post original citado como con el contenido del Quote Tweet.
Creación iterativa de una consulta
Pruebe su consulta pronto y con frecuencia
Es poco común que una consulta devuelva los resultados “correctos” a la primera. Hay tanto contenido en X que puede no ser evidente al principio, y la sintaxis de consulta descrita arriba puede resultar difícil de ajustar a su búsqueda. A medida que desarrolle una consulta, es importante probarla periódicamente.
Para esta sección, comenzaremos con la siguiente consulta y la ajustaremos según los resultados que obtengamos durante la prueba:
happy OR happiness
Usa los resultados para acotar la consulta
A medida que pruebas la consulta, debes revisar los Posts devueltos para ver si incluyen los datos que esperas y deseas recibir. Empezar con una consulta amplia y un superconjunto de coincidencias de Post te permite revisar el resultado y acotar la consulta para filtrar los resultados no deseados.
Cuando probamos la consulta de ejemplo, notamos que estábamos obteniendo Posts en una variedad de idiomas. En esta situación, queremos recibir solo Posts en inglés, así que vamos a añadir el operador lang::
(happy OR happiness) lang:en
La prueba arrojó varios Posts felicitando a personas por su cumpleaños, así que vamos a añadir -birthday como operador de palabra clave negado. También queremos recibir solo Posts originales, por lo que añadimos el operador negado -is:retweet:
(happy OR happiness) lang:en -birthday -is:retweet
Ajustar para incluir cuando sea necesario
Si nota que no está recibiendo los datos que espera y sabe que existen Posts que deberían devolverse, quizá deba ampliar su consulta eliminando operadores que podrían estar filtrando los datos deseados.
En nuestro ejemplo, observamos que había otros Posts en nuestra cronología personal que expresaban la emoción que buscamos y no se incluyeron en los resultados de la prueba. Para garantizar una mayor cobertura, vamos a añadir las palabras clave excited y elated.
(happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet
Ajuste según las tendencias/repuntes populares durante el periodo
Las tendencias van y vienen rápidamente en X. Mantener su consulta debe ser un proceso activo. Si planea usar una consulta durante un tiempo, le sugerimos que revise periódicamente los datos que está recibiendo para ver si necesita realizar ajustes.
En nuestro ejemplo, notamos que empezamos a recibir algunos Posts que desean a las personas “felices fiestas”. Como no queremos que estos Posts se incluyan en nuestros resultados, vamos a agregar la palabra clave negada -holidays.
(happy OR happiness OR excited OR elated) lang:en -birthday -is:retweet -holidays
Agregar una consulta a tu solicitud
Para agregar una consulta a tu solicitud, debes usar el parámetro query. Como con cualquier parámetro de consulta, asegúrate de codificar en HTTP la consulta que desarrollaste.
A continuación se muestra un ejemplo de cómo se vería esto usando un comando cURL, con los parámetros adicionales tweet.fields y max_results. Si deseas usar este comando, asegúrate de reemplazar $BEARER_TOKEN por tu propio Bearer Token:
curl https://api.x.com/2/tweets/search/recent?query=cat%20has%3Amedia%20-grumpy&tweet.fields=created_at&max_results=100 -H "Authorization: Bearer $BEARER_TOKEN"
Seguimiento de un desastre natural
La siguiente consulta coincide con Posts originales de agencias meteorológicas y estaciones que hablan sobre el huracán Harvey, que azotó Houston en 2017.
Así se vería la consulta sin la codificación HTTP:
has:geo (from:NWSNHC OR from:NHC\_Atlantic OR from:NWSHouston OR from:NWSSanAntonio OR from:USGS\_TexasRain OR from:USGS_TexasFlood OR from:JeffLindner1) -is:retweet
Y así se vería la consulta con la codificación HTTP, el parámetro de consulta y el URI de búsqueda reciente:
https://api.x.com/2/tweets/search/recent?query=-is%3Aretweet%20has%3Ageo%20(from%3ANWSNHC%20OR%20from%3ANHC\_Atlantic%20OR%20from%3ANWSHouston%20OR%20from%3ANWSSanAntonio%20OR%20from%3AUSGS\_TexasRain%20OR%20from%3AUSGS_TexasFlood%20OR%20from%3AJeffLindner1)
Analizar el sentimiento de una conversación
La siguiente regla puede usarse para comprender mejor el sentimiento de la conversación en torno al hashtag #nowplaying, pero limitada únicamente a los Posts publicados en Norteamérica.
A continuación se muestran dos consultas distintas, una para positivo y otra para negativo, sin la codificación HTTP:
#nowplaying (happy OR exciting OR excited OR favorite OR fav OR amazing OR lovely OR incredible) (place\_country:US OR place\_country:MX OR place_country:CA) -horrible -worst -sucks -bad -disappointing
#nowplaying (horrible OR worst OR sucks OR bad OR disappointing) (place\_country:US OR place\_country:MX OR place_country:CA) -happy -exciting -excited -favorite -fav -amazing -lovely -incredible
Y a continuación se muestra cómo quedaría la consulta con la codificación HTTP, el parámetro query y el URI de búsqueda reciente:
https://api.x.com/2/tweets/search/recent?query=%23nowplaying%20(happy%20OR%20exciting%20OR%20excited%20OR%20favorite%20OR%20fav%20OR%20amazing%20OR%20lovely%20OR%20incredible)%20(place\_country%3AUS%20OR%20place\_country%3AMX%20OR%20place_country%3ACA)%20-horrible%20-worst%20-sucks%20-bad%20-disappointing
https://api.x.com/2/tweets/search/recent?query=%23nowplaying%20(horrible%20OR%20worst%20OR%20sucks%20OR%20bad%20OR%20disappointing)%20(place\_country%3AUS%20OR%20place\_country%3AMX%20OR%20place_country%3ACA)%20-happy%20-exciting%20-excited%20-favorite%20-fav%20-amazing%20-lovely%20-incredible
Encontrar Posts relacionados con una anotación de Post específica
Esta regla se creó para buscar Posts originales que incluyan una imagen de una mascota que no sea un gato, donde el idioma identificado en el Post sea japonés. Para ello, usamos el operador context: para aprovechar la funcionalidad de Post annotation. Primero utilizamos el endpoint de Post lookup y el parámetro tweet.fields=context_annotations para identificar qué IDs de domain.entity necesitamos usar en nuestra consulta:
- Los Posts relacionados con gatos devuelven
domain 66 (categoría Interests and Hobbies) con la entity 852262932607926273 (Cats).
- Los Posts relacionados con mascotas devuelven
domain 65 (Interests and Hobbies Vertical) con la entity 852262932607926273 (Pets).
Así se vería la consulta sin codificación HTTP:
context:65.852262932607926273 -context:66.852262932607926273 -is:retweet has:images lang:ja
Y así se vería la consulta con codificación HTTP, el parámetro query y el URI de búsqueda reciente:
https://api.x.com/2/tweets/search/recent?query=context%3A65.852262932607926273%20-context%3A66.852262932607926273%20-is%3Aretweet%20has%3Aimages%20lang%3Aja
Prueba la herramienta de creación de consultas para obtener ayuda adicional.