代码之家  ›  专栏  ›  技术社区  ›  kaytee

Adwords API修改类以传递变量并在变量中获取响应

  •  0
  • kaytee  · 技术社区  · 8 年前

    我试图修改一个来自Adwords API的PHP脚本示例的类。

    我对在PHP中使用对象还很陌生,所以我不知道如何让它工作。

    我想修改下面的脚本,以便将关键字数组作为变量传递,从而替换中包含的关键字:

    $relatedToQuerySearchParameter->setQueries([
            'bakery', 'pastries', 'birthday cake'
        ]);
    

    也许将其用作函数通常可以:

    function GetKeywordIdeas($array_keywords){...}
    

    然后在变量中得到结果

    下面是示例中的代码:

    <?php
    /**
     * Copyright 2017 Google Inc. All Rights Reserved.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    namespace Google\AdsApi\Examples\AdWords\v201710\Optimization;
    
    require __DIR__ . '/../../../../vendor/autoload.php';
    
    use Google\AdsApi\AdWords\AdWordsServices;
    use Google\AdsApi\AdWords\AdWordsSession;
    use Google\AdsApi\AdWords\AdWordsSessionBuilder;
    use Google\AdsApi\AdWords\v201710\cm\Language;
    use Google\AdsApi\AdWords\v201710\cm\NetworkSetting;
    use Google\AdsApi\AdWords\v201710\cm\Paging;
    use Google\AdsApi\AdWords\v201710\o\AttributeType;
    use Google\AdsApi\AdWords\v201710\o\IdeaType;
    use Google\AdsApi\AdWords\v201710\o\LanguageSearchParameter;
    use Google\AdsApi\AdWords\v201710\o\NetworkSearchParameter;
    use Google\AdsApi\AdWords\v201710\o\RelatedToQuerySearchParameter;
    use Google\AdsApi\AdWords\v201710\o\RequestType;
    use Google\AdsApi\AdWords\v201710\o\SeedAdGroupIdSearchParameter;
    use Google\AdsApi\AdWords\v201710\o\TargetingIdeaSelector;
    use Google\AdsApi\AdWords\v201710\o\TargetingIdeaService;
    use Google\AdsApi\Common\OAuth2TokenBuilder;
    use Google\AdsApi\Common\Util\MapEntries;
    
    /**
     * This example gets keyword ideas related to a seed keyword.
     */
    class GetKeywordIdeas {
    
      // If you do not want to use an existing ad group to seed your request, you
      // can set this to null.
      const AD_GROUP_ID = 'INSERT_AD_GROUP_ID_HERE';
      const PAGE_LIMIT = 500;
    
      public static function runExample(AdWordsServices $adWordsServices,
          AdWordsSession $session, $adGroupId) {
        $targetingIdeaService =
            $adWordsServices->get($session, TargetingIdeaService::class);
    
        // Create selector.
        $selector = new TargetingIdeaSelector();
        $selector->setRequestType(RequestType::IDEAS);
        $selector->setIdeaType(IdeaType::KEYWORD);
        $selector->setRequestedAttributeTypes([
            AttributeType::KEYWORD_TEXT,
            AttributeType::SEARCH_VOLUME,
            AttributeType::AVERAGE_CPC,
            AttributeType::COMPETITION,
            AttributeType::CATEGORY_PRODUCTS_AND_SERVICES
        ]);
    
        $paging = new Paging();
        $paging->setStartIndex(0);
        $paging->setNumberResults(10);
        $selector->setPaging($paging);
    
        $searchParameters = [];
        // Create related to query search parameter.
        $relatedToQuerySearchParameter = new RelatedToQuerySearchParameter();
        $relatedToQuerySearchParameter->setQueries([
            'bakery', 'pastries', 'birthday cake'
        ]);
        $searchParameters[] = $relatedToQuerySearchParameter;
    
        // Create language search parameter (optional).
        // The ID can be found in the documentation:
        // https://developers.google.com/adwords/api/docs/appendix/languagecodes
        $languageParameter = new LanguageSearchParameter();
        $english = new Language();
        $english->setId(1000);
        $languageParameter->setLanguages([$english]);
        $searchParameters[] = $languageParameter;
    
        // Create network search parameter (optional).
        $networkSetting = new NetworkSetting();
        $networkSetting->setTargetGoogleSearch(true);
        $networkSetting->setTargetSearchNetwork(false);
        $networkSetting->setTargetContentNetwork(false);
        $networkSetting->setTargetPartnerSearchNetwork(false);
    
        $networkSearchParameter = new NetworkSearchParameter();
        $networkSearchParameter->setNetworkSetting($networkSetting);
        $searchParameters[] = $networkSearchParameter;
    
        // Optional: Use an existing ad group to generate ideas.
        if (!empty($adGroupId)) {
          $seedAdGroupIdSearchParameter = new SeedAdGroupIdSearchParameter();
          $seedAdGroupIdSearchParameter->setAdGroupId($adGroupId);
          $searchParameters[] = $seedAdGroupIdSearchParameter;
        }
        $selector->setSearchParameters($searchParameters);
        $selector->setPaging(new Paging(0, self::PAGE_LIMIT));
    
        // Get keyword ideas.
        $page = $targetingIdeaService->get($selector);
    
        // Print out some information for each targeting idea.
        $entries = $page->getEntries();
        if ($entries !== null) {
          foreach ($entries as $targetingIdea) {
            $data = MapEntries::toAssociativeArray($targetingIdea->getData());
            $keyword = $data[AttributeType::KEYWORD_TEXT]->getValue();
            $searchVolume =
                ($data[AttributeType::SEARCH_VOLUME]->getValue() !== null)
                ? $data[AttributeType::SEARCH_VOLUME]->getValue() : 0;
            $averageCpc = $data[AttributeType::AVERAGE_CPC]->getValue();
            $competition = $data[AttributeType::COMPETITION]->getValue();
            $categoryIds =
                ($data[AttributeType::CATEGORY_PRODUCTS_AND_SERVICES]->getValue()
                    === null)
                ? $categoryIds = '' : implode(
                    ', ',
                    $data[AttributeType::CATEGORY_PRODUCTS_AND_SERVICES]->getValue()
                );
            printf(
                "Keyword with text '%s', average monthly search volume %d, "
                    . "average CPC %d, and competition %.2f "
                    . "was found with categories: %s\n",
                $keyword,
                $searchVolume,
                ($averageCpc === null) ? 0 : $averageCpc->getMicroAmount(),
                $competition,
                $categoryIds
            );
          }
        }
    
        if (empty($entries)) {
          print "No related keywords were found.\n";
        }
      }
    
      public static function main() {
        // Generate a refreshable OAuth2 credential for authentication.
        $oAuth2Credential = (new OAuth2TokenBuilder())
            ->fromFile()
            ->build();
    
        // Construct an API session configured from a properties file and the OAuth2
        // credentials above.
        $session = (new AdWordsSessionBuilder())
            ->fromFile()
            ->withOAuth2Credential($oAuth2Credential)
            ->build();
        self::runExample(new AdWordsServices(), $session, self::AD_GROUP_ID);
      }
    }
    
    GetKeywordIdeas::main();
    

    谢谢你的帮助或解释。

    2 回复  |  直到 8 年前
        1
  •  1
  •   musashii    8 年前

    您需要更改代码中的4行。1.

      public static function main() {
    

    public static function main($array_keywords) {
    

    和2。

    self::runExample(new AdWordsServices(), $session, self::AD_GROUP_ID);
    

    self::runExample(new AdWordsServices(), $session, self::AD_GROUP_ID, $array_keywords);
    

    和3。

     public static function runExample(AdWordsServices $adWordsServices,
      AdWordsSession $session, $adGroupId) {
    

     public static function runExample(AdWordsServices $adWordsServices,
      AdWordsSession $session, $adGroupId, $array_keywords) {
    

    和4。

        $relatedToQuerySearchParameter->setQueries([
        'bakery', 'pastries', 'birthday cake'
    ]);
    

        $relatedToQuerySearchParameter->setQueries($array_keywords);
    

    然后你可以这样称呼它:

    GetKeywordIdeas::main($array_keywords);
    
        2
  •  0
  •   musashii    8 年前

    回答注释,以数组形式返回关键字:

    您需要插入和更改几行:

    在此行之前:

    foreach ($entries as $targetingIdea) {
    

    插入

    $keywords = [];
    

    之后 $keyword = $data[AttributeType::KEYWORD_TEXT]->getValue(); 插入 $keywords[] = $keyword;

    在这些行之前

        }
    if (empty($entries)) {
    

    插入 return $keywords;

    改变 self::runExample(new AdWordsServices(), $session, self::AD_GROUP_ID, $array_keywords);

    return self::runExample(new AdWordsServices(), $session, self::AD_GROUP_ID, $array_keywords);

    那就这样称呼吧 $keywords = GetKeywordIdeas::main($array_keywords);

    推荐文章