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%
17.8 KB · 324 lines json
Raw Blame History
1{2  "_author": "Simon-Pierre Boucher <contact@spboucher.ai>",3  "_file": "data/sources.json",4  "_desc": "Registre des sources connectées — famille, mode d'accès, cadence (CLAUDE.md §9, §14, §19)",5  "updated": "2026-08-18",6  "sources": [7    {8      "id": "listes-medias",9      "famille": "decouverte",10      "palier": 3,11      "acces": "dataset local (listes & palmarès médias publics compilés : billie, frank, metricool, Favikon QC, canadult…)",12      "signal_identite": "listes_medias (0.85)",13      "cadence": "mensuelle (recompilation du dataset)",14      "notes": "376 créateurs québécois, handles par plateforme + audiences approximatives"15    },16    {17      "id": "wikidata-qc",18      "famille": "decouverte",19      "palier": 3,20      "acces": "API SPARQL publique Wikidata (nés/résidant au Québec, occupation créateur, handles sociaux curés)",21      "signal_identite": "base_publique (0.85)",22      "cadence": "hebdomadaire",23      "notes": "humoristes, youtubeurs, vidéastes web, streamers, podcasteurs notables ; is_minor levé via l'année de naissance publique"24    },25    {26      "id": "onlyqueb",27      "famille": "decouverte",28      "palier": 3,29      "acces": "requêtes directes (sitemap.xml + JSON-LD ProfilePage des pages profil publiques SSR)",30      "signal_identite": "cross_link (0.90) — liens sameAs auto-déclarés par la personne",31      "cadence": "hebdomadaire",32      "notes": "annuaire public onlyqueb.com — créateurs québécois sur abonnement (18+) ; nom public, photo, liens OnlyFans/Instagram/TikTok/X"33    },34    {35      "id": "youtube-recherche",36      "famille": "decouverte",37      "palier": 3,38      "acces": "requêtes directes (recherche publique YouTube filtre « chaînes », ytInitialData) — ~120 requêtes thématiques × marqueurs QC",39      "signal_identite": "profil_source (0.98) — la chaîne est le compte d'origine de la fiche",40      "cadence": "quotidienne (watch) — la couverture s'accumule à chaque passage",41      "notes": "filtre conservateur : marqueur québécois requis dans titre/description de la chaîne"42    },43    {44      "id": "wikipedia-qc",45      "famille": "decouverte",46      "palier": 3,47      "acces": "API MediaWiki publique (fr+en, catégories de créateurs QC : Vidéaste web canadien, Humoriste/Blogueur québécois, Canadian YouTubers/podcasters/Twitch streamers/TikTokers…) + API Wikidata wbgetentities (handles sociaux curés de l'infobox) — sans clé",48      "signal_identite": "base_publique (0.85)",49      "cadence": "hebdomadaire",50      "notes": "vague 3 — complète wikidata-qc (SPARQL) : catégories éditoriales → intro d'article (marqueur QC OBLIGATOIRE pour les catégories pan-canadiennes) → handles P2003/P7085/P2397/P2002/P5797/P2013 + site officiel P856 ; personnes décédées exclues, is_minor via P569, fiche seulement si ≥1 lien curé"51    },52    {53      "id": "palmares-apple",54      "famille": "decouverte",55      "palier": 2,56      "acces": "API marketing OFFICIELLE d'Apple (rss.marketingtools.apple.com, top 100 podcasts Canada, sans clé) + lookup iTunes groupé + tête de flux RSS pour l'attribution QC",57      "signal_identite": "profil_source (0.98)",58      "cadence": "quotidienne (watch) — le palmarès bouge chaque jour",59      "notes": "vague 3 — balados QC qui percent dans le top 100 CA (metrics.chart_rank_ca). Palmarès évalués 2026-08-18 : Spotify podcastcharts → API morte (HTTP 500) ; ADISQ → SPA JavaScript + artistes sans liens sociaux ; Bible urbaine → articles en prose sans handles (liaison ambiguë interdite §12) → Apple retenu. Fusion naturelle avec balados-itunes (même clé podcast:collectionId)"60    },61    {62      "id": "balados-itunes",63      "famille": "decouverte",64      "palier": 2,65      "acces": "API de recherche iTunes/Apple Podcasts (officielle, gratuite, sans clé)",66      "signal_identite": "profil_source (0.98)",67      "cadence": "quotidienne (watch)",68      "notes": "podcasteurs québécois : nom, artiste, pochette, genre, nb d'épisodes, flux RSS ; marqueur QC requis"69    },70    {71      "id": "instagram-profil",72      "famille": "enrichissement",73      "palier": 4,74      "acces": "Scrapfly (profil public web_profile_info — pas d'API publique de lecture)",75      "signal_identite": "cross_link (0.90) pour les liens de bio découverts",76      "cadence": "hebdomadaire (gros créateurs) / mensuelle",77      "notes": "abonnés, badge, bio, liens de bio → link_in_bio_url + comptes croisés"78    },79    {80      "id": "tiktok-profil",81      "famille": "enrichissement",82      "palier": 4,83      "acces": "Scrapfly (JSON d'hydratation de la page publique @handle)",84      "signal_identite": "cross_link (0.90) pour le lien de bio",85      "cadence": "hebdomadaire (gros créateurs) / mensuelle",86      "notes": "abonnés, badge, bio, lien de bio"87    },88    {89      "id": "youtube",90      "famille": "enrichissement",91      "palier": 2,92      "acces": "YouTube Data API v3 (officielle) si YOUTUBE_API_KEY, sinon voie publique complète SANS clé (vague 3) : page de chaîne (ytInitialData) + InnerTube browse du panneau « À propos » (clé publique embarquée) + page /videos",93      "signal_identite": "api_officielle (0.95) quand confirmé par l'API ; la voie publique ne touche pas au score",94      "cadence": "quotidienne (watch) — cap 300 chaînes/passage, rotation 14 j (≈4 200 comptes → convergence ~2 semaines)",95      "notes": "abonnés, nb de vidéos, vues totales (si affichées), date de la dernière vidéo (dormant >12 mois), description → bio, bannière + avatar, pays affiché"96    },97    {98      "id": "twitch",99      "famille": "enrichissement",100      "palier": 2,101      "acces": "API GQL publique du site web officiel (gql.twitch.tv, Client-ID public du client web — SANS clé, requêtes groupées 20 profils/POST) ; voie Helix officielle reprise si TWITCH_CLIENT_ID/SECRET fournis",102      "signal_identite": "api_officielle (0.95) via Helix ; la voie GQL publique ne touche pas au score",103      "cadence": "hebdomadaire",104      "notes": "vague 3 — abonnés (followers.totalCount, que Helix ne donne plus sans jeton de modérateur depuis 2023), description → bio, avatar, partenaire/affilié, dernière diffusion + jeu (fraîcheur). Empreinte TLS : requests accepté (vérifié 2026-08-18), repli curl-binaire prévu"105    },106    {107      "id": "link-in-bio",108      "famille": "enrichissement",109      "palier": 1,110      "acces": "requêtes directes (pages publiques SSR : linktr.ee, beacons.ai, bio.link, msha.ke, campsite.bio, snipfeed.co), repli Firecrawl",111      "signal_identite": "link_in_bio (0.95) — le signal le plus fort (§12.1)",112      "cadence": "mensuelle",113      "notes": "une page → TOUS les comptes du créateur ; consomme les link_in_bio_url découvertes par instagram-profil/tiktok-profil"114    },115    {116      "id": "balados-rss",117      "famille": "enrichissement",118      "palier": 1,119      "acces": "requêtes directes (flux RSS auto-déclarés des balados — AUCUNE clé) ; cap 150 flux/passage, re-visite 7 j, timeout court, fetch parallèle poli",120      "signal_identite": "cross_link (0.90) pour le lien officiel <link> du flux",121      "cadence": "quotidienne (watch) — rotation complète des 433 balados en ~3 jours, puis hebdomadaire",122      "notes": "nb d'épisodes réels, date du dernier épisode (détection dormant >12 mois), pochette → avatar, description → bio, catégories iTunes → niches, <link> → compte site-web/plateforme. Substitut sans clé de Podcast Index."123    },124    {125      "id": "podcastindex",126      "famille": "enrichissement",127      "palier": 2,128      "statut": "prêt — clés requises",129      "acces": "API Podcast Index (officielle, GRATUITE — inscription requise : https://api.podcastindex.org ; PODCASTINDEX_API_KEY/SECRET dans .env) — sauté proprement sans clés",130      "signal_identite": "api_officielle (0.95)",131      "cadence": "quotidienne (watch), re-visite 7 j par balado",132      "notes": "episodeCount, lastUpdateTime, itunesId, image, catégories des balados par feed_url. En attendant les clés, balados-rss couvre les mêmes champs sans clé."133    },134    {135      "id": "x-profil",136      "famille": "enrichissement",137      "palier": 3,138      "acces": "requêtes directes (service public de syndication des widgets officiels : syndication.twitter.com/srv/timeline-profile — objet user complet dans __NEXT_DATA__ ; repli très limité page x.com) ; cap 150/passage, re-visite 7 j, délai 2 s",139      "signal_identite": "aucun nouveau rattachement — métriques du compte déjà rattaché seulement",140      "cadence": "quotidienne (watch), rotation hebdomadaire",141      "notes": "abonnés + abonnements + badge + avatar X. Ancien widget followbutton MORT (vérifié 2026-08-18 : réponse vide) ; page x.com : mur de connexion après ~15-20 req/IP (constaté 2026-08-18) → repli seulement. Facebook : page publique bloquée sans clé (HTTP 400, vérifié 2026-08-18) et Scrapfly non justifié → aucune voie fiable, on passe."142    },143    {144      "id": "bio-liens",145      "famille": "enrichissement",146      "palier": 1,147      "acces": "AUCUNE requête — liaison croisée à partir des URLs COMPLÈTES déjà stockées dans les bios publiques (jamais de « @handle » textuel ambigu)",148      "signal_identite": "cross_link (0.90) — le créateur pointe lui-même vers son autre compte",149      "cadence": "quotidienne (watch), en dernier du pipeline",150      "notes": "passe conservatrice §12 : patrons sûrs seulement, cap 5 nouveaux comptes par fiche"151    },152    {153      "id": "twitch-decouverte",154      "famille": "decouverte",155      "palier": 3,156      "acces": "API GQL publique du site officiel de Twitch (Client-ID public web, sans clé) : recherche searchFor par ~43 termes QC paginée + répertoire des diffusions EN DIRECT en français (streams languages:[FR], 20 pages)",157      "signal_identite": "profil_source (0.98) — la chaîne est le compte d'origine de la fiche",158      "cadence": "quotidienne (watch) — qui est en direct change chaque jour, la couverture s'accumule",159      "notes": "vague 4 — marqueur québécois OBLIGATOIRE dans nom/bio/titre du stream ; abonnés, avatar, partenaire/affilié, dernier direct et jeu captés à la source ; niche déduite du jeu (Just Chatting → lifestyle, Music → musique…)"160    },161    {162      "id": "kick-decouverte",163      "famille": "decouverte",164      "palier": 4,165      "acces": "Scrapfly ASP sans render_js (Cloudflare bloque le direct) : kick.com/api/search par ~27 termes QC + fiche v2 par chaîne retenue (cap 120/passage — budget Scrapfly)",166      "signal_identite": "profil_source (0.98) pour la chaîne Kick ; cross_link (0.90) pour les liens sociaux AUTO-DÉCLARÉS du profil v2 (instagram/x/youtube/tiktok/facebook/discord)",167      "cadence": "quotidienne (watch)",168      "notes": "vague 4 — marqueur québécois requis dans pseudo/slug/bio ; la fiche v2 expose les liens sociaux remplis par le créateur lui-même : meilleure matière première du rattachement §12.1"169    },170    {171      "id": "region-bio",172      "famille": "enrichissement",173      "palier": 1,174      "acces": "AUCUNE requête — relit les bios publiques déjà en base : ville DÉCLARÉE avec tournure locative (« de Sherbrooke », « based in Montreal ») ou gentilé (« montréalaise ») → région §7 + ville",175      "signal_identite": "n/a (ne touche pas aux comptes)",176      "cadence": "quotidienne (watch), tout dernier du pipeline",177      "notes": "vague 4 — liste de ~70 villes SÛRES seulement (pas d'Alma/Waterloo/Varennes : prénoms, homonymes hors QC, particules) ; abstention si villes de régions différentes ; ne remplit que les champs vides"178    },179    {180      "id": "instagram-apify",181      "famille": "enrichissement",182      "palier": 4,183      "acces": "acteur Apify maison ka-instagram (endpoint web public web_profile_info, proxy résidentiel)",184      "signal_identite": "cross_link (0.90) pour les liens de bio",185      "cadence": "quotidienne (rotation 5 j, lot <=400)",186      "notes": "profil ultra détaillé : abonnés, bio, liens, 12 derniers posts (likes/commentaires/vues/musique/lieu), engagement, cadence, profils reliés"187    },188    {189      "id": "tiktok-apify",190      "famille": "enrichissement",191      "palier": 4,192      "acces": "acteur Apify maison ka-tiktok (page publique @handle, proxy résidentiel)",193      "signal_identite": "cross_link (0.90) pour le lien de bio",194      "cadence": "quotidienne (rotation 5 j, lot <=300)",195      "notes": "abonnés, coeurs, vidéos, bio, badge, commerce/live + vidéos récentes si SSR"196    },197    {198      "id": "x-apify",199      "famille": "enrichissement",200      "palier": 3,201      "acces": "acteur Apify maison ka-x (syndication officielle des widgets, sans clé)",202      "signal_identite": "cross_link (0.90) pour le site du profil",203      "cadence": "quotidienne (rotation 5 j, lot <=300)",204      "notes": "profil complet + 20 tweets récents avec métriques, hashtags, cadence ; remplace la voie locale 429 (TLS)"205    },206    {207      "id": "facebook-apify",208      "famille": "enrichissement",209      "palier": 4,210      "acces": "acteur Apify maison ka-facebook (HTML public de page, proxy résidentiel) — EXPÉRIMENTAL",211      "signal_identite": "—",212      "cadence": "hebdomadaire (rotation 7 j, lot <=100)",213      "notes": "abonnés/catégorie/avatar de pages publiques ; found=false fréquent (mur de connexion)"214    },215    {216      "id": "threads-apify",217      "famille": "enrichissement",218      "palier": 4,219      "acces": "acteur Apify maison ka-threads (JSON embarqué de la page publique, proxy résidentiel)",220      "signal_identite": "—",221      "cadence": "hebdomadaire (rotation 7 j, lot <=60)",222      "notes": "abonnés, bio, badge + posts récents si embarqués"223    },224    {225      "id": "snapchat-apify",226      "famille": "enrichissement",227      "palier": 3,228      "acces": "acteur Apify maison ka-snapchat (__NEXT_DATA__ de snapchat.com/add)",229      "signal_identite": "—",230      "cadence": "hebdomadaire (rotation 7 j, lot <=60)",231      "notes": "abonnés, bio, badge, catégorie, story/spotlight/lenses, comptes reliés"232    },233    {234      "id": "instagram-decouverte",235      "famille": "decouverte",236      "palier": 4,237      "acces": "acteur Apify maison ka-instagram mode recherche (topsearch web public, proxy résidentiel)",238      "signal_identite": "profil_source (0.98)",239      "cadence": "quotidienne (40 requêtes tournantes sur ~160 combinaisons thème x QC)",240      "notes": "découverte de créateurs IG par mots-clés québécois"241    },242    {243      "id": "youtube-apify",244      "famille": "enrichissement",245      "palier": 3,246      "acces": "acteur Apify maison ka-youtube (ytInitialData de /videos, sans clé)",247      "signal_identite": "—",248      "cadence": "quotidienne (rotation 5 j, lot <=300)",249      "notes": "abonnés, nb vidéos, pays, description + vidéos récentes avec vues ; complète le connecteur youtube (API) quand la clé manque"250    },251    {252      "id": "twitch-apify",253      "famille": "enrichissement",254      "palier": 3,255      "acces": "acteur Apify maison ka-twitch (GQL public Client-ID web, sans clé)",256      "signal_identite": "—",257      "cadence": "quotidienne (rotation 5 j, lot <=300)",258      "notes": "abonnés, partenaire/affilié, live en cours, dernière diffusion, jeux + vidéos récentes"259    },260    {261      "id": "kick-apify",262      "famille": "enrichissement",263      "palier": 4,264      "acces": "acteur Apify maison ka-kick (API v2 publique, proxy résidentiel pour Cloudflare)",265      "signal_identite": "cross_link (0.90) pour les liens sociaux auto-déclarés",266      "cadence": "quotidienne (rotation 5 j, lot <=120)",267      "notes": "abonnés, live, catégories + liens sociaux déclarés → découverte croisée"268    },269    {270      "id": "onlyfans-apify",271      "famille": "enrichissement",272      "palier": 4,273      "acces": "acteur Apify maison ka-onlyfans (page publique, proxy résidentiel) — EXPÉRIMENTAL",274      "signal_identite": "—",275      "cadence": "hebdomadaire (rotation 7 j, lot <=100)",276      "notes": "posts/photos/vidéos/J'aime, prix d'abonnement, bio ; found=false fréquent (mur Cloudflare)"277    },278    {279      "id": "fansly-apify",280      "famille": "enrichissement",281      "palier": 3,282      "acces": "acteur Apify maison ka-fansly (API v1 publique, lots de 20)",283      "signal_identite": "—",284      "cadence": "hebdomadaire (rotation 7 j, lot <=200)",285      "notes": "abonnés, bio, badge, compteurs de médias, avatar"286    },287    {288      "id": "tavily-seed",289      "famille": "decouverte",290      "palier": 3,291      "acces": "dataset local moissonné par le Tavily scout (outils/creator-harvest.py) : handles extraits des annuaires/palmarès/agences QC",292      "signal_identite": "listes_medias (0.85)",293      "cadence": "par vague (re-moisson périodique)",294      "notes": "expansion massive du bassin ; existence vérifiée ensuite par lenrichissement Apify"295    },296    {297      "id": "snowball-ig",298      "famille": "decouverte",299      "palier": 1,300      "acces": "base interne : profils reliés Instagram (related_profiles) captés par instagram-apify",301      "signal_identite": "mention (0.60) — à confirmer par enrichissement",302      "cadence": "quotidienne (parcours en largeur, cap 4000/vague)",303      "notes": "levier déchelle : chaque profil IG suggère ~10-20 comptes similaires"304    },305    {306      "id": "patreon-apify",307      "famille": "enrichissement",308      "palier": 3,309      "acces": "acteur Apify maison ka-patreon (données embarquées de la page publique)",310      "signal_identite": "—",311      "cadence": "hebdomadaire (rotation 7 j)",312      "notes": "patrons, publications, nom, avatar"313    },314    {315      "id": "discord-apify",316      "famille": "enrichissement",317      "palier": 2,318      "acces": "acteur Apify maison ka-discord (API publique d'invitation, code sensible à la casse depuis l'URL)",319      "signal_identite": "—",320      "cadence": "hebdomadaire (rotation 7 j)",321      "notes": "membres approximatifs, en ligne, boosts, nom/description du serveur"322    }323  ]324}