カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

facebook-php-ads-sdkを使って、Instagramに対応したクリエイティブと広告セットを作る

Bussiness Managerなどで、Instagramアカウントと、対象アプリの連携はしといてください。

まず、InstagramアカウントのIDが必要なので、それを把握する。

Graph API Explorerにアクセス developers.facebook.com

Get Tokenで、 Get User Access Token をえらび、

ads_management ads_read にチェックを入れる

以下のフォーマットに従い、値を埋めて、リクエストURLをつくる。

GET -> <API_VERSION>/<BUSINESS_ID>/instagram_accounts

そうすると、まずIDがわかる。

その上で、 developers.facebook.com に載ってるサンプルコードを参考にクリエイティブを作る。

use FacebookAds\Object\AdCreative;
use FacebookAds\Object\ObjectStory\LinkData;
use FacebookAds\Object\Fields\ObjectStory\LinkDataFields;
use FacebookAds\Object\ObjectStorySpec;
use FacebookAds\Object\Fields\ObjectStorySpecFields;
use FacebookAds\Object\Fields\AdCreativeFields;

$link_data = new LinkData();
$link_data->setData(array(
  LinkDataFields::IMAGE_CROPS => array(
    '100x100'=> array(array(200,90),array(900,790)), 
    '191x100'=> array(array(0,200),array(1146,800))
  );
  LinkDataFields::MESSAGE => 'Great looking SXT handbags in store. #prettybag',
  LinkDataFields::LINK => 'http://example.com',
  LinkDataFields::IMAGE_HASH => '<IMAGE_HASH>',
  LinkDataFields::CALL_TO_ACTION => array(
    'type' => 'LEARN_MORE',
    'value' =>array(
      'link' => 'http://example.com',
    )
  ),
));

$object_story_spec = new ObjectStorySpec();
$object_story_spec->setData(array(
  ObjectStorySpecFields::PAGE_ID => <PAGE_ID>,
  ObjectStorySpecFields::INSTAGRAM_ACTOR_ID => <IG_ACCOUNT_FBID>,
  ObjectStorySpecFields::LINK_DATA => $link_data,
));

$creative = new AdCreative(null, 'act_<AD_ACCOUNT_ID>');

$creative->setData(array(
  AdCreativeFields::NAME => 'Instagram only creative',
  AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
));

$creative->create();

以下の箇所が調べたIDになる。

ObjectStorySpecFields::INSTAGRAM_ACTOR_ID => <IG_ACCOUNT_FBID>,

もしここでIDを指定しない場合は、広告のリンク先がInstagramアカウントではなく、Facebook Pageになる。 どちらにしたいかは運用方針次第なので、決める。Instagramアカウントにしたいなら、IDの指定が必要。

ちなみに、Adsetはこんなかんじ。 developers.facebook.com

use FacebookAds\Object\AdSet;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\TargetingFields;
use FacebookAds\Object\Targeting;
use FacebookAds\Object\Values\AdSetBillingEventValues;
use FacebookAds\Object\Values\AdSetOptimizationGoalValues;
use FacebookAds\Object\Values\PageTypes;

$adset = new AdSet(null, 'act_<AD_ACCOUNT_ID>');
$adset->setData(array(
  AdSetFields::NAME => 'Instagram Adset',
  AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::LINK_CLICKS,
  AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
  AdSetFields::BID_AMOUNT => 2,
  AdSetFields::DAILY_BUDGET => 1000,
  AdSetFields::CAMPAIGN_ID => <CAMPAIGN_ID>,
  AdSetFields::TARGETING => (new Targeting())->setData(array(
    TargetingFields::GEO_LOCATIONS => array(
      'countries' => array('US'),
    ),
    TargetingFields::USER_OS => array('iOS'),
    TargetingFields::PAGE_TYPES => array(PageTypes::INSTAGRAM_STREAM),
  )),
));

$adset->create();
TargetingFields::PAGE_TYPES => array(PageTypes::INSTAGRAM_STREAM),

が必要になる。

あとはいつもどおりAdを作れば完了。

こちらもどうぞ

blog.masudak.net blog.masudak.net