El contenido de IA sin datos en vivo es una basura. Los artículos sobre las 'mejores API' con precios inventados y comparaciones de productos con características imaginarias fallan porque el LLM inventó detalles. Este tutorial crea un canal de contenido que obtiene datos reales antes de generar texto: precios actuales de los resultados de búsqueda, opiniones de los usuarios de Reddit y detalles del producto de Amazon. El resultado pasa la verificación de hechos porque los datos provienen de fuentes reales.
Requisitos previos
- Python 3.10+
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Una clave API de OpenAI para la generación de contenido
Guia paso a paso
Paso 1: Cree el buscador de datos de múltiples fuentes
Extraiga datos de Google, Reddit y Amazon a través de Scavio.
import os, requests, json
SK = os.environ['SCAVIO_API_KEY']
OK = os.environ['OPENAI_API_KEY']
SH = {'x-api-key': SK, 'Content-Type': 'application/json'}
def fetch_google(q):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': q, 'country_code': 'us'}).json()
return [{'title': r['title'], 'snippet': r.get('snippet', ''), 'url': r['link']}
for r in data.get('organic_results', [])[:5]]
def fetch_reddit(q):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': q, 'platform': 'reddit', 'country_code': 'us'}).json()
return [{'title': r['title'], 'snippet': r.get('snippet', '')}
for r in data.get('organic_results', [])[:5]]
def fetch_products(q):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': q, 'platform': 'amazon', 'marketplace': 'US'}).json()
return [{'title': p.get('title', ''), 'price': p.get('price', 'N/A'), 'rating': p.get('rating', '')}
for p in data.get('products', [])[:5]]Paso 2: Elaborar un resumen de investigación
Recopile datos de todas las fuentes en un resumen estructurado para el LLM.
def research(topic, product_query=None):
brief = f'Topic: {topic}\n\n=== Google ===\n'
g = fetch_google(topic)
brief += '\n'.join(f"- {r['title']}: {r['snippet']}" for r in g)
brief += '\n\n=== Reddit ===\n'
r = fetch_reddit(topic)
brief += '\n'.join(f"- {d['title']}: {d['snippet']}" for d in r)
credits = 2
if product_query:
p = fetch_products(product_query)
brief += '\n\n=== Amazon Products ===\n'
brief += '\n'.join(f"- {x['title']}: {x['price']} ({x['rating']})" for x in p)
credits += 1
print(f'Research cost: ${credits * 0.005:.3f}')
return briefPaso 3: Generar contenido fundamentado
Pase el informe al LLM con instrucciones estrictas para utilizar únicamente los datos proporcionados.
def generate(topic, brief):
resp = requests.post('https://api.openai.com/v1/chat/completions',
headers={'Authorization': f'Bearer {OK}', 'Content-Type': 'application/json'},
json={'model': 'gpt-4o', 'temperature': 0.3, 'messages': [
{'role': 'system', 'content': 'Write based ONLY on the research brief. No fabricated stats. '
'If data is missing, say so. Cite Reddit as "users report". Start with a direct answer.'},
{'role': 'user', 'content': f'Write 600 words about: {topic}\n\n{brief}'}]})
return resp.json()['choices'][0]['message']['content']
brief = research('best noise canceling headphones 2026', 'noise canceling headphones')
article = generate('best noise canceling headphones 2026', brief)
print(article[:300])Paso 4: Validar precios en el contenido generado
Verifique que los montos en dólares del artículo aparezcan en los datos de origen.
import re
def validate(content, brief):
source = brief.lower()
prices = re.findall(r'\$[\d,.]+', content)
issues = [p for p in prices if p.lower() not in source]
if issues:
print(f'WARNING: {len(issues)} unverified prices: {issues}')
else:
print('All prices verified against source data.')
return issues
validate(article, brief)Ejemplo en Python
import os, requests
SK = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': SK, 'Content-Type': 'application/json'}
def research(topic):
g = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': topic, 'country_code': 'us'}).json().get('organic_results', [])[:3]
r = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': topic, 'platform': 'reddit', 'country_code': 'us'}).json().get('organic_results', [])[:3]
print(f'{len(g)} Google + {len(r)} Reddit results. Cost: $0.010')
return g, r
research('best serp api 2026')Ejemplo en JavaScript
const SK = process.env.SCAVIO_API_KEY;
const SH = { 'x-api-key': SK, 'Content-Type': 'application/json' };
async function research(topic) {
const [g, r] = await Promise.all([
fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query: topic, country_code: 'us' })
}).then(r => r.json()),
fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query: topic, platform: 'reddit', country_code: 'us' })
}).then(r => r.json()),
]);
console.log(`${(g.organic_results||[]).length}G + ${(r.organic_results||[]).length}R. Cost: $0.010`);
}
research('best serp api 2026').catch(console.error);Salida esperada
Research cost: $0.015
The Sony WH-1000XM5 remains the top noise canceling headphone
in 2026, priced at $298 on Amazon with a 4.6 rating. Users on
Reddit report the XM5 noise cancellation outperforms Bose QC
Ultra in airplane environments...
All prices verified against source data.