Skip to content

Commit

Permalink
Merge pull request #28 from BingAds/keyword-ideas
Browse files Browse the repository at this point in the history
add keyword planner sample
  • Loading branch information
eric-urban authored Sep 14, 2017
2 parents d33cd0e + d3cbe05 commit 544ac1b
Show file tree
Hide file tree
Showing 2 changed files with 667 additions and 5 deletions.
154 changes: 149 additions & 5 deletions samples/V11/AdInsightHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,20 @@
use SoapVar;
use SoapFault;
use Exception;

use DateTime;

// Specify the Microsoft\BingAds\V11\AdInsight classes that will be used.
use Microsoft\BingAds\V11\AdInsight\GetBudgetOpportunitiesRequest;
use Microsoft\BingAds\V11\AdInsight\GetDomainCategoriesRequest;
use Microsoft\BingAds\V11\AdInsight\GetKeywordIdeaCategoriesRequest;
use Microsoft\BingAds\V11\AdInsight\GetKeywordIdeasRequest;
use Microsoft\BingAds\V11\AdInsight\GetKeywordTrafficEstimatesRequest;

final class AdInsightHelper {

static function GetBudgetOpportunities($campaignId)
{
$GLOBALS['proxy'] = $GLOBALS['AdInsightProxy'];
$GLOBALS['Proxy'] = $GLOBALS['AdInsightProxy'];

$request = new GetBudgetOpportunitiesRequest();
$request->CampaignId = $campaignId;
Expand All @@ -31,7 +34,7 @@ static function GetBudgetOpportunities($campaignId)

static function GetDomainCategories($domainName, $language)
{
$GLOBALS['proxy'] = $GLOBALS['AdInsightProxy'];
$GLOBALS['Proxy'] = $GLOBALS['AdInsightProxy'];

$request = new GetDomainCategoriesRequest();
$request->DomainName = $domainName;
Expand All @@ -40,13 +43,154 @@ static function GetDomainCategories($domainName, $language)
return $GLOBALS['AdInsightProxy']->GetService()->GetDomainCategories($request);
}

// Outputs the list of BudgetOpportunity objects.
static function GetKeywordIdeaCategories()
{
$GLOBALS['Proxy'] = $GLOBALS['AdInsightProxy'];

$request = new GetKeywordIdeaCategoriesRequest();

return $GLOBALS['AdInsightProxy']->GetService()->GetKeywordIdeaCategories($request);
}

static function GetKeywordIdeas(
$expandIdeas,
$ideaAttributes,
$searchParameters)
{
$GLOBALS['Proxy'] = $GLOBALS['AdInsightProxy'];

$request = new GetKeywordIdeasRequest();
$request->ExpandIdeas = $expandIdeas;
$request->IdeaAttributes = $ideaAttributes;
$request->SearchParameters = $searchParameters;

return $GLOBALS['AdInsightProxy']->GetService()->GetKeywordIdeas($request);
}

static function GetKeywordTrafficEstimates($campaignEstimators)
{
$GLOBALS['Proxy'] = $GLOBALS['AdInsightProxy'];

$request = new GetKeywordTrafficEstimatesRequest();
$request->CampaignEstimators = $campaignEstimators;

return $GLOBALS['AdInsightProxy']->GetService()->GetKeywordTrafficEstimates($request);
}


static function OutputKeywordIdeas($keywordIdeas)
{
if ($keywordIdeas != null)
{
foreach ($keywordIdeas->KeywordIdea as $keywordIdea)
{
if ($keywordIdea != null)
{
printf("AdGroupId: %s\n", $keywordIdea->AdGroupId);
printf("AdGroupName: %s\n", $keywordIdea->AdGroupName);
printf("AdImpressionShare: %s\n", $keywordIdea->AdImpressionShare);
printf("Competition: %s\n", $keywordIdea->Competition);
printf("Keyword: %s\n", $keywordIdea->Keyword);
$monthCount = count($keywordIdea->MonthlySearchCounts->long);
if ($monthCount > 0)
{
date_default_timezone_set('UTC');
$now = new DateTime(gmdate('Y-m-d H:i:s', time()));

printf("MonthlySearchCounts for last %s months:\n", $monthCount);
$previousMonths = "-" . $monthCount . " month";
$countDuration = $now->modify($previousMonths);

for ($index = 0; $index < $monthCount; $index++)
{
printf("%s/%s: %s\n",
date_format($countDuration,"m"),
date_format($countDuration,"Y"),
$keywordIdea->MonthlySearchCounts->long[$index]);
$countDuration = $countDuration->modify('+1 month');
}

printf("Average MonthlySearchCounts (Client Side Calculation): %s\n",
array_sum($keywordIdea->MonthlySearchCounts->long) / $monthCount);
}
printf("Relevance: %s\n", $keywordIdea->Relevance);
printf("Source: %s\n", $keywordIdea->Source);
printf("SuggestedBid: %s\n", $keywordIdea->SuggestedBid);
printf("\n");
}
}
}
}

static function OutputCampaignEstimates($campaignEstimates)
{
if ($campaignEstimates != null)
{
foreach ($campaignEstimates->CampaignEstimate as $campaignEstimate)
{
printf("CampaignId: %s\n", $campaignEstimate->CampaignId);
AdInsightHelper::OutputAdGroupEstimates($campaignEstimate->AdGroupEstimates);
}
}
}

static function OutputAdGroupEstimates($adGroupEstimates)
{
if ($adGroupEstimates != null)
{
foreach ($adGroupEstimates->AdGroupEstimate as $adGroupEstimate)
{
printf("AdGroupId: %s\n", $adGroupEstimate->AdGroupId);
AdInsightHelper::OutputKeywordEstimates($adGroupEstimate->KeywordEstimates);
}
}
}

static function OutputKeywordEstimates($keywordEstimates)
{
if ($keywordEstimates != null)
{
foreach ($keywordEstimates->KeywordEstimate as $keywordEstimate)
{
printf("KeywordEstimate Keyword:\n");
AdInsightHelper::OutputKeyword($keywordEstimate->Keyword);
printf("KeywordEstimate Maximum TrafficEstimate:\n");
AdInsightHelper::OutputTrafficEstimate($keywordEstimate->Maximum);
printf("KeywordEstimate Minimum TrafficEstimate:\n");
AdInsightHelper::OutputTrafficEstimate($keywordEstimate->Minimum);
printf("\n");
}
}
}

static function OutputKeyword($keyword)
{
if ($keyword != null)
{
printf("Id: %s\n", $keyword->Id);
printf("MatchType: %s\n", $keyword->MatchType);
printf("Text: %s\n", $keyword->Text);
}
}

static function OutputTrafficEstimate($estimate)
{
if ($estimate != null)
{
printf("AverageCpc: %s\n", $estimate->AverageCpc);
printf("AveragePosition: %s\n", $estimate->AveragePosition);
printf("Clicks: %s\n", $estimate->Clicks);
printf("Ctr: %s\n", $estimate->Ctr);
printf("Impressions: %s\n", $estimate->Impressions);
printf("TotalCost: %s\n", $estimate->TotalCost);
}
}

static function OutputBudgetOpportunities($opportunities, $campaignId)
{
if (!empty($opportunities->Opportunity))
{
foreach ($opportunities->BudgetOpportunity as $opportunity)
foreach ($opportunities->BudgetOpportunity as $opportunity)
{
print "BudgetPoints: \n";
foreach ($opportunity->BudgetPoints as $budgetPoint)
Expand Down
Loading

0 comments on commit 544ac1b

Please sign in to comment.