CREATE TABLE db_minutes_load (
id_db_network bigint, -- 1=FB, 2=TikTok, 3=Google
minute_fetch integer, -- 0 à 1439 (00:00 à 23:59)
qty_ad_id_fetchs bigint, -- Charge actuelle
is_active boolean
);
-- Fonction z_db_get_best_token_network()
SELECT x_id, token, nb_fetch, max_use
FROM db_token t
INNER JOIN db_network n ON t.id_db_network = n.x_id
WHERE n.surname_network = 'FB' -- Spécifique au réseau
AND t.status = 'active'
AND t.nb_fetch < t.max_use
ORDER BY t.nb_fetch ASC, -- Moins utilisé en premier
t.last_use ASC -- Plus ancien en priorité
LIMIT 1;
-- Dans f_upsert_adid_lot ligne 348 :
PERFORM f_upsert_adv_unit(
v_ad->>'id', -- ad_id trouvé
'', -- nom vide
'AAAAAAAAAAAAAAAAAAAAAAAAAA', -- PAGE_ID PAR DÉFAUT !
...
);
/dags/facebook/
├── facebook_fetchs_inventory.py # 05:05 quotidien
├── facebook_fetchs_compliant.py # 06:05 quotidien
├── facebook_fetchs_unit.py # Manuel
└── facebook_logic.py # Logique commune
/dags/tiktok/ # Structure identique
/dags/google/ # Structure identique
# Génération dynamique pour les 1440 minutes
for minute in range(1440): # 0 à 1439
# À chaque minute, vérifier s'il y a des page_ids
page_ids = query_page_ids_for_minute(minute)
if page_ids:
# Lancer fetch detail pour ces page_ids
fetch_detail_for_page_ids(page_ids)
/dags/linkedin/
├── linkedin_share.py # Constantes adaptées
├── token_utils.py # OAuth2 LinkedIn
├── config_loader.py # Configuration
├── linkedin_logic.py # Logique principale
└── linkedin_logic_unitaire.py
INSERT INTO db_network (surname_network) VALUES ('LINKEDIN');
INSERT INTO tb_config_params VALUES
('LINKEDIN_INVENTORY_CONFIG', '{ API config }'),
('LINKEDIN_COMPLIANT_CONFIG', '{ API config }'),
('LINKEDIN_DETAIL_CONFIG', '{ API config }');
INSERT INTO db_minutes_load (id_db_network, minute_fetch, qty_ad_id_fetchs)
SELECT 4, minute, 0
FROM generate_series(0, 1439) minute;