Web Search
Caskada does NOT provide built-in utilities
Instead, we offer examples that you can implement yourself. This approach gives you more flexibility and control over your project's dependencies and functionality.
We recommend some implementations of commonly used web search tools.
API
Free Tier
Pricing Model
Docs
DuckDuckGo Instant Answer
Completely free (Instant Answers only, no URLs)
No paid plans; usage unlimited, but data is limited
Example Code
1. Google Custom Search JSON API
import requests
import os
API_KEY = os.environ.get("GOOGLE_API_KEY") # Use environment variables
CX_ID = os.environ.get("GOOGLE_CX_ID") # Use environment variables
query = "example"
url = "https://www.googleapis.com/customsearch/v1"
params = {
"key": API_KEY,
"cx": CX_ID,
"q": query
}
if not API_KEY or not CX_ID:
print("Error: Please set GOOGLE_API_KEY and GOOGLE_CX_ID environment variables.")
else:
try:
response = requests.get(url, params=params)
response.raise_for_status() # Raise an exception for bad status codes
results = response.json()
print(results)
except requests.exceptions.RequestException as e:
print(f"Error fetching Google search results: {e}")
async function searchGoogle(query: string): Promise<any> {
const apiKey = process.env.GOOGLE_API_KEY // Use environment variables
const cxId = process.env.GOOGLE_CX_ID // Use environment variables
if (!apiKey || !cxId) {
console.error('Error: Please set GOOGLE_API_KEY and GOOGLE_CX_ID environment variables.')
return null
}
const url = new URL('https://www.googleapis.com/customsearch/v1')
url.searchParams.append('key', apiKey)
url.searchParams.append('cx', cxId)
url.searchParams.append('q', query)
try {
const response = await fetch(url.toString())
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const results = await response.json()
console.log(results)
return results
} catch (error) {
console.error('Error fetching Google search results:', error)
return null
}
}
// Example usage:
// searchGoogle("example");2. Bing Web Search API
import requests
import os
SUBSCRIPTION_KEY = os.environ.get("BING_API_KEY") # Use environment variables
query = "example"
url = "https://api.bing.microsoft.com/v7.0/search"
headers = {"Ocp-Apim-Subscription-Key": SUBSCRIPTION_KEY}
params = {"q": query}
if not SUBSCRIPTION_KEY:
print("Error: Please set BING_API_KEY environment variable.")
else:
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
results = response.json()
print(results)
except requests.exceptions.RequestException as e:
print(f"Error fetching Bing search results: {e}")
async function searchBing(query: string): Promise<any> {
const subscriptionKey = process.env.BING_API_KEY // Use environment variables
if (!subscriptionKey) {
console.error('Error: Please set BING_API_KEY environment variable.')
return null
}
const url = new URL('https://api.bing.microsoft.com/v7.0/search')
url.searchParams.append('q', query)
const headers = {
'Ocp-Apim-Subscription-Key': subscriptionKey,
}
try {
const response = await fetch(url.toString(), { headers })
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const results = await response.json()
console.log(results)
return results
} catch (error) {
console.error('Error fetching Bing search results:', error)
return null
}
}
// Example usage:
// searchBing("example");3. DuckDuckGo Instant Answer
import requests
query = "example"
url = "https://api.duckduckgo.com/"
params = {
"q": query,
"format": "json",
"no_html": 1 # Often useful to remove HTML tags
}
try:
response = requests.get(url, params=params)
response.raise_for_status()
results = response.json()
print(results)
except requests.exceptions.RequestException as e:
print(f"Error fetching DuckDuckGo results: {e}")
async function searchDuckDuckGo(query: string): Promise<any> {
const url = new URL('https://api.duckduckgo.com/')
url.searchParams.append('q', query)
url.searchParams.append('format', 'json')
url.searchParams.append('no_html', '1') // Often useful
try {
const response = await fetch(url.toString())
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const results = await response.json()
console.log(results)
return results
} catch (error) {
console.error('Error fetching DuckDuckGo results:', error)
return null
}
}
// Example usage:
// searchDuckDuckGo("example");4. Brave Search API
import requests
import os
SUBSCRIPTION_TOKEN = os.environ.get("BRAVE_API_TOKEN") # Use environment variables
query = "example"
url = "https://api.search.brave.com/res/v1/web/search"
headers = {
"X-Subscription-Token": SUBSCRIPTION_TOKEN,
"Accept": "application/json" # Good practice
}
params = {
"q": query
}
if not SUBSCRIPTION_TOKEN:
print("Error: Please set BRAVE_API_TOKEN environment variable.")
else:
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
results = response.json()
print(results)
except requests.exceptions.RequestException as e:
print(f"Error fetching Brave search results: {e}")
async function searchBrave(query: string): Promise<any> {
const subscriptionToken = process.env.BRAVE_API_TOKEN // Use environment variables
if (!subscriptionToken) {
console.error('Error: Please set BRAVE_API_TOKEN environment variable.')
return null
}
const url = new URL('https://api.search.brave.com/res/v1/web/search')
url.searchParams.append('q', query)
const headers = {
'X-Subscription-Token': subscriptionToken,
Accept: 'application/json', // Good practice
}
try {
const response = await fetch(url.toString(), { headers })
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const results = await response.json()
console.log(results)
return results
} catch (error) {
console.error('Error fetching Brave search results:', error)
return null
}
}
// Example usage:
// searchBrave("example");5. SerpApi
import requests
import os
API_KEY = os.environ.get("SERPAPI_KEY") # Use environment variables
query = "example"
url = "https://serpapi.com/search"
params = {
"engine": "google", # Or other engines like 'bing', 'duckduckgo'
"q": query,
"api_key": API_KEY
}
if not API_KEY:
print("Error: Please set SERPAPI_KEY environment variable.")
else:
try:
response = requests.get(url, params=params)
response.raise_for_status()
results = response.json()
print(results)
except requests.exceptions.RequestException as e:
print(f"Error fetching SerpApi results: {e}")
async function searchSerpApi(query: string, engine: string = 'google'): Promise<any> {
const apiKey = process.env.SERPAPI_KEY // Use environment variables
if (!apiKey) {
console.error('Error: Please set SERPAPI_KEY environment variable.')
return null
}
const url = new URL('https://serpapi.com/search')
url.searchParams.append('engine', engine)
url.searchParams.append('q', query)
url.searchParams.append('api_key', apiKey)
try {
const response = await fetch(url.toString())
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`)
}
const results = await response.json()
console.log(results)
return results
} catch (error) {
console.error('Error fetching SerpApi results:', error)
return null
}
}
// Example usage:
// searchSerpApi("example");
// searchSerpApi("example", "bing");Last updated