Facebookの広告構造には、キャンペーン、広告セット、広告の3つのレベルがあります。開発者は、APIの中でクリエイティブと呼ばれる第4のレベルを使うことができます。
これらのオブジェクトには、広告の目的と、1つ以上の広告セットが含まれています。これは、広告の目的ごとに最適化したり結果を測定したりするのに役立ちます。
広告セットには、1つ以上の広告が含まれています。広告セットごとに予算とスケジュールを定義します。入札価格でターゲットオーディエンスごとに広告セットを作成します。セット内の広告は、同じ入札価格、同じオーディエンスがターゲットになります。これは、オーディエンスごとの費用の額を管理したり、そのオーディエンスに広告セットが表示されるタイミングを決定したりするのに役立ちます。また、オーディエンスごとの指標も提供されます。
広告クリエイティブが含まれています。1つの広告セット内に複数の広告を作成すれば、さまざまな画像、リンク、動画、テキスト、配置に基づいて広告配信を最適化できます。
含まれるのは広告のビジュアル要素だけであり、作成後は変更できません。広告アカウントごとに、広告で再利用するためにクリエイティブを保存するためのクリエイティブライブラリがあります。
目的 | スケジュール | 予算 | 入札価格 | ターゲット設定 | クリエイティブ | |
---|---|---|---|---|---|---|
キャンペーン | ✓ | |||||
広告セット | ✓ | ✓ | ✓ | ✓ | ||
広告 | ✓ |
オブジェクトの公開用名前とAPIエンドポイントの間のマッピング:
公開用名前 | APIエンドポイント |
---|---|
キャンペーン | /campaigns |
広告セット | /adsets |
広告 | /ads |
クリエイティブ | /adcreatives |
キャンペーンは、広告アカウント内の管理構造の最上位にあるものです。ページ投稿エンゲージメント促進など、特定の広告主の単一の目的を表現するために使われることを想定しています。キャンペーンの目的を設定すると、そのキャンペーンに追加されている広告についても、目的が適切であることが保証されるようにするための検証がなされます。
広告マネージャには、広告アカウント内のアクティブなキャンペーンと一時停止中のキャンペーンがすべて表示されます。
特定のアカウントに関連するキャンペーンを読むには、使っている広告アカウントの接続リクエストを発行します。デフォルトでは、ステータスがACTIVE
またはPAUSED
であるキャンペーンだけが返されます。そのため、必要に応じて追加のステータスを指定する必要があります。
curl -X GET \
-d 'effective_status=[
"ACTIVE",
"PAUSED"
]' \
-d 'fields="name,objective"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/campaigns
インプレッション、クリック、消化金額など、大局的視点でのインサイトも表示されます。それらを取得するには、次のエンドポイントを呼び出します。任意で開始時刻または終了時刻も指定できます。
use FacebookAds\Object\Campaign;
$campaign = new Campaign(<CAMPAIGN_ID>);
$insights = $campaign->getInsights(array(
AdsInsightsFields::IMPRESSIONS,
AdsInsightsFields::INLINE_LINK_CLICKS,
AdsInsightsFields::SPEND,
), array(
'end_time' => (new \DateTime('now'))->getTimestamp(),
));
from facebookads.adobjects.campaign import Campaign
from facebookads.adobjects.adsinsights import AdsInsights
import time
fields = [
AdsInsights.Field.impressions,
AdsInsights.Field.inline_link_clicks,
AdsInsights.Field.spend,
]
params = {
'end_time': int(time.time()),
}
campaign = Campaign(<CAMPAIGN_ID>)
insights = campaign.get_insights(fields=fields, params=params)
APINodeList<AdsInsights> adsInsightss = new Campaign(<CAMPAIGN_ID>, context).getInsights()
.setParam("end_time", end_time)
.requestField("impressions")
.requestField("inline_link_clicks")
.requestField("spend")
.execute();
curl -G \
-d 'end_time=1517287567' \
-d 'fields=impressions,inline_link_clicks,spend' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<CAMPAIGN_ID>/insights
目的とは、広告を見た利用者に実行してもらいたいアクションのことです。キャンペーン作成中に選択した目的を指定する必要があります。
目的を明示的に設定することには、以下のメリットがあります。
キャンペーンを作成するために必要なAPI呼び出しは、以下のとおりです。
curl -X POST \
-F 'name="My First Campaign"' \
-F 'objective="OUTCOME_ENGAGEMENT"' \
-F 'status="PAUSED"' \
-F 'special_ad_categories=[]' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/campaigns
広告セットは、複数の広告からなるグループです。これは、広告掲載の予算と期間を設定するために使われます。ある広告セットに含まれる広告は、ターゲット、予算、請求、最適化目標、期間がすべて同じでなければなりません。
curl -X POST \
-F 'name="My First AdSet"' \
-F 'lifetime_budget=20000' \
-F 'start_time="2024-11-28T07:16:33-0800"' \
-F 'end_time="2024-12-05T07:16:33-0800"' \
-F 'campaign_id="<AD_CAMPAIGN_ID>"' \
-F 'bid_amount=500' \
-F 'billing_event="IMPRESSIONS"' \
-F 'optimization_goal="POST_ENGAGEMENT"' \
-F 'targeting={
"age_min": 20,
"age_max": 24,
"behaviors": [
{
"id": 6002714895372,
"name": "All travelers"
}
],
"genders": [
1
],
"geo_locations": {
"countries": [
"US"
],
"regions": [
{
"key": "4081"
}
],
"cities": [
{
"key": "777934",
"radius": 10,
"distance_unit": "mile"
}
]
},
"interests": [
{
"id": "<INTEREST_ID>",
"name": "<INTEREST_NAME>"
}
],
"life_events": [
{
"id": 6002714398172,
"name": "Newlywed (1 year)"
}
],
"facebook_positions": [
"feed"
],
"publisher_platforms": [
"facebook",
"audience_network"
]
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/adsets
キャンペーン内のすべての広告セットを列挙するには、以下のパスに対してリクエストを発行します。その際に、必要なフィールドとステータスを指定することができます。
curl -X GET \
-d 'fields="name,start_time,end_time,daily_budget,lifetime_budget"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/<AD_CAMPAIGN_ID>/adsets
1つの広告オブジェクトには、クリエイティブなど、Facebookで広告を表示するために必要な情報がすべて含まれています。
curl -X POST \
-F 'name="My Ad"' \
-F 'adset_id="<AD_SET_ID>"' \
-F 'creative={
"creative_id": "<CREATIVE_ID>"
}' \
-F 'status="PAUSED"' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v21.0/act_<AD_ACCOUNT_ID>/ads
広告のプレビューを見るには、こちらのガイドをご覧ください。
最後に、広告セットのすべての広告のリストを得るには、取得したいフィールドを指定して、以下のパスに対してリクエストを発行することができます。
use FacebookAds\Object\AdSet;
use FacebookAds\Object\Values\ArchivableCrudObjectEffectiveStatuses;
use FacebookAds\Object\Fields\AdFields;
$adset = new AdSet(<AD_SET_ID>);
$ads = $adset->getAds(array(
AdFields::NAME,
AdFields::CONFIGURED_STATUS,
AdFields::EFFECTIVE_STATUS,
AdFields::CREATIVE,
), array(
AdFields::EFFECTIVE_STATUS => array(
ArchivableCrudObjectEffectiveStatuses::ACTIVE,
ArchivableCrudObjectEffectiveStatuses::PAUSED,
ArchivableCrudObjectEffectiveStatuses::PENDING_REVIEW,
ArchivableCrudObjectEffectiveStatuses::PREAPPROVED,
),
));
from facebookads.adobjects.adset import AdSet
from facebookads.adobjects.ad import Ad
fields = [
Ad.Field.name,
Ad.Field.configured_status,
Ad.Field.effective_status,
Ad.Field.creative,
]
params = {
Ad.Field.effective_status: [
'ACTIVE',
'PAUSED',
'PENDING_REVIEW',
'PREAPPROVED',
],
}
ad_set = AdSet(<AD_SET_ID>)
ads = ad_set.get_ads(fields=fields, params=params)
APINodeList<Ad> ads = new AdSet(<AD_SET_ID>, context).getAds()
.setEffectiveStatus("[\"ACTIVE\",\"PAUSED\",\"PENDING_REVIEW\",\"PREAPPROVED\"]")
.requestNameField()
.requestConfiguredStatusField()
.requestEffectiveStatusField()
.requestCreativeField()
.execute();
curl -G \
--data-urlencode 'effective_status=[
"ACTIVE",
"PAUSED",
"PENDING_REVIEW",
"PREAPPROVED"
]' \
-d 'fields=name,configured_status,effective_status,creative' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<AD_SET_ID>/ads
広告の合計数が、単一ページ内の表示数を超えてしまうことがあるかもしれません。この場合、取得アイテム数としてlimit
フィールドを指定し、残りのアイテムについてはページネーションをする必要があります。
ページネーションは、応答の一部として返されるカーソルを使って実行します。
"paging": { "previous" : "https://graph.facebook.com/...", "next": "https://graph.facebook.com/...", "cursors": { "before": "NjAxNjc3NTU1ODMyNw==", "after": "NjAxMTc0NTU2MjcyNw==" }
取得ページがさらにある場合は、応答にprevious
とnext
のフィールドが含まれます。それらのURLを呼び出すことによってそれらのデータページを取得することができます。カーソルベースのページネーションについて、詳しくはこちらをご覧ください。