首页 > 解决方案 > TargetingIdeaSelector Google Adwords - INVALID_SEARCH_PARAMETERS

问题描述

目前,我正在使用 TargetingIdeaService 来提供 Keyword Planner 功能的子集,方法是向 TargetingIdeaService.get 提供位置列表、语言和 RelatedToQuerySearchParameter 查询,以获取关键字列表及其相关数据。

我的 API 版本:V201806

但是,我得到了例外。

例外:

com.google.api.ads.adwords.axis.v201806.cm.ApiException) ApiException{applicationExceptionType=ApiException, errors=[TargetingIdeaError{apiErrorType=TargetingIdeaError, errorString=TargetingIdeaError.INVALID_SEARCH_PARAMETERS, fieldPath=selector.searchParameters.searchParameters[0], fieldPathElements=[FieldPathElement{field=selector}, FieldPathElement{field=searchParameters}, FieldPathElement{field=searchParameters, index=0}], reason=INVALID_SEARCH_PARAMETERS, trigger=LanguageSearchParameter}, TargetingIdeaError{apiErrorType=TargetingIdeaError, errorString=TargetingIdeaError.INVALID_SEARCH_PARAMETERS, fieldPath=selector.searchParameters.searchParameters[1], fieldPathElements=[FieldPathElement{field=selector}, FieldPathElement{field=searchParameters}, FieldPathElement{field=searchParameters, index=1}], reason=INVALID_SEARCH_PARAMETERS, trigger=LocationSearchParameter}, TargetingIdeaError{apiErrorType=TargetingIdeaError, errorString=TargetingIdeaError.INVALID_SEARCH_PARAMETERS, fieldPath=selector.searchParameters.searchParameters[2], fieldPathElements=[FieldPathElement{field=selector}, FieldPathElement{field=searchParameters}, FieldPathElement{field=searchParameters, index=2}], reason=INVALID_SEARCH_PARAMETERS, trigger=RelatedToQuerySearchParameter}]}

爪哇:

public TargetingIdea[] getClusterCol(ClientAccounts campInfo, String phrase, AccountDetails accDetails) throws ApiException, RemoteException, OAuthException {
    ClientAccounts keyCol = new ClientAccounts();
    GleServices gleServices = new GleServices();
    TargetingIdea[] targetingIdea = null;
    GoogleTokenResponse tokenResp = new GoogleTokenResponse();
    tokenResp.setAccessToken(accDetails.getAccessToken());
    tokenResp.setRefreshToken(accDetails.getRefreshToken());
    gleServices.setAccountDetails(accDetails);
    TargetingIdeaPage page = new TargetingIdeaPage();
    try {
        adWordsSession = gleServices.createAdWordsSession(clientId, clientSecret, tokenResp.getRefreshToken(), developerToken, userAgent);
    } catch (ValidationException ex) {
        Logger.getLogger(TenMinCampaignService.class.getName()).log(Level.SEVERE, null, ex);
    }
    TargetingIdeaServiceInterface targetingIdeaService = (TargetingIdeaServiceInterface) gleServices.getService(gleServices.TARGETING_IDEA_SERVICE, adWordsSession);

    TargetingIdeaSelector selector = new TargetingIdeaSelector();
    try {

        selector.setRequestType(RequestType.IDEAS);
        selector.setIdeaType(IdeaType.KEYWORD);
        selector.setRequestedAttributeTypes(new AttributeType[]{AttributeType.KEYWORD_TEXT});

        Paging paging = new Paging();
        paging.setStartIndex(0);
        paging.setNumberResults(200);
        selector.setPaging(paging);

        Location loc = new Location();
        loc.setId(Long.valueOf(2356));
        LocationSearchParameter countryTargetSearchParameter = new LocationSearchParameter();
        countryTargetSearchParameter.setLocations(new Location[]{loc});

        Language lang = new Language();
        lang.setId(Long.valueOf(1000));
        LanguageSearchParameter langTargetSearchParameter = new LanguageSearchParameter();
        langTargetSearchParameter.setLanguages(new Language[]{lang});

        RelatedToQuerySearchParameter relatedToQuerySearchParameter
                = new RelatedToQuerySearchParameter();
        relatedToQuerySearchParameter.setQueries(new String[]{"bakery"});

        selector.setSearchParameters(new SearchParameter[]{relatedToQuerySearchParameter, countryTargetSearchParameter, langTargetSearchParameter});

        page = targetingIdeaService.get(selector);
        targetingIdea = page.getEntries();

    } catch (ApiException e) {
        for (ApiError er : e.getErrors()) {
            if (er instanceof RateExceededError) {
                try {
                    Thread.sleep(((RateExceededError) er).getRetryAfterSeconds());    // 30seconds
                    page = targetingIdeaService.get(selector);
                    targetingIdea = page.getEntries();
                } catch (Exception th) {
                    e.printStackTrace();
                    throw e;
                }
            }
        }
        e.printStackTrace();
    }
    return targetingIdea;
}

任何帮助都会被挪用。

标签: javagoogle-ads-api

解决方案


推荐阅读