Spaces:
Sleeping
Sleeping
| # 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 |