ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何使用搜索 API 构建自定义 SEO 仪表板
教程

如何使用搜索 API 构建自定义 SEO 仪表板

构建排名跟踪仪表板,取代 500 美元/月的企业工具。 Python 后端提供每日 SERP 检查和 SQLite 历史记录,每月费用不到 30 美元。

获取免费API密钥API文档

对于无法自定义的仪表板,企业 SEO 工具每月收费 200-500 美元。为您自己的仪表板提供数据的 SERP API 可以为您提供所需的准确指标,而成本只需一小部分。本教程构建了一个 Python 排名跟踪后端,每天检查关键字位置,在 SQLite 中存储历史记录,并为任何前端导出 CSV。在 Scavio 上每天跟踪 200 个关键字的费用约为 1 美元/天。

前置条件

  • 已安装 Python 3.8+
  • requests 和 sqlite3(内置)
  • 来自 scavio.dev 的 Scavio API 密钥
  • 关键字和您的目标域

操作指南

步骤 1: 设置数据库和配置

为每日排名快照创建 SQLite 数据库。定义您的目标域和关键字列表。

Python
import os, sqlite3, requests, json
from datetime import date

API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
DOMAIN = 'mysite.com'
KEYWORDS = ['serp api python', 'web scraping api', 'tiktok data api', 'seo rank tracking api']

def init_db(path='seo_dashboard.db'):
    conn = sqlite3.connect(path)
    conn.execute('''CREATE TABLE IF NOT EXISTS rankings (
        id INTEGER PRIMARY KEY, date TEXT, keyword TEXT,
        position INTEGER, url TEXT, title TEXT)''')
    conn.commit()
    return conn

db = init_db()

步骤 2: 获取每个关键词的排名

向 Google 查询每个关键字,并找到您的域在自然结果中的位置。

Python
def check_keyword(keyword):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': keyword, 'country_code': 'us'})
    for r in resp.json().get('organic_results', []):
        if DOMAIN in r.get('link', ''):
            return {'position': r['position'], 'url': r['link'], 'title': r.get('title', '')}
    return {'position': None, 'url': '', 'title': ''}

def run_daily_check():
    today = date.today().isoformat()
    for kw in KEYWORDS:
        r = check_keyword(kw)
        db.execute('INSERT INTO rankings (date,keyword,position,url,title) VALUES (?,?,?,?,?)',
            (today, kw, r['position'], r['url'], r['title']))
        status = f"#{r['position']}" if r['position'] else 'NOT FOUND'
        print(f'  {kw}: {status}')
    db.commit()
    print(f'Cost: ${len(KEYWORDS) * 0.005:.3f}')

run_daily_check()

步骤 3: 查询历史记录并检测排名变化

从 SQLite 中提取排名历史记录以识别趋势、下降和改进。

Python
def get_movers(days=7):
    cursor = db.execute('''
        WITH recent AS (
            SELECT keyword, position, date,
                ROW_NUMBER() OVER (PARTITION BY keyword ORDER BY date DESC) as rn
            FROM rankings WHERE position IS NOT NULL
        )
        SELECT a.keyword, a.position as current_pos, b.position as prev_pos,
            b.position - a.position as change
        FROM recent a JOIN recent b ON a.keyword = b.keyword
        WHERE a.rn = 1 AND b.rn = ? AND a.position != b.position
        ORDER BY change DESC
    ''', (min(days, 30),))
    for kw, curr, prev, change in cursor.fetchall():
        d = 'UP' if change > 0 else 'DOWN'
        print(f'  [{d}] {kw}: #{prev} -> #{curr} ({change:+d})')

def export_csv(output='dashboard.csv'):
    import csv
    rows = db.execute('SELECT date, keyword, position, url FROM rankings ORDER BY date DESC, keyword').fetchall()
    with open(output, 'w', newline='') as f:
        w = csv.writer(f)
        w.writerow(['date', 'keyword', 'position', 'url'])
        w.writerows(rows)
    print(f'Exported {len(rows)} rows to {output}')

get_movers(7)
export_csv()

步骤 4: 安排每日检查

添加一个 cron 作业来每天运行检查器并防止重复。

Python
def already_checked_today():
    today = date.today().isoformat()
    return db.execute('SELECT COUNT(*) FROM rankings WHERE date = ?', (today,)).fetchone()[0] > 0

