Hello,

I'm trying to save last month's search volume for our product names in our 
database. Our products are very common brands and models - we sell tires. 

We want to apply these filters:
- Period: last month
- Country: the Netherlands

We have about 4.3k products and since the API is limited to 700 keywords at 
once I needed to adjust to sample code. I made this:

namespace Google\AdsApi\Examples\AdWords\v201702\Optimization;

require 'vendor/autoload.php';
$path = $_SERVER['DOCUMENT_ROOT'];

define('WP_USE_THEMES', true);


include_once $path . '/wp-load.php';

use Band;




function getFullBandenMerk($merk)
{
return Band::fullMerk($merk);
}


use Google\AdsApi\AdWords\AdWordsServices;
use Google\AdsApi\AdWords\AdWordsSession;
use Google\AdsApi\AdWords\AdWordsSessionBuilder;
use Google\AdsApi\AdWords\v201702\cm\Keyword;
use Google\AdsApi\AdWords\v201702\cm\Language;
use Google\AdsApi\AdWords\v201702\cm\Location;
use Google\AdsApi\AdWords\v201702\cm\NetworkSetting;
use Google\AdsApi\AdWords\v201702\cm\Paging;
use Google\AdsApi\AdWords\v201702\o\AttributeType;
use Google\AdsApi\AdWords\v201702\o\IdeaType;
use Google\AdsApi\AdWords\v201702\o\LanguageSearchParameter;
use Google\AdsApi\AdWords\v201702\o\LocationSearchParameter;
use Google\AdsApi\AdWords\v201702\o\NetworkSearchParameter;
use Google\AdsApi\AdWords\v201702\o\RelatedToQuerySearchParameter;
use Google\AdsApi\AdWords\v201702\o\RequestType;
use Google\AdsApi\AdWords\v201702\o\TargetingIdeaSelector;
use Google\AdsApi\AdWords\v201702\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 {

  const PAGE_LIMIT = 1000;
  const perPage = 699;
  
  
  

  public static function runExample(AdWordsServices $adWordsServices,
      AdWordsSession $session, $page) {
    $targetingIdeaService =
        $adWordsServices->get($session, TargetingIdeaService::class);

    // Create selector.
    $selector = new TargetingIdeaSelector();
    $selector->setRequestType(RequestType::STATS);
    $selector->setIdeaType(IdeaType::KEYWORD);
    $selector->setRequestedAttributeTypes([
        AttributeType::KEYWORD_TEXT,
        AttributeType::TARGETED_MONTHLY_SEARCHES,
    ]);
    
    $searchParameters = [];
    
    global $wpdb;
    
    $search = $wpdb->get_results("SELECT DISTINCT merk, beschrijving FROM 
bc_banden WHERE merk != '' AND beschrijving != ''  LIMIT ".self::perPage." 
OFFSET ".($page*self::perPage));
    
    $keywords = array();
    
    foreach($search as $item)
    {
   $keyword = trim(str_replace('*', '', str_replace('?', ' ', 
str_replace('/', ' ', preg_replace("/\([^)]+\)/","", 
getFullBandenMerk($item->merk).' '.$item->beschrijving)))));
   
   $keywords[] = $keyword;
   
  # echo $keyword.','.PHP_EOL;
    }
    
    
    $keywords = array_unique($keywords);
  
    // Create related to query search parameter.
    $relatedToQuerySearchParameter = new RelatedToQuerySearchParameter();
    $relatedToQuerySearchParameter->setQueries($keywords);
    $searchParameters[] = $relatedToQuerySearchParameter;
    
    $locationData = new LocationSearchParameter();
    $nederland = new Location();
    $nederland->setId(2558);
    $locationData->setLocations([$nederland]);
    $searchParameters[] = $locationData;

    // 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;

    $selector->setSearchParameters($searchParameters);
    $selector->setPaging(new Paging(0, self::PAGE_LIMIT));

    $totalNumEntries = 0;
        
    do {
      // Retrieve targeting ideas one page at a time, continuing to request
      // pages until all of them have been retrieved.
      $page = $targetingIdeaService->get($selector);

      // Print out some information for each targeting idea.
      if ($page->getEntries() !== null) {
        $totalNumEntries = $page->getTotalNumEntries();
        foreach ($page->getEntries() as $targetingIdea) {
       
          $data = MapEntries::toAssociativeArray($targetingIdea->getData());
          
          $keyword = $data[AttributeType::KEYWORD_TEXT]->getValue();
          $searchVolume =
              ($data[AttributeType::TARGETED_MONTHLY_SEARCHES]->getValue() 
!== null)
              ? $data[AttributeType::TARGETED_MONTHLY_SEARCHES]->getValue() 
: 0;

 foreach($searchVolume as $volume)
 {
#  echo $keyword.' '.$volume->getYear().' '.$volume->getMonth().' 
'.$volume->getCount().PHP_EOL;
 
 $searchvol = $volume->getCount();
   
 $wpdb->query($wpdb->prepare("INSERT INTO bc_banden_searchvolume 
(searchterm, searchvolume) VALUES (%s, %d) ON DUPLICATE KEY UPDATE 
searchvolume = %d;", $keyword, $searchvol, $searchvol));
 break;

 }
        }
      }

      $selector->getPaging()->setStartIndex(
          $selector->getPaging()->getStartIndex() + self::PAGE_LIMIT);
    } while ($selector->getPaging()->getStartIndex() < $totalNumEntries);

  }

  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();
        
    global $wpdb;
    
    $search = $wpdb->get_results("SELECT DISTINCT merk, beschrijving FROM 
bc_banden WHERE merk != '' AND beschrijving != ''");
    $results = count($search);
    unset($search);
    $pages = ceil($results/self::perPage);
    
    for($i = 0; $i < $pages; $i++)
    {
    self::runExample(new AdWordsServices(), $session, $i);
    }
    
  }
}

GetKeywordIdeas::main();

But for some reason I only get 18 results inserted in our database, with 
only 1 keyword that actually has a search volume bigger than 0.. What am I 
doing wrong? I spend a lot of time debugging but it seems that I only get 
less results.. When I put my product names in the keyword planner I get 
results for almost all products. 

My developer key is approved.

Thank you

-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
Visit this group at https://groups.google.com/group/adwords-api.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/adwords-api/f5f3fbf0-6992-470c-b9b5-01406f8e8929%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
  • Search volumes ... Mark

Reply via email to