Advisor / app /ads1 /fetch_ads_data.py
ps1811's picture
Initial HF Space deployment
39b31c0
Raw
History Blame Contribute Delete
4.17 kB
# app/ads1/runner.py
import pandas as pd
from app.ads1.connector import get_client
from app.ads1.ads_queries import (
CAMPAIGNS_QUERY,
DEVICES_QUERY,
HOURLY_QUERY,
GEO_QUERY,
SEARCH_TERMS_QUERY,
KEYWORDS_QUERY,
RECOMMENDATIONS_QUERY,
)
def run_query(client, customer_id, query):
service = client.get_service("GoogleAdsService")
response = service.search(customer_id=customer_id, query=query)
rows = []
for r in response:
rows.append(r)
return rows
def fetch_all_data(customer_id):
client = get_client()
service = client.get_service("GoogleAdsService")
def execute(query):
response = service.search(customer_id=customer_id, query=query)
return list(response)
print("πŸ”„ Fetching campaigns...")
campaigns = execute(CAMPAIGNS_QUERY)
print("πŸ”„ Fetching devices...")
devices = execute(DEVICES_QUERY)
print("πŸ”„ Fetching hourly data...")
hourly = execute(HOURLY_QUERY)
print("πŸ”„ Fetching geo data...")
geo = execute(GEO_QUERY)
print("πŸ”„ Fetching search terms...")
search_terms = execute(SEARCH_TERMS_QUERY)
print("πŸ”„ Fetching keywords...")
keywords = execute(KEYWORDS_QUERY)
print("πŸ”„ Fetching recommendations...")
recommendations = execute(RECOMMENDATIONS_QUERY)
return {
"campaigns": campaigns,
"devices": devices,
"hourly": hourly,
"geo": geo,
"search_terms": search_terms,
"keywords": keywords,
"recommendations": recommendations
}
def to_dataframes(raw_data):
dfs = {}
# Campaigns
dfs["campaigns"] = pd.DataFrame([
{
"id": r.campaign.id,
"name": r.campaign.name,
"status": r.campaign.status.name,
"impressions": r.metrics.impressions,
"clicks": r.metrics.clicks,
"cost": r.metrics.cost_micros / 1e6,
"ctr": r.metrics.ctr,
"conversions": r.metrics.conversions or 0
}
for r in raw_data["campaigns"]
])
# Devices
dfs["devices"] = pd.DataFrame([
{
"device": r.segments.device.name,
"clicks": r.metrics.clicks,
"impressions": r.metrics.impressions,
"cost": r.metrics.cost_micros / 1e6
}
for r in raw_data["devices"]
])
# Hourly
dfs["hourly"] = pd.DataFrame([
{
"date": r.segments.date,
"hour": r.segments.hour,
"clicks": r.metrics.clicks,
"impressions": r.metrics.impressions,
"cost": r.metrics.cost_micros / 1e6
}
for r in raw_data["hourly"]
])
# Geo
dfs["geo"] = pd.DataFrame([
{
"country_id": r.geographic_view.country_criterion_id,
"clicks": r.metrics.clicks,
"impressions": r.metrics.impressions,
"cost": r.metrics.cost_micros / 1e6
}
for r in raw_data["geo"]
])
# Search terms
dfs["search_terms"] = pd.DataFrame([
{
"search_term": r.search_term_view.search_term,
"clicks": r.metrics.clicks,
"impressions": r.metrics.impressions,
"cost": r.metrics.cost_micros / 1e6
}
for r in raw_data["search_terms"]
])
# Keywords
dfs["keywords"] = pd.DataFrame([
{
"campaign_id": r.campaign.id,
"campaign_name": r.campaign.name,
"ad_group_id": r.ad_group.id if r.ad_group else None,
"ad_group_name": r.ad_group.name if r.ad_group else None,
"keyword": r.ad_group_criterion.keyword.text if r.ad_group_criterion.keyword else None,
"clicks": r.metrics.clicks,
"impressions": r.metrics.impressions,
"cost": r.metrics.cost_micros / 1e6,
"conversions": r.metrics.conversions,
"ctr": r.metrics.ctr,
}
for r in raw_data["keywords"]
])
dfs["recommendations"] = pd.DataFrame([
{
"type": r.recommendation.type.name,
"resource_name": r.recommendation.resource_name,
"campaign": r.recommendation.campaign
}
for r in raw_data["recommendations"]
])
return dfs