Как создать группы продуктов (Product Partition), используя клиентскую библиотеку php API Google AdWords? - PullRequest
0 голосов
/ 26 марта 2019

Я работаю с Google AdWords API, чтобы создавать группы объявлений и группы продуктов (разделы продуктов), используя клиентскую библиотеку PHP, предоставленную командой Google. Я успешно создал группы объявлений, используя эту библиотеку. Но я застрял в момент создания групп продуктов для этой группы объявлений.

Я уверен, что для создания групп товаров нам нужны торговые кампании. Я попытался создать разделы продуктов для этой торговой кампании, используя скрипт «AddProductPartitionTree.php», предоставленный в клиентской библиотеке. Но каждый раз выдает ошибку

[AdGroupCriterionError.PRODUCT_PARTITION_ALREADY_EXISTS @ operations [8].

При создании корневого узла разделов продукта что-то не так

Я делюсь кодом скрипта раздела продукта ниже:

private function createProductPartition(AdWordsServices $adWordsServices,
    AdWordsSession $session,
    $adGroupId)
{
    // The most trivial partition tree has only a unit node as the root:
    // $productPartitions->createBiddableUnit(null, null, 100000);

    $operations = [];
    $root = ProductPartitions::createSubdivision();
    // print_r($root);

    $criterion = ProductPartitions::asBiddableAdGroupCriterion($adGroupId, $root);
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $newCondition = new ProductCanonicalCondition();
    $newCondition->setCondition(ProductCanonicalConditionCondition::NEW_VALUE);
    $newConditionUnit = ProductPartitions::createUnit($root, $newCondition);
    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $newConditionUnit,
        200000
    );
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $usedCondition = new ProductCanonicalCondition();
    $usedCondition->setCondition(ProductCanonicalConditionCondition::USED);
    $usedConditionUnit = ProductPartitions::createUnit($root, $usedCondition);
    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $usedConditionUnit,
        100000
    );
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $otherCondition = ProductPartitions::createSubdivision(
        $root,
        new ProductCanonicalCondition()
    );
    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $otherCondition
    );
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $coolBrand = new ProductBrand();
    $coolBrand->setValue('aerotech');
    $coolBrandUnit = ProductPartitions::createUnit($otherCondition, $coolBrand);

    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $coolBrandUnit,
        900000
    );

    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $cheapBrand = new ProductBrand();
    $cheapBrand->setValue('taylormade');
    $cheapBrandUnit = ProductPartitions::createUnit($otherCondition, $cheapBrand);
    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $cheapBrandUnit,
        10000
    );
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $otherBrand = ProductPartitions::createSubdivision(
        $otherCondition,
        new ProductBrand()
    );

    // print_r($otherBrand);
    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $otherBrand
    );
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    // The value for the bidding category is a fixed ID for the 'Luggage & Bags'
    // category. You can retrieve IDs for categories from the
    // ConstantDataService.
    // See the 'GetProductCategoryTaxonomy' example for more details.
    $productBiddingCategory = new ProductBiddingCategory();
    // $productBiddingCategory->setType(ProductDimensionType::UNKNOWN);
    $productBiddingCategory->setType(ProductDimensionType::BIDDING_CATEGORY_L1);
    // $productBiddingCategory->setValue(-5914235892932915235);
    // $productBiddingCategory->setValue(6085370270382700000);
    $productBiddingCategoryUnit = ProductPartitions::createUnit($otherBrand, $productBiddingCategory);
    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $productBiddingCategoryUnit,
        750000
    );
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $productBiddingCategory = new ProductBiddingCategory();
    $productBiddingCategory->setType(ProductDimensionType::BIDDING_CATEGORY_L1);
    $productBiddingCategoryUnit = ProductPartitions::createUnit($otherBrand, $productBiddingCategory);
    $criterion = ProductPartitions::asBiddableAdGroupCriterion(
        $adGroupId,
        $productBiddingCategoryUnit,
        110000
    );
    $operation = ProductPartitions::createAddOperation($criterion);
    $operations[] = $operation;

    $adGroupCriterionService = $adWordsServices->get($session, AdGroupCriterionService::class);
    print_r($operations);
    exit;
    // Creates ad group criteria on the server.
    $adGroupCriterionService->mutate($operations);

    // Display the production partition tree.
    printf(
        "%s\n",
        ProductPartitions::showAdGroupTree(
            $adWordsServices,
            $session,
            $adGroupId
        )
    );

}

Я хотел бы получить помощь в создании групп продуктов для групп объявлений в AdWords.

Помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 23 июня 2019

Сначала удалите существующие разделы и создайте новые.


//this might work

 $selector = new Selector();
            $selector->setFields(array('Id', 'CpcBid', 'CaseValue', 'ParentCriterionId', 'PartitionType'));
            $selector->setPredicates(array(new Predicate('AdGroupId', 'IN', [$adGroupId]),
                new Predicate('Status', 'NOT_IN', [\Google\AdsApi\AdWords\v201809\cm\UserStatus::REMOVED])
                ));
            $selector->setPaging(new Paging(0, self::PAGE_LIMIT));
            $totalNumberOfEntries = 0;
            try {
                do {
                    echo '<pre>';
                    $page = $adGroupCriterionService->get($selector);

                    if ($page->getEntries() !== null) {
                        $totalNumberOfEntries = $page->getTotalNumEntries();
                        foreach ($page->getEntries() as $entry) {
                            $subId = strval($entry->getCriterion()->getId());
                            $parId = strval($entry->getCriterion()->getParentCriterionId());

                        }
                    }
                    $selector->getPaging()->setStartIndex($selector->getPaging()->getStartIndex() + self::PAGE_LIMIT);
                } while ($selector->getPaging()->getStartIndex() < $totalNumberOfEntries);
            } catch (Exception $ex) {

            }


 $criterion = new Criterion();        
        $criterion->setCriterionType(\Google\AdsApi\AdWords\v201809\cm\CriterionType::PRODUCT_PARTITION);
        $criterion->setId($parId);

        // Create an ad group criterion.
        $adGroupCriterion = new AdGroupCriterion();
        $adGroupCriterion->setAdGroupId($adGroupId);
        $adGroupCriterion->setCriterion($criterion);
        // Create an ad group criterion operation and add it the operations list.
        $operation = new AdGroupCriterionOperation();
        $operation->setOperand($adGroupCriterion);
        $operation->setOperator(Operator::REMOVE);
        $operations = [$operation];
       $adGroupCriterionService->mutate($operations);


#in case of TOO LOW error, create a subdivision.
`
...