if __name__ == '__main__':
    db = init_db()
    if already_checked_today():
        print('Already checked today.')
    else:
        print(f'{date.today()}: Running daily check...')
        run_daily_check()
        get_movers(7)

# crontab -e
# 0 6 * * * cd /path/to && python seo_dashboard.py >> dashboard.log 2>&1

Python 示例

Python
import os, sqlite3, requests
from datetime import date

API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
DOMAIN = 'mysite.com'
KEYWORDS = ['serp api python', 'web scraping api']

db = sqlite3.connect('seo.db')
db.execute('CREATE TABLE IF NOT EXISTS ranks (date TEXT, keyword TEXT, position INT)')

for kw in KEYWORDS:
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': kw, 'country_code': 'us'}).json()
    pos = next((r['position'] for r in data.get('organic_results', []) if DOMAIN in r.get('link', '')), None)
    db.execute('INSERT INTO ranks VALUES (?,?,?)', (date.today().isoformat(), kw, pos))
    print(f'{kw}: #{pos}' if pos else f'{kw}: not found')
db.commit()

JavaScript 示例

JavaScript
const Database = require('better-sqlite3');
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
const DOMAIN = 'mysite.com';
const KEYWORDS = ['serp api python', 'web scraping api'];

const db = new Database('seo.db');
db.exec('CREATE TABLE IF NOT EXISTS ranks (date TEXT, keyword TEXT, position INT)');

async function run() {
  const today = new Date().toISOString().slice(0, 10);
  const insert = db.prepare('INSERT INTO ranks VALUES (?, ?, ?)');
  for (const kw of KEYWORDS) {
    const data = await fetch('https://api.scavio.dev/api/v1/search', {
      method: 'POST', headers: H, body: JSON.stringify({ query: kw, country_code: 'us' })
    }).then(r => r.json());
    const match = (data.organic_results || []).find(r => r.link.includes(DOMAIN));
    insert.run(today, kw, match ? match.position : null);
    console.log(match ? `${kw}: #${match.position}` : `${kw}: not found`);
  }
}
run().catch(console.error);

预期输出

JSON
2026-05-18: Running daily check...
  serp api python: #4
  web scraping api: #7
  tiktok data api: #2
  seo rank tracking api: #11
Cost: $0.020

  [UP] tiktok data api: #5 -> #2 (+3)
  [DOWN] seo rank tracking api: #8 -> #11 (-3)
Exported 28 rows to dashboard.csv

相关教程

  • 如何使用 Scavio API 每天跟踪 SEO 排名
  • 如何用 Python 获取 Google 搜索结果
  • 如何构建有竞争力的 SERP 监控器

常见问题

大多数开发者在15到30分钟内完成本教程。您需要一个Scavio API密钥(免费套餐即可)和可用的Python或JavaScript环境。

已安装 Python 3.8+. requests 和 sqlite3(内置). 来自 scavio.dev 的 Scavio API 密钥. 关键字和您的目标域. Scavio API密钥注册即送50个免费积分。

可以。免费套餐注册即送50个积分,完全足够完成本教程并构建一个可运行的原型解决方案。

Scavio提供原生LangChain包(langchain-scavio)、MCP服务器以及适用于任何HTTP客户端的REST API。本教程使用 the raw REST API, 但您可以根据需要适配您选择的框架。

相关资源

Best Of

2026年自定义SEO仪表板最佳API

Read more
Best Of

2026年最佳代理机构 SEO 报告 API

Read more
Solution

构建可预测成本的SEO API层

Read more
Glossary

搜索 API 供应商格局(2026)

Read more
Glossary

代理 SEO API 报告

Read more
Comparison

Google Places API vs SERP Local Pack API

Read more

开始构建

构建排名跟踪仪表板,取代 500 美元/月的企业工具。 Python 后端提供每日 SERP 检查和 SQLite 历史记录,每月费用不到 30 美元。

获取免费API密钥阅读文档
ScavioScavio

面向AI智能体的实时搜索API。搜索所有平台,不仅仅是Google。

产品

  • 功能
  • 定价
  • 控制台
  • 联盟计划

开发者

  • 文档
  • API参考
  • 快速开始
  • MCP集成
  • Python SDK

替代方案

  • Tavily替代方案
  • SerpAPI替代方案
  • Firecrawl替代方案
  • Exa替代方案

工具

  • JSON格式化
  • cURL转代码
  • Token计数器
  • 全部工具

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策