ScavioScavio
ProduitTarifsDocumentation
ConnexionCommencer
  1. Accueil
  2. Tutoriels
  3. Comment construire votre propre API de tracker de classement sans scraping
Tutoriel

Comment construire votre propre API de tracker de classement sans scraping

Construisez une API complète de suivi de classement de mots-clés en Python en utilisant l'API de recherche Scavio. Suivez les positions quotidiennes pour un nombre illimité de mots-clés sans gérer de scrapers.

Obtenez une clé API gratuiteDocumentation API

La plupart des trackers de classement sont construits sur des scrapers fragiles qui tombent en panne chaque fois que Google modifie son HTML. En utilisant l'API Scavio comme couche de données, vous pouvez construire un tracker de classement qui renvoie des données de position structurées sans gérer de proxies ni de parseurs. Ce tutoriel construit une API Flask légère qui accepte des entrées de mot-clé et de domaine, vérifie les positions Google via Scavio, stocke les résultats dans SQLite et expose les données historiques de classement via un point de terminaison REST.

Prérequis

  • Python 3.10 ou supérieur
  • pip install requests flask
  • Une clé API Scavio
  • Compréhension de base de la conception d'API REST

Parcours

Étape 1: Configurer la base de données SQLite

Créer une table simple pour stocker le mot-clé, le domaine, la position et l'horodatage pour chaque vérification.

Python
import sqlite3

def init_db(path: str = "rankings.db") -> None:
    conn = sqlite3.connect(path)
    conn.execute("""
        CREATE TABLE IF NOT EXISTS rankings (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            keyword TEXT NOT NULL,
            domain TEXT NOT NULL,
            position INTEGER,
            checked_at TEXT DEFAULT (datetime('now'))
        )
    """)
    conn.commit()
    conn.close()

Étape 2: Vérifier le classement via Scavio

Interroger Google via l'API Scavio et analyser les résultats pour le domaine cible. Renvoyer la position ou None.

Python
import requests

def check_rank(keyword: str, domain: str) -> int | None:
    r = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": API_KEY},
        json={"query": keyword, "country_code": "us"}
    )
    r.raise_for_status()
    for result in r.json().get("organic_results", []):
        if domain in result.get("link", ""):
            return result["position"]
    return None

Étape 3: Stocker et récupérer les classements

Enregistrer chaque vérification de classement dans SQLite et fournir une fonction pour interroger les données historiques.

Python
def save_rank(keyword: str, domain: str, position: int | None) -> None:
    conn = sqlite3.connect("rankings.db")
    conn.execute("INSERT INTO rankings (keyword, domain, position) VALUES (?, ?, ?)",
                 (keyword, domain, position))
    conn.commit()
    conn.close()

def get_history(keyword: str, domain: str, days: int = 30) -> list[dict]:
    conn = sqlite3.connect("rankings.db")
    rows = conn.execute(
        "SELECT position, checked_at FROM rankings WHERE keyword=? AND domain=? ORDER BY checked_at DESC LIMIT ?",
        (keyword, domain, days)
    ).fetchall()
    conn.close()
    return [{"position": r[0], "date": r[1]} for r in rows]

Étape 4: Exposer en tant qu'API Flask

Créer deux points de terminaison : POST /check pour déclencher une vérification de classement, et GET /history pour récupérer les positions stockées.

Python
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/check", methods=["POST"])
def check():
    data = request.json
    pos = check_rank(data["keyword"], data["domain"])
    save_rank(data["keyword"], data["domain"], pos)
    return jsonify({"keyword": data["keyword"], "domain": data["domain"], "position": pos})

@app.route("/history")
def history():
    kw = request.args["keyword"]
    domain = request.args["domain"]
    return jsonify(get_history(kw, domain))

Exemple Python

Python
import os
import sqlite3
import requests
from flask import Flask, request, jsonify

API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
DB = "rankings.db"

def init_db():
    conn = sqlite3.connect(DB)
    conn.execute("CREATE TABLE IF NOT EXISTS rankings (id INTEGER PRIMARY KEY AUTOINCREMENT, keyword TEXT, domain TEXT, position INTEGER, checked_at TEXT DEFAULT (datetime('now')))")
    conn.commit()
    conn.close()

