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%

Concurrence par acteur (run_concurrency) : ka-facebook et ka-threads plafonnent concurrency à 6 dans leur schéma d'input — l'envoi de 10 faisait rejeter TOUS leurs runs en 400 depuis des jours (cause réelle des passages à zéro, pas un mur de login). Facebook débloqué : 1 402 fiches enrichies au passage forcé

Simon-Pierre Boucher committed 1 mo ago (Aug 21, 2026) parent cac232a

1 changed file +11 −4

modified creaka/connectors/apify_social.py +11 −4
@@ -175,6 +175,10 @@ class _ApifySocialEnrich(BaseConnector):
175 175 kind = "enrichment"
176 176 platform = "" # plateforme canonique (§6.2)
177 177 actor = "" # nom court de l'acteur (ka-instagram…)
178 + # concurrence interne du run — DOIT respecter le `maximum` du schéma
179 + # d'input de l'acteur, sinon Apify rejette le run en 400 (cause des
180 + # passages facebook/threads à zéro, diagnostiqué le 2026-08-21)
181 + run_concurrency = RUN_CONCURRENCY
178 182 cap = 3000 # comptes max par passage (shardé en parallèle)
179 183 revisit_days = REVISIT_DAYS # re-sonde hebdo par défaut (env APIFY_REVISIT_DAYS)
180 184 content_key = "" # clé du contenu récent dans l'item acteur
@@ -229,7 +233,7 @@ class _ApifySocialEnrich(BaseConnector):
229 233 items = run_actor_sharded(
230 234 self.actor,
231 235 {"proxyConfiguration": RESIDENTIAL,
232 − "concurrency": RUN_CONCURRENCY,
236 + "concurrency": self.run_concurrency,
233 237 **self.extra_input()},
234 238 sorted(targets),
235 239 # passage forcé : tranches plus grosses (bassin entier / 32 runs)
@@ -368,6 +372,9 @@ class ApifyX(_ApifySocialEnrich):
368 372 source_id = "x-apify"
369 373 platform = "x"
370 374 actor = "ka-x"
375 + # l'endpoint syndication de X rend des 429 en rafale au-delà de ~4
376 + # requêtes simultanées par run (constat 2026-08-21)
377 + run_concurrency = 4
371 378 cap = 1800
372 379 content_key = "recent_tweets"
373 380 metric_map = {"following": "following", "tweets_count": "tweets",
@@ -385,9 +392,7 @@ class ApifyX(_ApifySocialEnrich):
385 392 "top_hashtags": "top_hashtags", "top_tweet": "top_tweet"}
386 393
387 394 def extra_input(self) -> dict:
388 − # concurrence réduite : l'endpoint syndication de X rend des 429 en
389 − # rafale au-delà de ~4 requêtes simultanées par run (constat 2026-08-21)
390 − return {"maxTweets": 20, "concurrency": 4}
395 + return {"maxTweets": 20}
391 396
392 397 def bio_urls(self, it: dict) -> list[str]:
393 398 return [it.get("website") or ""]
@@ -397,6 +402,7 @@ class ApifyFacebook(_ApifySocialEnrich):
397 402 source_id = "facebook-apify"
398 403 platform = "facebook"
399 404 actor = "ka-facebook"
405 + run_concurrency = 6 # maximum du schéma d'input de ka-facebook
400 406 cap = 400
401 407 revisit_days = 7
402 408 metric_map = {"category": "category"}
@@ -406,6 +412,7 @@ class ApifyThreads(_ApifySocialEnrich):
406 412 source_id = "threads-apify"
407 413 platform = "threads"
408 414 actor = "ka-threads"
415 + run_concurrency = 6 # maximum du schéma d'input de ka-threads
409 416 cap = 60
410 417 revisit_days = 7
411 418 content_key = "recent_posts"
412 419