广告组 创建操作
This commit is contained in:
parent
d20d709b8a
commit
38429b015f
@ -5,6 +5,7 @@ namespace app\controller;
|
|||||||
use Google\ApiCore\ApiException;
|
use Google\ApiCore\ApiException;
|
||||||
use support\Request;
|
use support\Request;
|
||||||
use app\service\GoogleAdsCampaignService;
|
use app\service\GoogleAdsCampaignService;
|
||||||
|
use app\service\GoogleAdsGroupService;
|
||||||
use app\service\GoogleAdsAccountService;
|
use app\service\GoogleAdsAccountService;
|
||||||
use support\Response;
|
use support\Response;
|
||||||
use DI\Annotation\Inject;
|
use DI\Annotation\Inject;
|
||||||
@ -18,6 +19,12 @@ class GoogleAdsController
|
|||||||
|
|
||||||
private $googleAdsCampaignService;
|
private $googleAdsCampaignService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Inject
|
||||||
|
* @var GoogleAdsGroupService
|
||||||
|
*/
|
||||||
|
private $googleAdsGroupService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Inject
|
* @Inject
|
||||||
* @var GoogleAdsAccountService
|
* @var GoogleAdsAccountService
|
||||||
@ -25,7 +32,6 @@ class GoogleAdsController
|
|||||||
private $googleAdsAccountService;
|
private $googleAdsAccountService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -38,6 +44,7 @@ class GoogleAdsController
|
|||||||
// 继续处理 Google Ads API 操作
|
// 继续处理 Google Ads API 操作
|
||||||
return $this->addCampaign($options);
|
return $this->addCampaign($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listCampaigns(Request $request)
|
public function listCampaigns(Request $request)
|
||||||
{
|
{
|
||||||
$options = $request->all();
|
$options = $request->all();
|
||||||
@ -45,6 +52,7 @@ class GoogleAdsController
|
|||||||
// 继续处理 Google Ads API 操作
|
// 继续处理 Google Ads API 操作
|
||||||
return $this->getCampaigns($options);
|
return $this->getCampaigns($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteCampaign(Request $request)
|
public function deleteCampaign(Request $request)
|
||||||
{
|
{
|
||||||
$options = $request->all();
|
$options = $request->all();
|
||||||
@ -52,6 +60,7 @@ class GoogleAdsController
|
|||||||
// 继续处理 Google Ads API 操作
|
// 继续处理 Google Ads API 操作
|
||||||
return $this->removeCampaign($options);
|
return $this->removeCampaign($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateCampaign(Request $request)
|
public function updateCampaign(Request $request)
|
||||||
{
|
{
|
||||||
$options = $request->all();
|
$options = $request->all();
|
||||||
@ -68,6 +77,14 @@ class GoogleAdsController
|
|||||||
return $this->addCampaignBudget($options);
|
return $this->addCampaignBudget($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function createGroup(Request $request)
|
||||||
|
{
|
||||||
|
$options = $request->all();
|
||||||
|
|
||||||
|
// 继续处理 Google Ads API 操作
|
||||||
|
return $this->addGroup($options);
|
||||||
|
}
|
||||||
|
|
||||||
public function createLinkManagerToClient(Request $request)
|
public function createLinkManagerToClient(Request $request)
|
||||||
{
|
{
|
||||||
$options = $request->all();
|
$options = $request->all();
|
||||||
@ -125,6 +142,7 @@ class GoogleAdsController
|
|||||||
$resourceName = $this->googleAdsAccountService->runListAccessibleCustomers();
|
$resourceName = $this->googleAdsAccountService->runListAccessibleCustomers();
|
||||||
return $this->successResponse(['links_resource_name' => $resourceName]);
|
return $this->successResponse(['links_resource_name' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get campaigns
|
* get campaigns
|
||||||
* @throws ApiException
|
* @throws ApiException
|
||||||
@ -134,6 +152,7 @@ class GoogleAdsController
|
|||||||
$resourceName = $this->googleAdsCampaignService->runListCampaigns($options['customer_id']);
|
$resourceName = $this->googleAdsCampaignService->runListCampaigns($options['customer_id']);
|
||||||
return $this->successResponse(['campaigns_list' => $resourceName]);
|
return $this->successResponse(['campaigns_list' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除广告系列
|
* 删除广告系列
|
||||||
* @throws ApiException
|
* @throws ApiException
|
||||||
@ -143,6 +162,7 @@ class GoogleAdsController
|
|||||||
$resourceName = $this->googleAdsCampaignService->runRemoveCampaign($options);
|
$resourceName = $this->googleAdsCampaignService->runRemoveCampaign($options);
|
||||||
return $this->successResponse(['campaign_deleted' => $resourceName]);
|
return $this->successResponse(['campaign_deleted' => $resourceName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新广告系列
|
* 更新广告系列
|
||||||
* @throws ApiException
|
* @throws ApiException
|
||||||
@ -153,6 +173,16 @@ class GoogleAdsController
|
|||||||
return $this->successResponse(['campaign_updated' => $resourceName]);
|
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
|
protected function successResponse($data): Response
|
||||||
{
|
{
|
||||||
|
121
app/service/GoogleAdsGroupService.php
Normal file
121
app/service/GoogleAdsGroupService.php
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\service;
|
||||||
|
|
||||||
|
|
||||||
|
use app\util\Helper;
|
||||||
|
use app\util\ArgumentNames;
|
||||||
|
use app\util\ArgumentParser;
|
||||||
|
|
||||||
|
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsClient;
|
||||||
|
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsClientBuilder;
|
||||||
|
use Google\Ads\GoogleAds\Lib\V18\GoogleAdsException;
|
||||||
|
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder;
|
||||||
|
use Google\Ads\GoogleAds\Util\V18\ResourceNames;
|
||||||
|
use Google\Ads\GoogleAds\V18\Enums\AdGroupStatusEnum\AdGroupStatus;
|
||||||
|
use Google\Ads\GoogleAds\V18\Enums\AdGroupTypeEnum\AdGroupType;
|
||||||
|
use Google\Ads\GoogleAds\V18\Errors\GoogleAdsError;
|
||||||
|
use Google\Ads\GoogleAds\V18\Resources\AdGroup;
|
||||||
|
use Google\Ads\GoogleAds\V18\Services\AdGroupOperation;
|
||||||
|
use Google\Ads\GoogleAds\V18\Services\MutateAdGroupsRequest;
|
||||||
|
use Google\ApiCore\ApiException;
|
||||||
|
|
||||||
|
class GoogleAdsGroupService
|
||||||
|
{
|
||||||
|
private $googleAdsClient;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
// $this->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;
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,6 @@ use app\controller\GoogleAdsController;
|
|||||||
use Webman\Route;
|
use Webman\Route;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Route::group('/googleads', function () {
|
//Route::group('/googleads', function () {
|
||||||
// Route::group('/campaign', function () {
|
// Route::group('/campaign', function () {
|
||||||
// Route::post('/create', 'GoogleAdsController@createCampaign');
|
// Route::post('/create', 'GoogleAdsController@createCampaign');
|
||||||
@ -43,6 +42,9 @@ Route::group('/googleads', function () {
|
|||||||
Route::group('/campaign_budget', function () {
|
Route::group('/campaign_budget', function () {
|
||||||
Route::post('/create', [GoogleAdsController::class, 'createCampaignBudget']);
|
Route::post('/create', [GoogleAdsController::class, 'createCampaignBudget']);
|
||||||
});
|
});
|
||||||
|
Route::group('/group', function () {
|
||||||
|
Route::post('/create', [GoogleAdsController::class, 'createGroup']);
|
||||||
|
});
|
||||||
Route::group('/account_link', function () {
|
Route::group('/account_link', function () {
|
||||||
Route::post('/create', [GoogleAdsController::class, 'createLinkManagerToClient']);
|
Route::post('/create', [GoogleAdsController::class, 'createLinkManagerToClient']);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user