이 가이드에서는 Display & Video 360 API advertisers.assets
및 advertisers.creatives
서비스를 사용하여 광고 애셋을 업로드하고 Display & Video 360 Creative
리소스를 빌드하는 방법을 설명합니다.
기본 요건
Display & Video 360 API를 사용하여 광고 소재를 만들기 전에 다음 단계를 완료하세요.
사용자 또는 서비스 계정 이메일 주소로 식별되는 Display & Video 360 사용자 프로필에 광고주에 대한 읽기 및 쓰기 권한이 있는지 확인합니다. 읽기 및 쓰기 권한이 없는 경우 팀의 기존 관리자 사용자에게 문의하세요.
새 광고 소재 빌드
Display & Video 360 API를 통해 새 애셋으로 새 광고 소재를 만들려면 API 요청이 2회 이상 필요합니다. 첫 번째는 광고 애셋을 업로드하고 두 번째는 광고 객체를 생성합니다.
애셋 업로드
Display & Video 360에 필요한 광고 소재 assets
를 업로드하려면 advertisers.assets.upload
메서드를 호출합니다.
애셋은 광고 소재와 동일한 광고주에게 할당되어야 합니다.
애셋을 업로드하면 API는 asset
객체가 포함된 응답을 반환합니다. 나중에 이 asset
객체를 다시 가져올 수 없으므로 상응하는 mediaId
를 기록해 두세요. 이 저작물의 mediaId
는 저작물을 광고 소재에 할당하는 데 사용됩니다.
특정 광고 소재 유형은 특정 애셋 역할에서 특정 파일 형식만 애셋으로 허용합니다. 광고 소재에 적합한 파일 형식을 선택하는 방법에 관한 자세한 내용은 고객센터를 참고하세요.
다음은 저작물을 업로드하는 방법의 예입니다.
// Create the asset upload request content.
CreateAssetRequest content = new CreateAssetRequest();
content.setFilename(asset-filename );
// Create input stream for the creative asset.
InputStreamContent assetStream = new InputStreamContent(
getMimeType(asset-filename ),
new FileInputStream(asset-path ));
// Configure the asset upload request.
Assets.Upload assetRequest = service.advertisers().assets()
.upload(advertiser-id , content, assetStream);
// Upload the asset.
CreateAssetResponse assetResponse = assetRequest.execute();
// Display the new asset media ID.
Asset asset = assetResponse.getAsset();
System.out.printf("The asset has been upload with media ID %s",
asset.getMediaId());
이 예에서는 다음 도우미 함수를 사용하여 파일 MIME 유형을 찾습니다.
import java.net.FileNameMap;
import java.net.URLConnection;
private static String getMimeType(String fileName) {
// Parse filename for appropriate MIME type.
FileNameMap fileNameMap = URLConnection.getFileNameMap();
String mimeType = fileNameMap.getContentTypeFor(fileName);
// If MIME type was found, return it.
if (mimeType != null) {
return mimeType;
}
// Otherwise, return a default value.
return "application/octet-stream";
}
# Create the request body.
body = {
'filename': asset-filename
}
# Create upload object.
media = MediaFileUpload(asset-path )
if not media.mimetype():
media = MediaFileUpload(asset-path , 'application/octet-stream')
# Upload the asset.
response = service.advertisers().assets().upload(
advertiserId=advertiser-id ,
body=body,
media_body=media
).execute()
# Display the new asset media ID.
print("Asset was created with media ID %s." % response['asset']['mediaId'])
$body = new Google_Service_DisplayVideo_CreateAssetRequest();
$body->setFilename(asset-filename );
$optParams = array(
'data' => file_get_contents(asset-path ),
'mimeType' => mime_content_type(asset-filename ),
'uploadType' => 'media'
);
// Call the API, uploading the asset file to Display & Video 360.
$result = $service->advertisers_assets->upload(
advertiser-id ,
$body,
$optParams
);
// Display the new asset media ID.
printf(
'Asset was created with media ID %s.',
$result->getAsset()->getMediaId()
);
curl --request POST \
'https://displayvideo.googleapis.com/upload/v4/advertisers/advertiser-id /assets?uploadType=multipart'
--header 'Authorization: Bearer access-token ' \
-F "data={\"filename\": \"asset-filename \"};type=application/json;charset=UTF-8" \
-F "file=@asset-path ;type=asset-mime-type "
광고 소재 만들기
확장 소재를 업로드하고 미디어 ID를 가져온 후에는 해당 확장 소재로 전체 Creative
객체를 빌드할 수 있습니다.
advertisers.creatives.create
메서드를 사용하여 새 Creative
를 만듭니다. 각 광고 소재 유형에는 Creative
필드의 하위 집합만 필요합니다.
각 광고 소재 유형의 UI 필드를 상응하는 API 필드에 매핑하는 방법에 관한 자세한 내용은 이 가이드의 부록을 참고하세요.
다음은 네이티브 디스플레이, HTML5, 동영상 광고 소재를 만드는 방법의 예입니다.
네이티브 디스플레이
// Create a creative object.
Creative creative = new Creative();
creative.setDisplayName(display-name );
creative.setEntityStatus("ENTITY_STATUS_ACTIVE");
creative.setHostingSource("HOSTING_SOURCE_HOSTED");
// Set native creative type.
creative.setCreativeType("CREATIVE_TYPE_NATIVE");
// Create a dimensions object.
Dimensions dimensions = new Dimensions();
dimensions.setHeightPixels(creative-height-pixels );
dimensions.setWidthPixels(creative-width-pixels );
// Add the dimensions object to the creative object.
creative.setDimensions(dimensions);
// Create list for asset associations.
List<AssetAssociation> assetAssociations = new ArrayList<AssetAssociation>();
// Assign the image asset to a role.
AssetAssociation mainImageAssetAssociation = new AssetAssociation();
mainImageAssetAssociation.setAsset(new Asset().setMediaId(image-asset-media-id ));
mainImageAssetAssociation.setRole("ASSET_ROLE_MAIN");
assetAssociations.add(mainImageAssetAssociation);
// Assign the logo asset to a role.
AssetAssociation iconAssetAssociation = new AssetAssociation();
iconAssetAssociation.setAsset(new Asset().setMediaId(logo-asset-media-id ));
iconAssetAssociation.setRole("ASSET_ROLE_ICON");
assetAssociations.add(iconAssetAssociation);
// Create and assign advertiser name asset.
Asset advertiserNameAsset = new Asset();
advertiserNameAsset.setContent(advertiser-name );
AssetAssociation advertiserNameAssetAssociation = new AssetAssociation();
advertiserNameAssetAssociation.setAsset(advertiserNameAsset);
advertiserNameAssetAssociation.setRole("ASSET_ROLE_ADVERTISER_NAME");
assetAssociations.add(advertiserNameAssetAssociation);
// Create and assign headline asset.
Asset headlineAsset = new Asset();
headlineAsset.setContent(headline );
AssetAssociation headlineAssetAssociation = new AssetAssociation();
headlineAssetAssociation.setAsset(headlineAsset);
headlineAssetAssociation.setRole("ASSET_ROLE_HEADLINE");
assetAssociations.add(headlineAssetAssociation);
// Create and assign body text asset.
Asset bodyTextAsset = new Asset();
bodyTextAsset.setContent(body-text );
AssetAssociation bodyTextAssetAssociation = new AssetAssociation();
bodyTextAssetAssociation.setAsset(bodyTextAsset);
bodyTextAssetAssociation.setRole("ASSET_ROLE_BODY");
assetAssociations.add(bodyTextAssetAssociation);
// Create and assign caption URL asset.
Asset captionUrlAsset = new Asset();
captionUrlAsset.setContent(caption-url );
AssetAssociation captionUrlAssetAssociation = new AssetAssociation();
captionUrlAssetAssociation.setAsset(captionUrlAsset);
captionUrlAssetAssociation.setRole("ASSET_ROLE_CAPTION_URL");
assetAssociations.add(captionUrlAssetAssociation);
// Create and assign call to action asset.
Asset callToActionAsset = new Asset();
callToActionAsset.setContent(call-to-action );
AssetAssociation callToActionAssetAssociation = new AssetAssociation();
callToActionAssetAssociation.setAsset(callToActionAsset);
callToActionAssetAssociation.setRole("ASSET_ROLE_CALL_TO_ACTION");
assetAssociations.add(callToActionAssetAssociation);
// Create and set the list of creative assets.
creative.setAssets(assetAssociations);
// Create an exit event.
ExitEvent exitEvent = new ExitEvent();
exitEvent.setType("EXIT_EVENT_TYPE_DEFAULT");
exitEvent.setUrl(landing-page-url );
// Create and set the list of exit events for the creative.
creative.setExitEvents(ImmutableList.of(exitEvent));
// Configure the create request.
Creatives.Create request =
service.advertisers().creatives().create(advertiser-id , creative);
// Send the request.
Creative response = request.execute();
// Display the new creative.
System.out.printf(
"Creative %s was created.\n",
response.getName());
# Create a creative object.
creative_obj = {
'displayName': display-name ,
'entityStatus': 'ENTITY_STATUS_ACTIVE',
'hostingSource': 'HOSTING_SOURCE_HOSTED',
'creativeType': 'CREATIVE_TYPE_NATIVE',
'dimensions': {
'heightPixels': creative-height-pixels ,
'widthPixels': creative-width-pixels
},
'assets': [
{
'asset': {'mediaId' : image-asset-media-id },
'role': 'ASSET_ROLE_MAIN'
},
{
'asset': {'mediaId' : logo-asset-media-id },
'role': 'ASSET_ROLE_ICON'
},
{
'asset': {'content' : advertiser-name },
'role': 'ASSET_ROLE_ADVERTISER_NAME'
},
{
'asset': {'content' : headline },
'role': 'ASSET_ROLE_HEADLINE'
},
{
'asset': {'content' : body-text },
'role': 'ASSET_ROLE_BODY'
},
{
'asset': {'content' : caption-url },
'role': 'ASSET_ROLE_CAPTION_URL'
},
{
'asset': {'content' : call-to-action },
'role': 'ASSET_ROLE_CALL_TO_ACTION'
},
],
'exitEvents': [
{
'type': 'EXIT_EVENT_TYPE_DEFAULT',
'url': landing-page-url
}
]
}
# Create the creative.
creative = service.advertisers().creatives().create(
advertiserId=advertiser-id ,
body=creative_obj
).execute()
# Display the new creative.
print("creative %s was created." % creative["name"])
// Create a creative object.
$creative = new Google_Service_DisplayVideo_Creative();
$creative->setDisplayName(display-name );
$creative->setEntityStatus('ENTITY_STATUS_ACTIVE');
$creative->setHostingSource('HOSTING_SOURCE_HOSTED');
// Set native creative type.
$creative->setCreativeType('CREATIVE_TYPE_NATIVE');
// Create a dimensions object.
$dimensions = new Google_Service_DisplayVideo_Dimensions();
$dimensions->setHeightPixels(creative-height-pixels );
$dimensions->setWidthPixels(creative-width-pixels );
// Add the dimensions object to the creative object.
$creative->setDimensions($dimensions);
// Create list for asset associations.
$assetAssociations = array();
// Assign the image asset to a role.
$imageAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$imageAsset = new Google_Service_DisplayVideo_Asset();
$imageAsset->setMediaId(image-asset-media-id );
$imageAssetAssoc->setAsset($imageAsset);
$imageAssetAssoc->setRole('ASSET_ROLE_MAIN');
$assetAssociations[] = $imageAssetAssoc;
// Assign the logo asset to a role.
$iconAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$iconAsset = new Google_Service_DisplayVideo_Asset();
$iconAsset->setMediaId(logo-asset-media-id );
$iconAssetAssoc->setAsset($iconAsset);
$iconAssetAssoc->setRole('ASSET_ROLE_ICON');
$assetAssociations[] = $iconAssetAssoc;
// Create and assign advertiser name asset.
$advNameAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$advNameAsset = new Google_Service_DisplayVideo_Asset();
$advNameAsset->setContent(advertiser-name );
$advNameAssetAssoc->setAsset($advNameAsset);
$advNameAssetAssoc->setRole('ASSET_ROLE_ADVERTISER_NAME');
$assetAssociations[] = $advNameAssetAssoc;
// Create and assign headline asset.
$headlineAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$headlineAsset = new Google_Service_DisplayVideo_Asset();
$headlineAsset->setContent(headline );
$headlineAssetAssoc->setAsset($headlineAsset);
$headlineAssetAssoc->setRole('ASSET_ROLE_HEADLINE');
$assetAssociations[] = $headlineAssetAssoc;
// Create and assign body text asset.
$bodyTextAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$bodyTextAsset = new Google_Service_DisplayVideo_Asset();
$bodyTextAsset->setContent(body-text );
$bodyTextAssetAssoc->setAsset($bodyTextAsset);
$bodyTextAssetAssoc->setRole('ASSET_ROLE_BODY');
$assetAssociations[] = $bodyTextAssetAssoc;
// Create and assign caption URL asset.
$captionUrlAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$captionUrlAsset = new Google_Service_DisplayVideo_Asset();
$captionUrlAsset->setContent(caption-url );
$captionUrlAssetAssoc->setAsset($captionUrlAsset);
$captionUrlAssetAssoc->setRole('ASSET_ROLE_CAPTION_URL');
$assetAssociations[] = $captionUrlAssetAssoc;
// Create and assign call to action asset.
$cToAAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$cToAAsset = new Google_Service_DisplayVideo_Asset();
$cToAAsset->setContent(call-to-action );
$cToAAssetAssoc->setAsset($cToAAsset);
$cToAAssetAssoc->setRole('ASSET_ROLE_CALL_TO_ACTION');
$assetAssociations[] = $cToAAssetAssoc;
// Set the list of creative assets.
$creative->setAssets($assetAssociations);
// Create an exit event.
$exitEvent = new Google_Service_DisplayVideo_ExitEvent();
$exitEvent->setType('EXIT_EVENT_TYPE_DEFAULT');
$exitEvent->setUrl(landing-page-url );
// Create and set the list of exit events for the creative.
$creative->setExitEvents(array($exitEvent));
// Send the create request.
$result = $this->service->advertisers_creatives->create(
advertiser-id ,
$creative
);
printf('Creative %s was created.', $result['name']);
HTML5
// Create a creative object.
Creative creative = new Creative();
creative.setDisplayName(display-name );
creative.setEntityStatus("ENTITY_STATUS_ACTIVE");
creative.setHostingSource("HOSTING_SOURCE_HOSTED");
// Set standard creative type.
creative.setCreativeType("CREATIVE_TYPE_STANDARD");
// Create a dimensions object.
Dimensions dimensions = new Dimensions();
dimensions.setHeightPixels(creative-height-pixels );
dimensions.setWidthPixels(creative-width-pixels );
// Add the dimensions object to the creative object.
creative.setDimensions(dimensions);
// Assign the HTML5 asset to a role.
AssetAssociation assetAssociation = new AssetAssociation();
assetAssociation.setAsset(new Asset().setMediaId(html5-asset-media-id ));
assetAssociation.setRole("ASSET_ROLE_MAIN");
// Create and set the list of creative assets.
creative.setAssets(ImmutableList.of(assetAssociation));
// Create an exit event.
ExitEvent exitEvent = new ExitEvent();
exitEvent.setName(exit-event-name );
exitEvent.setType("EXIT_EVENT_TYPE_DEFAULT");
exitEvent.setUrl(exit-event-url );
// Create and set the list of exit events for the creative.
creative.setExitEvents(ImmutableList.of(exitEvent));
// Configure the create request.
Creatives.Create request =
service.advertisers().creatives().create(advertiser-id , creative);
// Send the request.
Creative response = request.execute();
// Display the new creative.
System.out.printf(
"Creative %s was created.\n",
response.getName());
# Create a creative object.
creative_obj = {
'displayName': display-name ,
'entityStatus': 'ENTITY_STATUS_ACTIVE',
'hostingSource': 'HOSTING_SOURCE_HOSTED',
'creativeType': 'CREATIVE_TYPE_STANDARD',
'dimensions': {
'heightPixels': creative-height-pixels ,
'widthPixels': creative-width-pixels
},
'assets': [
{
'asset': {'mediaId' : html5-asset-media-id },
'role': 'ASSET_ROLE_MAIN'
}
],
'exitEvents': [
{
'name': exit-event-name ,
'type': 'EXIT_EVENT_TYPE_DEFAULT',
'url': exit-event-url
}
]
}
# Create the creative.
creative = service.advertisers().creatives().create(
advertiserId=advertiser-id ,
body=creative_obj
).execute()
# Display the new creative.
print("Creative %s was created." % creative["name"])
// Create a creative object.
$creative = new Google_Service_DisplayVideo_Creative();
$creative->setDisplayName(display-name );
$creative->setEntityStatus('ENTITY_STATUS_ACTIVE');
$creative->setHostingSource('HOSTING_SOURCE_HOSTED');
// Set standard creative type.
$creative->setCreativeType('CREATIVE_TYPE_STANDARD');
// Create a dimensions object.
$dimensions = new Google_Service_DisplayVideo_Dimensions();
$dimensions->setHeightPixels(creative-height-pixels );
$dimensions->setWidthPixels(creative-width-pixels );
// Add the dimensions object to the creative object.
$creative->setDimensions($dimensions);
// Assign the HTML asset to a role.
$htmlAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$htmlAsset = new Google_Service_DisplayVideo_Asset();
$htmlAsset->setMediaId(html5-asset-media-id );
$htmlAssetAssoc->setAsset($htmlAsset);
$htmlAssetAssoc->setRole('ASSET_ROLE_MAIN');
// Create and set the list of creative assets.
$creative->setAssets(array($htmlAssetAssoc));
// Create an exit event.
$exitEvent = new Google_Service_DisplayVideo_ExitEvent();
$exitEvent->setName(exit-event-name );
$exitEvent->setType('EXIT_EVENT_TYPE_DEFAULT');
$exitEvent->setUrl(exit-event-url );
// Create and set the list of exit events for the creative.
$creative->setExitEvents(array($exitEvent));
// Send the create request.
$result = $this->service->advertisers_creatives->create(
advertiser-id ,
$creative
);
printf('Creative %s was created.', $result['name']);
동영상
// Create a creative object.
Creative creative = new Creative();
creative.setDisplayName(display-name );
creative.setEntityStatus("ENTITY_STATUS_ACTIVE");
creative.setHostingSource("HOSTING_SOURCE_HOSTED");
// Set video creative type.
creative.setCreativeType("CREATIVE_TYPE_VIDEO");
// Assign the video asset to a role.
AssetAssociation assetAssociation = new AssetAssociation();
assetAssociation.setAsset(new Asset().setMediaId(video-asset-media-id) );
assetAssociation.setRole("ASSET_ROLE_MAIN");
// Create and set the list of creative assets.
creative.setAssets(ImmutableList.of(assetAssociation));
// Create an exit event.
ExitEvent exitEvent = new ExitEvent();
exitEvent.setName(exit-event-name );
exitEvent.setType("EXIT_EVENT_TYPE_DEFAULT");
exitEvent.setUrl(exit-event-url );
// Create and set the list of exit events for the creative.
creative.setExitEvents(ImmutableList.of(exitEvent));
// Configure the create request.
Creatives.Create request =
service.advertisers().creatives().create(advertiser-id , creative);
// Send the request.
Creative response = request.execute();
// Display the new creative.
System.out.printf(
"Creative %s was created.\n",
response.getName());
# Create a creative object.
creative_obj = {
'displayName': display-name ,
'entityStatus': 'ENTITY_STATUS_ACTIVE',
'hostingSource': 'HOSTING_SOURCE_HOSTED',
'creativeType': 'CREATIVE_TYPE_VIDEO',
'assets': [
{
'asset': {'mediaId' : video-asset-media-id },
'role': 'ASSET_ROLE_MAIN'
}
],
'exitEvents': [
{
'name': exit-event-name ,
'type': 'EXIT_EVENT_TYPE_DEFAULT',
'url': exit-event-url
}
]
}
# Create the creative.
creative = service.advertisers().creatives().create(
advertiserId=advertiser-id ,
body=creative_obj
).execute()
# Display the new creative.
print("creative %s was created." % creative["name"])
// Create a creative object.
$creative = new Google_Service_DisplayVideo_Creative();
$creative->setDisplayName(display-name );
$creative->setEntityStatus('ENTITY_STATUS_ACTIVE');
$creative->setHostingSource('HOSTING_SOURCE_HOSTED');
// Set video creative type.
$creative->setCreativeType('CREATIVE_TYPE_VIDEO');
// Assign the video asset to a role.
$videoAssetAssoc = new Google_Service_DisplayVideo_AssetAssociation();
$videoAsset = new Google_Service_DisplayVideo_Asset();
$videoAsset->setMediaId(video-asset-media-id );
$videoAssetAssoc->setAsset($videoAsset);
$videoAssetAssoc->setRole('ASSET_ROLE_MAIN');
// Create and set the list of creative assets.
$creative->setAssets(array($videoAssetAssoc));
// Create an exit event.
$exitEvent = new Google_Service_DisplayVideo_ExitEvent();
$exitEvent->setName(exit-event-name );
$exitEvent->setType('EXIT_EVENT_TYPE_DEFAULT');
$exitEvent->setUrl(exit-event-url );
// Create and set the list of exit events for the creative.
$creative->setExitEvents(array($exitEvent));
// Send the create request.
$result = $this->service->advertisers_creatives->create(
advertiser-id ,
$creative
);
printf('Creative %s was created.', $result['name']);