def check_rank(keyword: str, domain: str) -> int | None:
    r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
                      json={"query": keyword, "country_code": "us"})
    r.raise_for_status()
    for res in r.json().get("organic_results", []):
        if domain in res.get("link", ""):
            return res["position"]
    return None

app = Flask(__name__)

@app.route("/check", methods=["POST"])
def check():
    d = request.json
    pos = check_rank(d["keyword"], d["domain"])
    conn = sqlite3.connect(DB)
    conn.execute("INSERT INTO rankings (keyword, domain, position) VALUES (?, ?, ?)", (d["keyword"], d["domain"], pos))
    conn.commit()
    conn.close()
    return jsonify({"keyword": d["keyword"], "position": pos})

if __name__ == "__main__":
    init_db()
    app.run(port=5000)

Exemple JavaScript

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";

async function checkRank(keyword, domain) {
  const res = await fetch(ENDPOINT, {
    method: "POST",
    headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
    body: JSON.stringify({ query: keyword, country_code: "us" })
  });
  const data = await res.json();
  const match = (data.organic_results || []).find(r => r.link.includes(domain));
  return match ? match.position : null;
}

async function main() {
  const keywords = ["python api tutorial", "rest api guide"];
  const domain = "mysite.com";
  for (const kw of keywords) {
    const pos = await checkRank(kw, domain);
    console.log(`${kw}: ${pos ? "#" + pos : "not ranked"}`);
  }
}
main().catch(console.error);

Sortie attendue

JSON
POST /check {"keyword": "python api tutorial", "domain": "mysite.com"}
=> {"keyword": "python api tutorial", "position": 6}

GET /history?keyword=python+api+tutorial&domain=mysite.com
=> [{"position": 6, "date": "2026-04-19"}, {"position": 7, "date": "2026-04-18"}]

Tutoriels associés

  • Comment suivre les classements SEO quotidiennement avec l'API Scavio
  • Comment construire un tableau de bord d'audit SEO avec des données API

Questions fréquentes

La plupart des développeurs terminent ce tutoriel en 15 à 30 minutes. Vous aurez besoin d'une clé API Scavio (l'offre gratuite suffit) et d'un environnement Python ou JavaScript fonctionnel.

Python 3.10 ou supérieur. pip install requests flask. Une clé API Scavio. Compréhension de base de la conception d'API REST. Une clé API Scavio vous donne 50 crédits gratuits à l'inscription.

Oui. L'offre gratuite comprend 50 crédits à l'inscription, ce qui est largement suffisant pour terminer ce tutoriel et prototyper une solution fonctionnelle.

Scavio dispose d'un package natif LangChain (langchain-scavio), d'un serveur MCP et d'une API REST simple qui fonctionne avec tout client HTTP. Ce tutoriel utilise the raw REST API, mais vous pouvez l'adapter à votre framework de prédilection.

Ressources connexes

Best Of

Meilleurs trackers de classement basés sur API pour le SEO en 2026

Read more
Best Of

Meilleures API de suivi de classement SEO en 2026

Read more
Solution

Construisez un suivi de classement local fiable avec l'API Scavio

Read more
Solution

Exécutez des vérifications de classement SEO pendant la nuit en mode batch.

Read more
Use Case

Flux de travail API pour utilisateur SEO léger

Read more
Use Case

Migration d'outil SEO AppSumo vers API

Read more

Commencer

Construisez une API complète de suivi de classement de mots-clés en Python en utilisant l'API de recherche Scavio. Suivez les positions quotidiennes pour un nombre illimité de mots-clés sans gérer de scrapers.

Obtenez une clé API gratuiteLire la documentation
ScavioScavio

API de recherche en temps réel pour agents IA. Recherchez sur toutes les plateformes, pas seulement Google.

Produit

  • Fonctionnalités
  • Tarifs
  • Tableau de bord
  • Affiliés

Développeurs

  • Documentation
  • Référence API
  • Démarrage rapide
  • Intégration MCP
  • SDK Python

Alternatives

  • Alternative à Tavily
  • Alternative à SerpAPI
  • Alternative à Firecrawl
  • Alternative à Exa

Outils

  • Formateur JSON
  • cURL vers code
  • Compteur de jetons
  • Tous les outils

© 2026 Scavio. Tous droits réservés.

Featured on TAAFT
Conditions d'utilisationPolitique de confidentialité