SPB Git forge

spb/crea-ka

Public

Créa·Ka — annuaire public cross-plateforme des créateurs de contenu québécois (crea-ka.com)

52commits 1branches 0releases
11.3 MBsize
maindefault branch
19 days agolast push
Python 73.6% HTML 13.2% TypeScript 6% JavaScript 4.5% CSS 1.7% Dockerfile 0.6%
3.0 KB · 72 lines python
Raw Blame History
1# ==============================================================================2# Author: Simon-Pierre Boucher <contact@spboucher.ai>3# File:   creaka/connectors/tavily_seed.py4# Desc:   Connecteur DÉCOUVERTE à grande échelle — graines de créateurs5#         québécois moissonnées par le Tavily scout (outils/creator-harvest.py6#         du dépôt groupe-ka-connecteurs) : handles sociaux extraits des pages7#         d'annuaires/palmarès/agences QC. Dataset local (aucune requête ici) :8#         data/seed/qc_creator_seeds.jsonl. L'enrichissement (Apify) vérifie9#         ensuite l'existence et remplit nom/abonnés/contenu.10# ==============================================================================11"""Découverte massive par moisson web (Tavily).1213Chaque ligne du seed = `{"platform": "...", "handle": "..."}`. On crée une14fiche par handle avec un compte de plateforme (signal `listes_medias` 0.85 :15issu de listes publiques concordantes). Les handles qui n'existent pas seront16simplement non enrichis (found=false côté Apify) ; un balayage d'archivage17retire à terme les fiches jamais confirmées. But : élargir le bassin de18créateurs de plusieurs milliers par vague, sans requête réseau à ce stade.19"""20from __future__ import annotations2122import json23from pathlib import Path2425from ..identity import account26from ..normalize import canonical_url27from ..schema import Creator28from .base import BaseConnector2930SEED_PATH = (Path(__file__).resolve().parent.parent.parent31             / "data" / "seed" / "qc_creator_seeds.jsonl")323334class TavilySeedConnector(BaseConnector):35    source_id = "tavily-seed"36    kind = "discovery"3738    def fetch(self) -> list[Creator]:39        if not SEED_PATH.exists():40            return []  # pas encore de moisson : passage vide, pas d'erreur41        creators: list[Creator] = []42        seen: set[str] = set()43        for line in SEED_PATH.read_text(encoding="utf-8").splitlines():44            line = line.strip()45            if not line:46                continue47            try:48                row = json.loads(line)49            except json.JSONDecodeError:50                continue51            platform = (row.get("platform") or "").strip().lower()52            handle = (row.get("handle") or "").strip().lstrip("@").lower()53            if not platform or not handle:54                continue55            key = f"{platform}:{handle}"56            if key in seen:57                continue58            seen.add(key)59            try:60                acc = account(platform, handle, "listes_medias",61                              url=canonical_url(platform, handle)).finalize()62            except Exception:63                continue64            creators.append(Creator(65                source=self.source_id,66                external_id=key,67                display_name=handle,           # nom réel rempli à l'enrichissement68                platforms=[acc],69                notes="découvert par moisson web Tavily (annuaires/palmarès QC)",70            ))71        return creators72