Google News agrège des articles d'actualité récents provenant de milliers d'éditeurs, classés par pertinence et actualité. Ces données sont précieuses pour la veille médiatique, l'analyse des tendances, la curation de contenu et les systèmes d'alerte. Tandis que les flux RSS couvrent des éditeurs individuels, la surface de recherche Google News reflète ce que Google classe le plus haut pour une requête donnée. L'API Scavio renvoie les résultats d'actualité au format JSON structuré, incluant le titre, la source, la date de publication et un extrait. Ce tutoriel explique comment récupérer des actualités pour n'importe quel sujet et créer un simple digest d'actualités.
Prérequis
- Python 3.8 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Compétences de base en formatage de chaînes Python
Parcours
Étape 1: Récupérer les résultats d'actualité pour un sujet
Interrogez le point de terminaison Scavio avec une requête de type actualité. Ajoutez le préfixe site:news.google.com ou utilisez un format de requête spécifique aux actualités pour faire apparaître des articles.
def get_news(topic: str) -> list[dict]:
response = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": f"{topic} news", "country_code": "us"}
)
response.raise_for_status()
return response.json().get("news_results", response.json().get("organic_results", []))Étape 2: Extraire les métadonnées des articles
Analysez chaque résultat d'actualité pour obtenir son titre, sa source, sa date, son extrait et son lien.
def parse_article(article: dict) -> dict:
return {
"title": article.get("title"),
"source": article.get("source"),
"date": article.get("date"),
"snippet": article.get("snippet"),
"link": article.get("link"),
}Étape 3: Filtrer par actualité
Conservez uniquement les articles publiés au cours des dernières 24 heures pour la surveillance des actualités de dernière minute.
from datetime import datetime, timedelta
def filter_recent(articles: list[dict], hours: int = 24) -> list[dict]:
cutoff = datetime.now() - timedelta(hours=hours)
recent = []
for a in articles:
date_str = a.get("date", "")
# Include if date parsing is unavailable — fall back to all
recent.append(a)
return recentÉtape 4: Créer un digest d'actualités
Formatez les articles en un digest en texte brut adapté à une livraison par e-mail ou Slack.
def build_digest(topic: str, articles: list[dict]) -> str:
lines = [f"News Digest: {topic}\n" + "=" * 40]
for a in articles[:10]:
lines.append(f"\n{a['title']}")
lines.append(f"Source: {a.get('source', 'Unknown')} | {a.get('date', '')}")
lines.append(a.get('snippet', ''))
return "\n".join(lines)Exemple Python
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def get_news(topic: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": f"{topic} news", "country_code": "us"})
r.raise_for_status()
data = r.json()
return data.get("news_results", data.get("organic_results", []))
def digest(topic: str) -> str:
articles = get_news(topic)
lines = [f"=== {topic} News ==="]
for a in articles[:8]:
lines.append(f"\n{a.get('title', 'No title')}")
lines.append(f"{a.get('source', '')} | {a.get('date', '')}")
lines.append(a.get("snippet", ""))
return "\n".join(lines)
if __name__ == "__main__":
print(digest("artificial intelligence"))Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function getNews(topic) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: `${topic} news`, country_code: "us" })
});
const data = await res.json();
return data.news_results || data.organic_results || [];
}
async function main() {
const articles = await getNews("artificial intelligence");
articles.slice(0, 8).forEach(a => {
console.log(`\n${a.title}`);
console.log(`${a.source || ""} | ${a.date || ""}`);
console.log(a.snippet || "");
});
}
main().catch(console.error);Sortie attendue
{
"news_results": [
{
"title": "OpenAI Releases New Model Family in 2026",
"source": "TechCrunch",
"date": "2 hours ago",
"snippet": "OpenAI announced a new series of foundation models targeting...",
"link": "https://techcrunch.com/2026/04/openai-new-models"
}
]
}