From 38429b015f236347cc9a51348ab95dd1c2f7d54a Mon Sep 17 00:00:00 2001 From: hgc Date: Tue, 17 Dec 2024 11:15:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=BF=E5=91=8A=E7=BB=84=20=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/GoogleAdsController.php | 32 ++++++- app/service/GoogleAdsGroupService.php | 121 +++++++++++++++++++++++++ config/route.php | 4 +- 3 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 app/service/GoogleAdsGroupService.php diff --git a/app/controller/GoogleAdsController.php b/app/controller/GoogleAdsController.php index 996d471..45432f8 100644 --- a/app/controller/GoogleAdsController.php +++ b/app/controller/GoogleAdsController.php @@ -5,6 +5,7 @@ namespace app\controller; use Google\ApiCore\ApiException; use support\Request; use app\service\GoogleAdsCampaignService; +use app\service\GoogleAdsGroupService; use app\service\GoogleAdsAccountService; use support\Response; use DI\Annotation\Inject; @@ -18,6 +19,12 @@ class GoogleAdsController private $googleAdsCampaignService; + /** + * @Inject + * @var GoogleAdsGroupService + */ + private $googleAdsGroupService; + /** * @Inject * @var GoogleAdsAccountService @@ -25,7 +32,6 @@ class GoogleAdsController private $googleAdsAccountService; - public function __construct() { @@ -38,6 +44,7 @@ class GoogleAdsController // 继续处理 Google Ads API 操作 return $this->addCampaign($options); } + public function listCampaigns(Request $request) { $options = $request->all(); @@ -45,6 +52,7 @@ class GoogleAdsController // 继续处理 Google Ads API 操作 return $this->getCampaigns($options); } + public function deleteCampaign(Request $request) { $options = $request->all(); @@ -52,6 +60,7 @@ class GoogleAdsController // 继续处理 Google Ads API 操作 return $this->removeCampaign($options); } + public function updateCampaign(Request $request) { $options = $request->all(); @@ -68,6 +77,14 @@ class GoogleAdsController return $this->addCampaignBudget($options); } + public function createGroup(Request $request) + { + $options = $request->all(); + + // 继续处理 Google Ads API 操作 + return $this->addGroup($options); + } + public function createLinkManagerToClient(Request $request) { $options = $request->all(); @@ -125,6 +142,7 @@ class GoogleAdsController $resourceName = $this->googleAdsAccountService->runListAccessibleCustomers(); return $this->successResponse(['links_resource_name' => $resourceName]); } + /** * get campaigns * @throws ApiException @@ -134,6 +152,7 @@ class GoogleAdsController $resourceName = $this->googleAdsCampaignService->runListCampaigns($options['customer_id']); return $this->successResponse(['campaigns_list' => $resourceName]); } + /** * 删除广告系列 * @throws ApiException @@ -143,6 +162,7 @@ class GoogleAdsController $resourceName = $this->googleAdsCampaignService->runRemoveCampaign($options); return $this->successResponse(['campaign_deleted' => $resourceName]); } + /** * 更新广告系列 * @throws ApiException @@ -153,6 +173,16 @@ class GoogleAdsController return $this->successResponse(['campaign_updated' => $resourceName]); } + /** + * 新增广告组 + * @throws ApiException + */ + public function addGroup($options): Response + { + $resourceName = $this->googleAdsGroupService->runAddGroup($options); + return $this->successResponse(['groups_created' => $resourceName]); + } + // 可以加入一些公共方法 protected function successResponse($data): Response { diff --git a/app/service/GoogleAdsGroupService.php b/app/service/GoogleAdsGroupService.php new file mode 100644 index 0000000..c2eb7d5 --- /dev/null +++ b/app/service/GoogleAdsGroupService.php @@ -0,0 +1,121 @@ +customerId = getenv('GOOGLE_ADS_CUSTOMER_ID'); + + // OAuth2 Token Authentication + $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build(); + + // Google Ads Client initialization + $this->googleAdsClient = (new GoogleAdsClientBuilder()) + ->fromFile() + ->withOAuth2Credential($oAuth2Credential) + ->build(); + } + + + /** + * This example updates a campaign by setting the status to `PAUSED`. To get campaigns, run + * GetCampaigns.php. + */ + /* @param int $customerId the customer ID + * @param $options + * @return mixed + * @throws ApiException + */ + public function runAddGroup($options): mixed + { + $googleAdsClient = $this->googleAdsClient; + // Creates a single shared budget to be used by the campaigns added below. + $resourceNames = self::addGroup($googleAdsClient, $options['customer_id'], $options['campaign_id']); + + return $resourceNames; + } + + + /** + * Runs the addGroup example. + * + * @param GoogleAdsClient $googleAdsClient the Google Ads API client + * @param int $customerId the customer ID + * @param int $campaignId the campaign ID to add ad groups to + */ + public static function addGroup( + GoogleAdsClient $googleAdsClient, + int $customerId, + int $campaignId + ) + { + $campaignResourceName = ResourceNames::forCampaign($customerId, $campaignId); + + $operations = []; + + // Constructs an ad group and sets an optional CPC value. + $adGroup1 = new AdGroup([ + 'name' => 'Earth to Mars Cruises #' . Helper::getPrintableDatetime(), + 'campaign' => $campaignResourceName, + 'status' => AdGroupStatus::ENABLED, + 'type' => AdGroupType::SEARCH_STANDARD, + 'cpc_bid_micros' => 10000000 + ]); + + $adGroupOperation1 = new AdGroupOperation(); + $adGroupOperation1->setCreate($adGroup1); + $operations[] = $adGroupOperation1; + + // Constructs another ad group. + $adGroup2 = new AdGroup([ + 'name' => 'Earth to Venus Cruises #' . Helper::getPrintableDatetime(), + 'campaign' => $campaignResourceName, + 'status' => AdGroupStatus::ENABLED, + 'type' => AdGroupType::SEARCH_STANDARD, + 'cpc_bid_micros' => 20000000 + ]); + + $adGroupOperation2 = new AdGroupOperation(); + $adGroupOperation2->setCreate($adGroup2); + $operations[] = $adGroupOperation2; + + // Issues a mutate request to add the ad groups. + $adGroupServiceClient = $googleAdsClient->getAdGroupServiceClient(); + $response = $adGroupServiceClient->mutateAdGroups(MutateAdGroupsRequest::build( + $customerId, + $operations + )); + $resourceNames = []; + + printf("Added %d ad groups:%s", $response->getResults()->count(), PHP_EOL); + + foreach ($response->getResults() as $addedAdGroup) { + /** @var AdGroup $addedAdGroup */ + print $addedAdGroup->getResourceName() . PHP_EOL; + $resourceNames[] = $addedAdGroup->getResourceName(); + } + return $resourceNames; + } +} diff --git a/config/route.php b/config/route.php index 6eb65c5..883fb31 100644 --- a/config/route.php +++ b/config/route.php @@ -17,7 +17,6 @@ use app\controller\GoogleAdsController; use Webman\Route; - //Route::group('/googleads', function () { // Route::group('/campaign', function () { // Route::post('/create', 'GoogleAdsController@createCampaign'); @@ -43,6 +42,9 @@ Route::group('/googleads', function () { Route::group('/campaign_budget', function () { Route::post('/create', [GoogleAdsController::class, 'createCampaignBudget']); }); + Route::group('/group', function () { + Route::post('/create', [GoogleAdsController::class, 'createGroup']); + }); Route::group('/account_link', function () { Route::post('/create', [GoogleAdsController::class, 'createLinkManagerToClient']); });