広告キャンペーン、広告セット、広告のステータスのタイプは通常、次のいずれかになります。
詳しくは、広告開発者向けのブログ「Deleted versus Archived (削除とアーカイブの対比)」をご覧ください。
ライブ広告オブジェクトには次のステータスがあります。
ACTIVEPAUSEDPENDING_REVIEWCREDIT_CARD_NEEDEDPREAPPROVEDDISABLEDPENDING_PROCESSWITH_ISSUES広告オブジェクトのステータスをARCHIVEDに設定するには、statusフィールドをARCHIVEDに設定します。オブジェクトのステータスをARCHIVEDに設定しておくと、引き続きオブジェクトIDに基づいて詳細や統計情報をクエリできます。ただし、アーカイブできるオブジェクトの数には上限があります。この上限を超えないようにするため、不要になったオブジェクトのステータスをDELETEDに変更してください。
ARCHIVEDオブジェクトで変更できるフィールドはnameとstatusの2つだけです。statusはDELETEDにのみ変更できます。
広告オブジェクトのステータスをDELETEDに設定するには、statusフィールドをDELETEDに設定するか、HTTP DELETEを該当するオブジェクトに送信します。一度オブジェクトのステータスをDELETEDに設定すると、ARCHIVEDに戻すことはできません。
削除されたオブジェクトのIDを残しておけば、そのオブジェクトIDをクエリすることによって、引き続き統計情報やオブジェクトの詳細を取得できます。ただし、削除オブジェクトを削除されていないノードやオブジェクトから接続オブジェクトとして取得することはできません。例えば、削除オブジェクトに<API_VERSION>/<AD_ID>/insightsを使用することはできますが、<API_VERSION>/act_<AD_ACCOUNT_ID>/insights?level=adを使用しても削除オブジェクトの統計情報は返されません。
広告を削除しても、最後の配信日から28日間はインプレッション数、クリック数、アクション数などがトラッキングされる場合があります。DELETEDオブジェクトのインサイトは、ad.effective_statusフィルターを使ってクエリできます。
2つの広告を持つ広告セットがあり、1つの広告を削除した場合は、次の2つのクエリから返される結果が異なります。
https://graph.facebook.com/v24.0/<AD_SET_ID>/insights https://graph.facebook.com/v24.0/<AD_ID>/insights
この広告セットからは、削除された広告と削除されていない広告の両方の統計情報が返されます。しかし、広告セット内の広告をクエリすると、1つの広告しか表示されません。
https://graph.facebook.com/v24.0/<AD_SET_ID>/adsこのような状況を回避するには、統計情報が変更されることがないように、広告の最後の配信日から28日経過後に広告を削除することをおすすめします。また、広告を削除する前に、これらのオブジェクトの統計情報やIDを自分のシステムに保存しておいてください。以下の場合は、この推奨事項は任意となります。
DELETEDオブジェクトの場合、nameフィールド以外のフィールドを変更することはできません。
以下は、オブジェクトステータスを管理する一般的な方法です。
deleted状態に移動します。広告オブジェクトのステータスは、広告オブジェクトの階層に対して次のように機能します。
with_issues、paused、archived、deletedのいずれかに設定すると、下位のオブジェクトすべてが自動的にそのステータスを継承します。 deletedに設定すると、IDを明示的に指定しなければ、そのキャンペーンの下位の広告セットや広告は取得できません。with_issues、paused、archived、deletedのいずれかに設定した場合、その広告が含まれる広告セットや広告キャンペーンの元のステータスは保持されるため、広告セットや広告キャンペーンは取得できます。特定の広告アカウントのARCHIVEDオブジェクトには次の制限が適用されます。
archivedエッジはデフォルトでは返されないため、この状態のエッジを読み取る場合は、アーカイブオブジェクトを明確にフィルター処理する必要があります。広告オブジェクトの統計情報を読み取ると、すべての子オブジェクトの統計情報が(active、archived、deletedのいずれであるかを問わず)含められます。そのため、子オブジェクトのインサイトを得るためにフィルター処理する必要はありません。
ステータスがACTIVEやPAUSEDなどのオブジェクトは、ステータスがARCHIVEDやDELETEDであるオブジェクトとは異なります。主な違いは次のとおりです。
| クエリ | ライブ | ARCHIVED | DELETED |
|---|---|---|---|
データベース内の既存の項目 | はい | はい | はい |
広告アカウントあたりの上限 | 100,000 | 上限なし | |
エッジとしてクエリ(フィルターなし) | はい | いいえ | いいえ |
エッジとしてクエリ(ステータスフィルターあり) | はい(ステータスがフィルターに含まれるオブジェクトの場合) | はい(ステータスフィルターに | いいえ(ステータスフィルターに |
個別のIDによるクエリ | はい | はい | はい |
| はい | はい | はい |
| はい | いいえ | いいえ |
delivery_infoフィルターで | はい(ステータスがフィルターに含まれるオブジェクトの場合) | はい(ステータスがフィルターに含まれるオブジェクトの場合) | いいえ |
| はい | はい | はい |
変更可能なステータス | 有効なステータスすべて |
| 変更不可 |
広告をアーカイブ済みに設定するには
広告を削除するには
ライブオブジェクトのライブのサブオブジェクトを取得するには(例: 広告キャンペーンのすべてのライブ広告のうちARCHIVEDやDELETEDの広告を含まないもの)
curl -X GET \
-d 'fields="name"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_CAMPAIGN_ID>/ads'use strict';
const bizSdk = require('facebook-nodejs-business-sdk');
const Campaign = bizSdk.Campaign;
const Ad = bizSdk.Ad;
const access_token = '<ACCESS_TOKEN>';
const app_secret = '<APP_SECRET>';
const app_id = '<APP_ID>';
const id = '<AD_CAMPAIGN_ID>';
const api = bizSdk.FacebookAdsApi.init(access_token);
const showDebugingInfo = true; // Setting this to true shows more debugging info.
if (showDebugingInfo) {
api.setDebug(true);
}
const logApiCallResult = (apiCallName, data) => {
console.log(apiCallName);
if (showDebugingInfo) {
console.log('Data:' + JSON.stringify(data));
}
};
let fields, params;
fields = [
'name',
];
params = {
};
const adss = (new Campaign(id)).getAds(
fields,
params
);
logApiCallResult('adss api call complete.', adss);require __DIR__ . '/vendor/autoload.php';
use FacebookAds\Object\Campaign;
use FacebookAds\Object\Ad;
use FacebookAds\Api;
use FacebookAds\Logger\CurlLogger;
$access_token = '<ACCESS_TOKEN>';
$app_secret = '<APP_SECRET>';
$app_id = '<APP_ID>';
$id = '<AD_CAMPAIGN_ID>';
$api = Api::init($app_id, $app_secret, $access_token);
$api->setLogger(new CurlLogger());
$fields = array(
'name',
);
$params = array(
);
echo json_encode((new Campaign($id))->getAds(
$fields,
$params
)->getResponse()->getContent(), JSON_PRETTY_PRINT);from facebook_business.adobjects.campaign import Campaign
from facebook_business.adobjects.ad import Ad
from facebook_business.api import FacebookAdsApi
access_token = '<ACCESS_TOKEN>'
app_secret = '<APP_SECRET>'
app_id = '<APP_ID>'
id = '<AD_CAMPAIGN_ID>'
FacebookAdsApi.init(access_token=access_token)
fields = [
'name',
]
params = {
}
print Campaign(id).get_ads(
fields=fields,
params=params,
)import com.facebook.ads.sdk.*;
import java.io.File;
import java.util.Arrays;
public class SAMPLE_CODE_EXAMPLE {
public static void main (String args[]) throws APIException {
String access_token = \"<ACCESS_TOKEN>\";
String app_secret = \"<APP_SECRET>\";
String app_id = \"<APP_ID>\";
String id = \"<AD_CAMPAIGN_ID>\";
APIContext context = new APIContext(access_token).enableDebug(true);
new Campaign(id, context).getAds()
.requestNameField()
.execute();
}
}require 'facebook_ads'
access_token = '<ACCESS_TOKEN>'
app_secret = '<APP_SECRET>'
app_id = '<APP_ID>'
id = '<AD_CAMPAIGN_ID>'
FacebookAds.configure do |config|
config.access_token = access_token
config.app_secret = app_secret
end
campaign = FacebookAds::Campaign.get(id)
adss = campaign.ads({
fields: { 'name' },
})ライブオブジェクトのARCHIVEDサブオブジェクトを取得するには(例: 広告セットのすべてのARCHIVED広告で、ステータスフィルターを必要とするもの)
curl -X GET \
-d 'effective_status=[
"ARCHIVED"
]' \
-d 'fields="name"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v24.0/<AD_CAMPAIGN_ID>/ads'use strict';
const bizSdk = require('facebook-nodejs-business-sdk');
const Campaign = bizSdk.Campaign;
const Ad = bizSdk.Ad;
const access_token = '<ACCESS_TOKEN>';
const app_secret = '<APP_SECRET>';
const app_id = '<APP_ID>';
const id = '<AD_CAMPAIGN_ID>';
const api = bizSdk.FacebookAdsApi.init(access_token);
const showDebugingInfo = true; // Setting this to true shows more debugging info.
if (showDebugingInfo) {
api.setDebug(true);
}
const logApiCallResult = (apiCallName, data) => {
console.log(apiCallName);
if (showDebugingInfo) {
console.log('Data:' + JSON.stringify(data));
}
};
let fields, params;
fields = [
'name',
];
params = {
'effective_status' : ['ARCHIVED'],
};
const adss = (new Campaign(id)).getAds(
fields,
params
);
logApiCallResult('adss api call complete.', adss);require __DIR__ . '/vendor/autoload.php';
use FacebookAds\Object\Campaign;
use FacebookAds\Object\Ad;
use FacebookAds\Api;
use FacebookAds\Logger\CurlLogger;
$access_token = '<ACCESS_TOKEN>';
$app_secret = '<APP_SECRET>';
$app_id = '<APP_ID>';
$id = '<AD_CAMPAIGN_ID>';
$api = Api::init($app_id, $app_secret, $access_token);
$api->setLogger(new CurlLogger());
$fields = array(
'name',
);
$params = array(
'effective_status' => array('ARCHIVED'),
);
echo json_encode((new Campaign($id))->getAds(
$fields,
$params
)->getResponse()->getContent(), JSON_PRETTY_PRINT);from facebook_business.adobjects.campaign import Campaign
from facebook_business.adobjects.ad import Ad
from facebook_business.api import FacebookAdsApi
access_token = '<ACCESS_TOKEN>'
app_secret = '<APP_SECRET>'
app_id = '<APP_ID>'
id = '<AD_CAMPAIGN_ID>'
FacebookAdsApi.init(access_token=access_token)
fields = [
'name',
]
params = {
'effective_status': ['ARCHIVED'],
}
print Campaign(id).get_ads(
fields=fields,
params=params,
)import com.facebook.ads.sdk.*;
import java.io.File;
import java.util.Arrays;
public class SAMPLE_CODE_EXAMPLE {
public static void main (String args[]) throws APIException {
String access_token = \"<ACCESS_TOKEN>\";
String app_secret = \"<APP_SECRET>\";
String app_id = \"<APP_ID>\";
String id = \"<AD_CAMPAIGN_ID>\";
APIContext context = new APIContext(access_token).enableDebug(true);
new Campaign(id, context).getAds()
.setEffectiveStatus(\"[\\"ARCHIVED\\"]\")
.requestNameField()
.execute();
}
}require 'facebook_ads'
access_token = '<ACCESS_TOKEN>'
app_secret = '<APP_SECRET>'
app_id = '<APP_ID>'
id = '<AD_CAMPAIGN_ID>'
FacebookAds.configure do |config|
config.access_token = access_token
config.app_secret = app_secret
end
campaign = FacebookAds::Campaign.get(id)
adss = campaign.ads({
fields: { 'name' },
effective_status: ['ARCHIVED'],
})