public function __invoke() { $today = $this->getDateInThePast(0); $oneWeekAgo = $this->getDateInThePast(7); $twoWeeksAgo = $this->getDateInThePast(14); $threeWeeksAgo = $this->getDateInThePast(21); $service = $this->adwords->getService('AdGroupService'); $selector = new \Selector(); $selector->predicates = [new \Predicate('Status', 'EQUALS', 'ENABLED'), new \Predicate('CampaignStatus', 'EQUALS', 'ENABLED')]; $selector->orderBy = new \OrderBy('ctr', 'ASCENDING'); $selector->paging = new \Paging(0, \AdWordsConstants::RECOMMENDED_PAGE_SIZE); do { $page = $service->get($selector); if (is_array($page->entries)) { foreach ($page->entries as $adGroup) { // Let's look at the trend of the ad group's CTR. $statsThreeWeeksAgo = $this->getStatsFor($adGroup, $threeWeeksAgo, $twoWeeksAgo); $statsTwoWeeksAgo = $this->getStatsFor($adGroup, $twoWeeksAgo, $oneWeekAgo); $statsLastWeek = $this->getStatsFor($adGroup, $oneWeekAgo, $today); // Week over week, the ad group is declining - record that! if ($statsLastWeek->getCtr() < $statsTwoWeeksAgo->getCtr() && $statsTwoWeeksAgo->getCtr() < $statsThreeWeeksAgo->getCtr()) { reportRows . push([adGroup . getCampaign() . getName(), adGroup . getName(), statsLastWeek . getCtr() * 100, statsLastWeek . getCost(), statsTwoWeeksAgo . getCtr() * 100, statsTwoWeeksAgo . getCost(), statsThreeWeeksAgo . getCtr() * 100, statsThreeWeeksAgo . getCost()]); } } } $selector->paging->startIndex += $selector->paging->numberResults; } while (!is_null($page->entries)); }
/** * Make sure that we have a label */ protected function createLabel() { $labelService = $this->adwords->getService('LabelService'); $selector = new \Selector(); $selector->fields = ['LabelId']; $selector->predicates = [new \Predicate('LabelName', 'EQUALS', $this->labelName)]; $page = $labelService->get($selector); if (count($page->entries) === 0) { $this->logger->info('creating label "' . $this->labelName . '"'); $label = new \TextLabel(null, $this->labelName, 'ENABLED'); $operation = new \LabelOperation(); $operation->operand = $label; $operation->operator = 'ADD'; $result = $labelService->mutate([$operation]); // get label // store in $this->label } else { $this->label = $page->entries[0]; } }
protected function getAds($offset = 0, $limit = \AdWordsConstants::RECOMMENDED_PAGE_SIZE) { $criterionService = $this->adwords->getService('AdGroupAdService'); $selector = new \Selector(); $selector->fields = ['Id', 'CreativeFinalMobileUrls', 'CreativeFinalUrls', 'DisplayUrl', 'Url', 'Status', 'Labels', 'AdGroupId']; $selector->predicates = [new \Predicate('Status', 'EQUALS', 'ENABLED'), new \Predicate('Url', 'STARTS_WITH_IGNORE_CASE', 'http')]; $selector->ordering = new \OrderBy('Url', 'ASCENDING'); $selector->paging = new \Paging($offset, $limit); $page = $criterionService->get($selector); if (is_null($page->entries)) { return null; } else { return $page->entries; } }