You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Google Ads API生成的关键词创意与请求关键词关联?

问题

我需要为多个关键词获取相关的关键词创意及其指标,目前使用Google Ads API的<GenerateKeywordIdeasRequest>接口。最初逐个传入关键词,将结果转为DataFrame后筛选月搜索量Top3的创意,但这种方式效率极低。尝试批量传入所有关键词后,处理时间大幅缩短,但所有关键词的创意结果混杂在一起,无法区分每个创意对应的原请求关键词。

现有实现代码
import pandas as pd
from google.ads.googleads.client import GoogleAdsClient

class GoogleAD:
    def __init__(self):
      pass
    
    def get_keywords_search_volume(client, customer_id, location_ids, language_id, keyword_texts, page_url= None):
        """从Google Ads API获取关键词搜索量的函数"""
        keyword_plan_idea_service = client.get_service("KeywordPlanIdeaService")
        keyword_competition_level_enum = (client.enums.KeywordPlanCompetitionLevelEnum)
        keyword_plan_network = (client.enums.KeywordPlanNetworkEnum.GOOGLE_SEARCH_AND_PARTNERS)
        location_rns = GoogleAD.map_locations_ids_to_resource_names(client, location_ids)
        language_rn = client.get_service("GoogleAdsService").language_constant_path(language_id)
        
        # 生成关键词创意时,关键词或页面URL至少需要提供一个
        # 因此如果两者都未提供,将抛出错误
        if not (keyword_texts or page_url):
            raise ValueError(
                "必须提供关键词或页面URL中的至少一个,"
                "但两者都未指定。"
            )
        
        # 根据传入的是关键词、页面URL还是两者都有,请求中只能设置"url_seed"、"keyword_seed"或"keyword_and_url_seed"中的一个字段
        request = client.get_type("GenerateKeywordIdeasRequest")
        request.customer_id = customer_id
        request.language = language_rn
        request.geo_target_constants = location_rns
        request.include_adult_keywords = False
        request.keyword_plan_network = keyword_plan_network
        
        # 如果仅提供页面URL而无关键词,需要初始化UrlSeed对象并将page_url设为"url"字段
        if not keyword_texts and page_url:
            request.url_seed.url = page_url
        
        # 如果仅提供关键词列表而无页面URL,需要初始化KeywordSeed对象,并将"keywords"字段设为StringValue对象列表
        if keyword_texts and not page_url:
            request.keyword_seed.keywords.extend(keyword_texts)
        
        # 如果同时提供关键词列表和页面URL,需要初始化KeywordAndUrlSeed对象,同时设置"url"和"keywords"字段
        if keyword_texts and page_url:
            request.keyword_and_url_seed.url = page_url
            request.keyword_and_url_seed.keywords.extend(keyword_texts)
        
        keyword_ideas = keyword_plan_idea_service.generate_keyword_ideas(request=request)
        
        for idea in keyword_ideas:
            competition_value = idea.keyword_idea_metrics.competition.name
        return keyword_ideas
    
    def map_locations_ids_to_resource_names(client, location_ids):
            """将位置ID列表转换为资源名称
            参数:
                client: 初始化后的GoogleAdsClient实例
                location_ids: 位置ID字符串列表
            返回:
                使用给定位置ID生成的资源名称字符串列表
            """
            build_resource_name = client.get_service(
                "GeoTargetConstantService"
            ).geo_target_constant_path
            return [build_resource_name(location_id) for location_id in location_ids]
    
    def get_keyword_df(key_word): 
        """生成包含关键词搜索量的DataFrame的函数"""
        try:
            client = GoogleAdsClient.load_from_storage('desc.yaml')
            list_keywords = GoogleAD.get_keywords_search_volume(client, "686xxxxx647", ["2840"], "1000", key_word, None)
            keyword_df = pd.DataFrame()
            for idea in list_keywords:
                keyword_dict = {}
                competition_value = idea.keyword_idea_metrics.competition.name
                idea_text = idea.text
                monthly_search_volume = idea.keyword_idea_metrics.avg_monthly_searches
                keyword_dict['idea_text'] = idea_text
                keyword_dict['monthly_search_volume'] = int(monthly_search_volume)
                keyword_dict['competition_value'] = competition_value
                keyword_dict['key_word'] = key_word
                keyword_dict['key_word_modified'] = key_word.replace('%',' percent')
                keyword_series = pd.Series(keyword_dict)
                keyword_df = keyword_df.append(keyword_series, ignore_index = True)
        except Exception as e:
            print(e)
            # print(e.args[2])
            keyword_df = pd.DataFrame()
        return keyword_df


suggestion_df = GoogleAD.get_keyword_df(['bottle'])

内容的提问来源于stack exchange,提问作者Darkstar Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:01:00