Petite astuce pour récupérer des données Campaign Manager et SA 360 quotidiennement de façon automatique. Ce cas peut arriver :
- Lorsqu’en interne , les équipes techniques ne se sont pas encore décidés sur le choix de l’outil de Data Ingestion (Airbyte, Fivetran , Funnel , Stitch Data , etc)
- Lorsqu’une agence gère vos campagnes sur un siège campaign manager qui ne vous appartient
L’idée est de récupérer tous les jours , tous les KPI’s ad centric :
- Clics
- Impressions
- Reach
- Conversions ( floodlights )
- Costs
Ces données , consolidées avec les données GA, vont permettre d’avoir une vision globale des performances médias;
Pour le coup ci dessous le set up à mettre en place :
- Demander aux experts médias de créer les rapports en sélectionnant les KPi’s dont ils auront besoin pour la consolidation
- Configurer l’export automatique quotidien des rapports en csv vers une adresse email
- Récupérer et stocker les données des fichiers csv vers une dataset BigQuery

Le script ci-dessous effectue les tâches suivantes :
- Connexion à la boite email
- Filtrer les emails pour ne sélectionner que l’email venant de SA360 à J-1
- Récupérer le fichier en PJ du mail
- Déziper le fichier
- Récupérer le fichier csv
- Le transformer en dataframe
- Nettoyer les colonnes du dataframe
- Pousser le fichier vers une table BigQuery
# Import Packages
import pandas_gbq
import re
import openpyxl
from zipfile import ZipFile
import pandas as pd
from io import BytesIO
from imap_tools import MailBox, AND
# Import Google Cloud Packages
from google.cloud import bigquery
from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file('key.json')
bq_client = bigquery.Client(credentials=credentials, project=credentials.project_id)
# You need to create an application password in your google account ( Goolge Account -> Security -> Application key words)
# get list of email subjects from INBOX folder - equivalent verbose version
mailbox = MailBox('imap.gmail.com')
mailbox.login('xxxxxxx@data-hanalytics.io','password', initial_folder='INBOX') # or mailbox.folder.set instead 3d arg
last_email = [msg for msg in mailbox.fetch(AND(subject='Report SA360'))][-1]
filename = [att.filename for att in last_email.attachments]
# Download the file in the directory
for att in last_email.attachments:
with open("data_search.zip", "wb") as fd:
fd.write(att.payload)
# Opening the zip file in READ mode
with ZipFile('data_search.zip') as myzip:
# printing all the contents of the zip file
myzip.printdir()
# extracting all the files
print('Extracting all the files now...')
myzip.extractall()
print('Done!')
# Load Data
search_cm_data = pd.read_csv('Report SA360.csv', encoding = 'utf-16')
# Clean data Columns
new_columns = []
for x in search_cm_data.columns:
new_columns.append(clean_colum(x))
search_cm_data.columns = new_columns
search_cm_data = search_cm_data.fillna(0)
search_cm_data = search_cm_data.rename(columns={"From": "date_from", "To": "date_to"})
search_cm_data.to_csv('cm_data_to_load.csv')
data_to_load = pd.read_csv('cm_data_to_load.csv', dtype=str)
data_to_load.drop('Unnamed: 0',axis=1, inplace=True)
# Push Data to BigQuery
table_id = 'Dataset.cm_data_search'
pandas_gbq.to_gbq(data_to_load, table_id,if_exists='append', credentials=credentials)
Hanalytics vous accompagne dans la mise en place d’un Modern Data Stack quelle que soit la taille de votre entreprise. Découvrez nos cas clients