API FeedScale - Método GET /posts
Este método permite obtener resultados indexados de posts de FeedScale desde BigQuery. Se pueden usar delimitadores temporales para acotar el contenido devuelto.
Parámetros GET
La llamada a la API se construye a partir de la estructura básica:
https://feedscale.trawlingweb.com/posts?token={APIKEY}
Parámetros QUERY
| Parámetro | Descripción | Default | Ejemplo |
|---|---|---|---|
| token | APIKEY para validar y acceder al sistema. Cada usuario tiene su propia APIKEY individual e intransferible. | Valor obligatorio | ?token=1234 |
| ts | Delimitador temporal inicial (tiempo pasado). Formato Unix Time en milisegundos. Los resultados se ordenan del pasado al presente (ASC). | Delimita a 1 mes en el pasado a partir de la petición | &ts=1518472804000 |
| tsi | Delimitador temporal final (tiempo presente). Formato Unix Time en milisegundos. | Delimita con la fecha de petición | &tsi=1524818189854 |
| size | Número de resultados por página | 500 (máximo: 500) | &size=100 |
Nota: También se acepta apiKey como alternativa a token, y TS/TSI en mayúsculas para compatibilidad.
Paginación
Cada solicitud a la API puede devolver un máximo de 500 posts coincidentes con su consulta. Sin embargo, pueden haber muchos más resultados que coincidan con tus parámetros de filtro. Para consumir todos los datos debes seguir realizando llamadas a la URL indicada en el parámetro next de la salida de cada solicitud.
Orden de resultados: Los resultados se ordenan en orden ascendente (ASC), del pasado (ts) al presente (tsi). Los posts más antiguos aparecen primero, y los más recientes al final de cada página.
Ejemplo de Salida con Paginación
{
"response": {
"data": [...],
"totalResults": 7940,
"restResults": 7435,
"next": "https://feedscale.trawlingweb.com/posts?token=1234&ts=1766312910631&tsi=1768866612000&size=500"
}
}
Campos de Paginación
| Campo | Descripción |
|---|---|
| totalResults | Número total de resultados que coinciden con la consulta |
| restResults | Número de resultados restantes por consumir |
| next | URL para obtener la siguiente página de resultados. null cuando no hay más resultados |
Modificar Número de Resultados por Página
Por defecto, la API devuelve 500 resultados por solicitud. Si necesitas recibir menos resultados por llamada, puedes ajustar este número utilizando el parámetro size=n.
Ejemplos:
size=100- Devolverá 100 resultados por páginasize=50- Devolverá 50 resultados por página- Sin
size- Devolverá 500 resultados (máximo)
Ejemplos de Llamadas
Consulta Básica (Último mes, 500 resultados por página)
https://feedscale.trawlingweb.com/posts?token=1234
Con Límite de Resultados
https://feedscale.trawlingweb.com/posts?token=1234&size=100
Últimas 24 Horas con Paginación
https://feedscale.trawlingweb.com/posts?token=1234&ts=1768818277820&tsi=1768904677820&size=100
Cómo Calcular Timestamps
Los timestamps deben estar en Unix Time en milisegundos.
JavaScript
const ahora = Date.now();
// Últimas 24 horas
const hace24Horas = ahora - (24 * 60 * 60 * 1000);
// Últimos 7 días
const hace7Dias = ahora - (7 * 24 * 60 * 60 * 1000);
// Último mes (30 días)
const hace30Dias = ahora - (30 * 24 * 60 * 60 * 1000);
// URL de ejemplo con paginación
const url = `https://feedscale.trawlingweb.com/posts?token=1234&ts=${hace24Horas}&tsi=${ahora}&size=100`;
Python
import time
ahora = int(time.time() * 1000) # milisegundos
hace24horas = ahora - (24 * 60 * 60 * 1000)
url = f"https://feedscale.trawlingweb.com/posts?token=1234&ts={hace24horas}&tsi={ahora}&size=100"
Tabla de Conversión
| Período | Milisegundos |
|---|---|
| 1 hora | 3,600,000 |
| 24 horas | 86,400,000 |
| 7 días | 604,800,000 |
| 30 días | 2,592,000,000 |
Consumir Todos los Resultados (Ejemplo)
JavaScript
async function consumirTodosLosResultados(urlInicial) {
let url = urlInicial;
let todosLosResultados = [];
while (url) {
const response = await fetch(url);
const data = await response.json();
todosLosResultados = todosLosResultados.concat(data.response.data);
console.log(`Obtenidos: ${todosLosResultados.length} / ${data.response.totalResults}`);
url = data.response.next; // Siguiente página o null si terminó
}
console.log(`Total obtenido: ${todosLosResultados.length}`);
return todosLosResultados;
}
// Uso
const url = 'https://feedscale.trawlingweb.com/posts?token=1234&size=500';
consumirTodosLosResultados(url);
Python
import requests
def consumir_todos_los_resultados(url_inicial):
url = url_inicial
todos_los_resultados = []
while url:
response = requests.get(url)
data = response.json()
todos_los_resultados.extend(data['response']['data'])
print(f"Obtenidos: {len(todos_los_resultados)} / {data['response']['totalResults']}")
url = data['response']['next'] # Siguiente página o None si terminó
print(f"Total obtenido: {len(todos_los_resultados)}")
return todos_los_resultados
# Uso
url = 'https://feedscale.trawlingweb.com/posts?token=1234&size=500'
resultados = consumir_todos_los_resultados(url)
Respuesta de Salida - RESPONSE
Estructura de la Respuesta
{
"response": {
"data": [
{
"id": 123,
"c_noticia": 456,
"published": "2025-12-21 10:00:00",
"autor": "Usuario",
"marca": "Ueno",
"origen": "twitter",
"audiencia": 1000,
"likes": 50,
"retweet": 10,
"comentarios": 5,
"text": "Texto del post...",
"url": "https://x.com/usuario/status/123",
"tono": "Positivo"
}
],
"totalResults": 7940,
"restResults": 7440,
"next": "https://feedscale.trawlingweb.com/posts?token=1234&ts=...&tsi=...&size=500"
}
}
Datos de la Publicación
| Campo | Descripción | Tipo |
|---|---|---|
| id | Código de identificación asignado a cada publicación | Entero |
| c_noticia | Código de la noticia | Entero |
| published | Fecha publicado el post (formato: YYYY-MM-DD HH:mm:ss) | Cadena |
| autor | Nombre del autor | Cadena |
| marca | Marca relacionada | Cadena |
| origen | Origen del post (twitter, instagram, facebook, etc.) | Cadena |
| audiencia | Audiencia estimada | Entero |
| likes | Número de likes | Entero |
| retweet | Número de retweets | Entero |
| comentarios | Número de comentarios | Entero |
| reproducciones | Número de reproducciones | Entero |
| interacciones | Total de interacciones | Entero |
| sentimiento | Valor de sentimiento | Entero |
| tono | Tono del mensaje (Positivo, Negativo, Neutro) | Cadena |
| lang | Idioma detectado | Cadena |
| title | Título del post | Cadena |
| url | URL de la publicación | Cadena |
| text | Texto del post | Cadena |
Códigos de Estado HTTP
| Código | Descripción |
|---|---|
| 200 | ¡Éxito! |
| 400 | Error de sintaxis o parámetros inválidos |
| 401 | Usuario no autorizado o sin token |
| 403 | API Key inválida o no autorizada |
| 500 | No se pudo ejecutar la consulta |
Health Check
Para verificar que el servidor está funcionando:
https://feedscale.trawlingweb.com/health
Respuesta:
{
"status": "ok",
"timestamp": "2026-01-20T10:00:00.000Z",
"service": "FeedScale API"
}
Ejemplos con cURL
# Básico (500 resultados)
curl "https://feedscale.trawlingweb.com/posts?token=1234"
# Con límite de 100 resultados por página
curl "https://feedscale.trawlingweb.com/posts?token=1234&size=100"
# Últimas 24 horas con paginación
AHORA=$(date +%s)000
HACE24H=$((AHORA - 86400000))
curl "https://feedscale.trawlingweb.com/posts?token=1234&ts=${HACE24H}&tsi=${AHORA}&size=100"