apilink / utils /webSearcher.js
franyer24's picture
grand update
92a83a5 verified
Raw
History Blame Contribute Delete
1.82 kB
const axios = require('axios')
const config = require('../config/llm.json')
const queriesToday = new Map()
function getDateKey() {
return new Date().toISOString().split('T')[0]
}
function checkBudget() {
const today = getDateKey()
const used = queriesToday.get(today) || 0
if (used >= config.webSearch.dailyBudget) return false
queriesToday.set(today, used)
return true
}
function consumeQuery() {
const today = getDateKey()
const used = (queriesToday.get(today) || 0) + 1
queriesToday.set(today, used)
}
async function searchDomains(providerName) {
const apiKey = process.env.GOOGLE_CSE_API_KEY || config.webSearch.apiKey
const engineId = process.env.GOOGLE_CSE_ENGINE_ID || config.webSearch.engineId
const maxResults = config.webSearch.maxResults
if (!apiKey || !engineId) return []
if (!checkBudget()) return []
const queries = [
`${providerName} streaming ver online 2026`,
`sitio como ${providerName} peliculas gratis`,
`dominio ${providerName} funciona`,
]
const results = []
for (const query of queries) {
try {
consumeQuery()
const response = await axios.get('https://www.googleapis.com/customsearch/v1', {
params: {
key: apiKey,
cx: engineId,
q: query,
num: Math.min(maxResults, 10),
},
timeout: 10000,
})
const items = response.data.items || []
for (const item of items) {
try {
const url = new URL(item.link)
results.push(url.hostname)
} catch {
continue
}
}
} catch {
continue
}
}
return [...new Set(results)]
}
async function searchAlternativesDomains(providerName) {
return searchDomains(providerName)
}
module.exports = {
searchDomains,
searchAlternativesDomains,
}