DoubleClick for Publishers(DFP)のAPI入門

どうも、コンテンツメディア事業本部の稲田です。 今回はDoubleClick for Publishers(DFP)-APIの使い方を解説していきます。
そもそもDFPとは?という方もいらっしゃると思います。
大丈夫です。安心して下さい。一言でいうと 「Googleの提供するAdServer」です。

公式ドキュメント等


認証


1. ネットワークコードの取得

ネットワークコードはDFPの管理画面にログインした際のURLに含まれるものになります。
https://www.google.com/dfp/ここにネットワークコード#home
のようになっていますのでこちらをメモしておきましょう!

2. クライアントID、クライアントシークレットの取得

Googleの提供するAPIを利用したことがある方はご存知だと思いますが、例のごとくGoogle Developers Consoleプロジェクト登録を行う必要があります。
登録を済ませたら以下の2つを取得します。

  • クライアントID
  • クライアントシークレット

これはAPIの認証に必要になってくる情報です。詳しい手順はこちらで詳細に記載されておりますので御覧ください。

クライアントID、クライアントシークレットを取得すれば認証のゴールは近いです。

3. リフレッシュトークンの取得

次はリフレッシュトークンの取得です。このリフレッシュトークンの取得にはDFP-APIのクライアントライブラリを使用します。
サンプルはPHPのクライアントライブラリになります。 composerでインストールしてみましょう。composer.jsonは下記のように。

{
    "require": {
        "googleads/googleads-php-lib" : "*"
    }
}

2016-06-06現在の最新バージョンは 9.1.0 となっていました。DFP-APIのクライアントライブラリですが、バージョンアップが頻繁で古いものがサポートされなくなるサイクルが早いです。
肌感的に、最新だったものがサポート対象外になるのにおおよそ1年ほどです。この点は注意しておきましょう。

クライアントライブラリがインストールできましたら、
googleads-php-lib/src/Google/Api/Ads/Dfp/auth.ini に先程取得したクライアントID、クライアントシークレットを設定しましょう。
ついでにメモしておいたネットワークコードも auth.ini に設定しておきましょう。

設定しましたら、
googleads-php-lib/examples/Dfp/Auth/GetRefreshToken.php を実行します。

$ php GetRefreshToken.php
Log in to your DFP account and open the following URL:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=XXXXX&redirect_uri=XXXXX&access_type=offline

After approving the token enter the authorization code here: 

となるので表示されたURLにアクセスします。すると authorization code が表示されますのでターミナルに入力してEnterを押しましょう。

Your refresh token is: リフレッシュトークンがここに表示されます!

In your auth.ini file, edit the refresh_token line to be:
refresh_token = "リフレッシュトークン!"

これでリフレッシュトークンも取得できました!
リフレッシュトークンを auth.ini に設定して認証は終わりです。

補足として auth.ini ですが、任意の場所において利用することもできます。
ここを見ていただければお分かりになるかと思いますが、DFPクライアントの DfpUserクラス をインスタンス化する際に引数で auth.ini へのpathを渡してあげることが出来ます。
デフォルトのpathのまま利用すると機微な情報(クライアント情報、トークン等)の管理がやり辛かったりするので変更しておきましょう。

レポートを取得してみよう


DFPを利用して発生したインプレッション、クリック、収益などを取得することができます。
DFPの管理画面ってものすごく重いんです。売上レポートを管理画面へ毎日取得しに行くなんてナンセンスです!(APIのレスポンスも重いのは内緒)
私の事業部ではAPIを利用して毎日自動でレポートの取得を行っています。

<?php

  // クライアントインスタンス作成
  $user = new DfpUser();
  // SOAP XML のリクエスト、レスポンスログを残します
  $user->LogDefaults();

  // レポートサービスを利用
  $reportService = $user->GetService('ReportService', 'v201605');

  // ReportQueryの作成
  $reportQuery = new ReportQuery();

  // ディメンション、ディメンション属性等を指定
  $reportQuery->dimensions = array('ORDER_ID', 'ORDER_NAME');
  $reportQuery->dimensionAttributes = array('ORDER_TRAFFICKER',
      'ORDER_START_DATE_TIME', 'ORDER_END_DATE_TIME');
  $reportQuery->columns = array('AD_SERVER_IMPRESSIONS', 'AD_SERVER_CLICKS',
      'AD_SERVER_CTR', 'AD_SERVER_CPM_AND_CPC_REVENUE',
      'AD_SERVER_WITHOUT_CPD_AVERAGE_ECPM');

  // 取得するレポートのオーダーIDを指定
  $statementBuilder = new StatementBuilder();
  $statementBuilder->Where('order_id = :orderId')->WithBindVariableValue(
      'orderId', $orderId);

  $reportQuery->statement = $statementBuilder->ToStatement();

  // レポート期間を指定
  $reportQuery->dateRangeType = 'LAST_MONTH';

  // レポートダウンロード
  $reportJob = new ReportJob();
  $reportJob->reportQuery = $reportQuery;
  $reportJob = $reportService->runReportJob($reportJob);
  $reportDownloader = new ReportDownloader($reportService, $reportJob->id);
  $reportDownloader->waitForReportReady();
  // ダウンロード場所指定
  $filePath = sprintf('%s.csv.gz', tempnam(sys_get_temp_dir(),
      'delivery-report-'));
  $reportDownloader->downloadReport('CSV_DUMP', $filePath);   

こんな感じでレポート取得ができます。
ディメンションディメンション属性の指定の仕方で取得できるレポートが変わってくるのでうまく指定してあげましょう。

APIのアーキテクチャ


DFPのAPIを利用すればオーダーの作成、キャンペーンの作成、クリエイティブの作成などあらゆることが実行可能です。
ただ、クライアントライブラリのどのクラスを利用すれば良いのだろう?クラス間の関係は?と、独自の用語が多く利用されている為、戸惑うこともあるかと思います。
そんな時はドキュメントのこちらを確認しましょう。
APIの主なクラスとその相関関係が示してあり、非常に便利で分かりやすいです。

まとめ

DFP-APIは使い方次第で素晴らしい効果をもたらしてくれます。
この度はレポートの取得までの紹介でしたが、現在業務での利用方法をあげると
配信比率の調整や仮想CPMの調整など、直接収益増加に繋がる活かし方があったりします。
DFPを利用している環境にいらっしゃるので一度試してみては如何でしょうか?