Skip links

Comment extraire des données fichiers Campaign Manager et SA 360 d’un email avec Python

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 

Leave a comment

Explore
Drag