광고 소재 만들기 및 업로드

이 가이드에서는 Display & Video 360 API advertisers.assetsadvertisers.creatives 서비스를 사용하여 광고 애셋을 업로드하고 Display & Video 360 Creative 리소스를 빌드하는 방법을 설명합니다.

기본 요건

Display & Video 360 API를 사용하여 광고 소재를 만들기 전에 다음 단계를 완료하세요.

  1. API 프로젝트 만들기 및 승인하기

  2. 사용자 또는 서비스 계정 이메일 주소로 식별되는 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"; } 

Python

# 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']) 

PHP

$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

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()); 

Python

# 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"]) 

PHP

// 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()); 

Python

# 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"]) 

PHP

// 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()); 

Python

# 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"]) 

PHP

// 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']);