| |
|
|
| 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 = {} |
|
|
| |
| 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"] |
| ]) |
|
|
| |
| 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"] |
| ]) |
|
|
| |
| 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"] |
| ]) |
|
|
| |
| 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"] |
| ]) |
|
|
| |
| 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"] |
| ]) |
|
|
| |
| 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 |