webman_ad/app/controller/GoogleAdsController.php

450 lines
12 KiB
PHP

<?php
namespace app\controller;
use Google\ApiCore\ApiException;
use support\Request;
use app\service\GoogleAdsCampaignService;
use app\service\GoogleAdsGroupService;
use app\service\GoogleAdsAdService;
use app\service\GoogleAdsAssetService;
use app\service\GoogleAdsAssetRelationService;
use app\service\GoogleAdsAccountService;
//use app\service\GoogleOAuthService;
use support\Response;
use DI\Annotation\Inject;
use think\facade\Db as ThinkDb;
class GoogleAdsController
{
/**
* @Inject
* @var GoogleAdsCampaignService
*/
private $googleAdsCampaignService;
/**
* @Inject
* @var GoogleAdsGroupService
*/
private $googleAdsGroupService;
/**
* @Inject
* @var GoogleAdsAdService
*/
private $googleAdsAdService;
/**
* @Inject
* @var GoogleAdsAssetService
*/
private $googleAdsAssetService;
/**
* @Inject
* @var GoogleAdsAssetRelationService
*/
private $googleAdsAssetRelationService;
/**
* @Inject
* @var GoogleAdsAccountService
*/
private $googleAdsAccountService;
public function __construct()
{
}
public function createCampaign(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->addCampaign($options);
}
public function listCampaigns(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->getCampaigns($options);
}
public function listGroups(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->getGroups($options);
}
public function listAds(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->getAds($options);
}
public function listAssets(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->getAssets($options);
}
public function listAssetRelations(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
if($options['asset_type'] == 2){
return $this->getVideoAssetRelations($options);
}elseif($options['asset_type'] == 4){
$this->getAssetRelations($options);
}
}
public function listDateDatas(Request $request)
{
$options = $request->all();
return $this->getDateDatas($options);
}
public function listCampaignsNext(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->getCampaignsNext($options);
}
public function deleteCampaign(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->removeCampaign($options);
}
public function updateCampaign(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->modifyCampaign($options);
}
public function createCampaignBudget(Request $request)
{
$options = $request->all();
// return json(['code' => 0, 'msg' => getenv('GOOGLE_ADS_CUSTOMER_ID'),'data'=>$options]);
// 继续处理 Google Ads API 操作
return $this->addCampaignBudget($options);
}
public function createGroup(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->addGroup($options);
}
public function updateGroup(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->modifyGroup($options);
}
public function updateAd(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->modifyAd($options);
}
public function updateResponsiveSearchAd(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->modifyResponsiveSearchAd($options);
}
public function listResponsiveSearchAds(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->getResponsiveSearchAds($options);
}
public function listGoogleAdsFields(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->searchForGoogleAdsFields($options);
}
public function createLinkManagerToClient(Request $request)
{
$options = $request->all();
// 继续处理 Google Ads API 操作
return $this->addLinkManagerToClient($options);
}
/**
* 创建广告系列
* @throws ApiException
*/
public function addCampaign($options): Response
{
// 使用 $options 数组中的数据进行 Google Ads API 的调用
// 例如使用 $options['customer_id'] 和 $options['feed_id']
// 调用相应的 Google Ads 服务
// $budgetResourceName = $this->googleAdsCampaignBudgetService->createCampaignBudget();
$resourceName = $this->googleAdsCampaignService->runAddCampaign(4060397299, $options);
return $this->successResponse(['campaign_resource_name' => $resourceName]);
}
/**
* 创建广告预算
* @throws ApiException
*/
public function addCampaignBudget($options): Response
{
$resourceName = $this->googleAdsCampaignService->runAddCampaignBudget(0, $options);
return $this->successResponse(['budget_resource_name' => $resourceName]);
}
/**
* 关联广告客户ID
* @throws ApiException
*/
public function addLinkManagerToClient($options): Response
{
$resourceName = $this->googleAdsAccountService->runLinkManagerToClient($options);
return $this->successResponse(['link_resource_name' => $resourceName]);
}
/**
* get campaigns
* @throws ApiException
*/
public function getCampaigns($options): Response
{
$resourceName = $this->googleAdsCampaignService->runListCampaigns($options['customer_id']);
return $this->successResponse(['campaigns_list' => $resourceName]);
}
/**
* get groups
* @throws ApiException
*/
public function getGroups($options): Response
{
$resourceName = $this->googleAdsGroupService->runListGroups($options['customer_id'], $options);
return $this->successResponse(['groups_list' => $resourceName]);
}
/**
* get groups
* @throws ApiException
*/
public function getAds($options): Response
{
$resourceName = $this->googleAdsAdService->runListAds($options['customer_id'],$options);
return $this->successResponse(['groups_list' => $resourceName]);
}
/**
* get assets
* @throws ApiException
*/
public function getAssets($options): Response
{
$resourceName = $this->googleAdsAssetService->runListAssets($options['customer_id']);
// return $this->successResponse(['assets_list' => $resourceName]);
return $this->successResponse(['assets_list' => 'succeed added']);
}
/**
* get assets
* @throws ApiException
*/
public function getAssetRelations($options): Response
{
$resourceName = $this->googleAdsAssetRelationService->runListAssetRelations($options['customer_id']);
return $this->successResponse(['assets_relation_list' => $resourceName]);
// return $this->successResponse(['assets_relation_list' => 'succeed added']);
}
/**
* get assets
* @throws ApiException
*/
public function getVideoAssetRelations($options): Response
{
$resourceName = $this->googleAdsAssetRelationService->runListVideoAssetRelations($options['customer_id']);
return $this->successResponse(['assets_relation_list' => $resourceName]);
// return $this->successResponse(['assets_relation_list' => 'succeed added']);
}
/**
* get date datas
* @throws ApiException
*/
public function getDateDatas($options): Response
{
$resourceName = $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], '2024-12-18');
return $this->successResponse(['date_datas_list' => $resourceName]);
}
/**
* get campaigns Next
* @throws ApiException
*/
public function getCampaignsNext($options): Response
{
$data = $this->googleAdsCampaignService->runListCampaignsNext($options);
return $this->successResponse($data);
}
/**
* 删除广告系列
* @throws ApiException
*/
public function removeCampaign($options): Response
{
$resourceName = $this->googleAdsCampaignService->runRemoveCampaign($options);
return $this->successResponse(['campaign_deleted' => $resourceName]);
}
/**
* 更新广告系列
* @throws ApiException
*/
public function modifyCampaign($options): Response
{
$resourceName = $this->googleAdsCampaignService->runUpdateCampaign($options);
return $this->successResponse(['campaign_updated' => $resourceName]);
}
/**
* 新增广告组
* @throws ApiException
*/
public function addGroup($options): Response
{
$resourceName = $this->googleAdsGroupService->runAddGroup($options);
return $this->successResponse(['groups_created' => $resourceName]);
}
/**
* 更新广告组
* @throws ApiException
*/
public function modifyGroup($options): Response
{
$adGroupStatus = [
0, // UNSPECIFIED
1, // UNKNOWN
2, // ENABLED
3, // PAUSED
4 // REMOVED
];
$options['bid_micro_amount'] = $options['amount'] * 1000000 < 0 ? 0 : $options['amount'] * 1000000;
if (!in_array($options['status'], $adGroupStatus)) {
return $this->errorResponse(101, 'status参数错误');
}
$resourceName = $this->googleAdsGroupService->runUpdateGroup($options);
return $this->successResponse(['group_updated' => $resourceName]);
}
/**
* 更新广告
* @throws ApiException
*/
public function modifyAd($options): Response
{
$adGroupStatus = [
0, // UNSPECIFIED
1, // UNKNOWN
2, // ENABLED
3, // PAUSED
4 // REMOVED
];
if (!in_array($options['status'], $adGroupStatus)) {
return $this->errorResponse(101, 'status参数错误');
}
$resourceName = $this->googleAdsAdService->runUpdateAd($options);
return $this->successResponse(['ad_updated' => $resourceName]);
}
/**
* get campaigns
* @throws ApiException
*/
public function getResponsiveSearchAds($options): Response
{
$resourceName = $this->googleAdsAdService->runGetResponsiveSearchAds($options);
return $this->successResponse(['ads_list' => $resourceName]);
}
/**
* get campaigns
* @throws ApiException
*/
public function searchForGoogleAdsFields($options): Response
{
$googleAdsFieldData = $this->googleAdsAdService->runSearchForGoogleAdsFields($options);
return $this->successResponse(['ads_fields' => $googleAdsFieldData]);
}
/**
* get campaigns
* @throws ApiException
*/
public function modifyResponsiveSearchAd($options): Response
{
$resourceName = $this->googleAdsAdService->runUpdateResponsiveSearchAd($options);
return $this->successResponse(['ad_updated' => $resourceName]);
}
// 可以加入一些公共方法
protected function successResponse($data): Response
{
return Json([
'code' => 0,
'msg' => 'ok',
'data' => $data,
]);
}
protected function errorResponse($code, $message, $data = []): Response
{
return Json([
'code' => $code,
'msg' => $message ?: 'error',
'data' => $data
]);
}
}