この
ブログシリーズでは、新しく改善された
インタラクティブ Google 広告クエリビルダーの構築過程についてお伝えしています。シリーズの
パート 2 では、インタラクティブ クエリビルダー
Angular アプリケーションの正規データセットとして利用する詳細な JSON リソース スキーマの設計について説明しました。パート 3 では、
GoogleAdsFieldService
を使ってそのスキーマを作成する方法を取り上げます。
データの取得
パート 2 で説明したスキーマのデータの大半は、次のクエリを使って
GoogleAdsFieldService
という API を呼び出すことで作成します。
SELECT name, category, data_type, selectable, filterable, sortable, selectable_with, metrics, segments, is_repeated, type_url, enum_values, attribute_resources
結果は、Google Ads API で利用できるすべてのフィールドについての JSON オブジェクトの配列です。配列の各オブジェクトには、先ほどの
SELECT
句のフィールドが含まれています。たとえば、
ad_group
のリスト項目は次のようになります。
{
"resourceName": "googleAdsFields/ad_group",
"name": "ad_group",
"category": "RESOURCE",
"dataType": "MESSAGE",
"selectable": false,
"filterable": false,
"sortable": false,
"selectableWith": [...],
"metrics": [...],
"segments": [...],
"isRepeated": false,
"typeUrl": "com.google.ads.googleads.v6.resources.AdGroup",
"enumValues": [],
"attributeResources": [...]
}
これをキーと値のペアに変換します。キーをエンティティ名、値をエンティティのメタデータにして、エンティティからメタデータを簡単に検索できるようにします。たとえば、
ad_group
エントリは次のようになります。
{
"ad_group": {
"resourceName": "googleAdsFields/ad_group",
"name": "ad_group",
"category": "RESOURCE",
"dataType": "MESSAGE",
"selectable": false,
"filterable": false,
"sortable": false,
"selectableWith": [...],
"metrics": [...],
"segments": [...],
"isRepeated": false,
"typeUrl": "com.google.ads.googleads.v6.resources.AdGroup",
"enumValues": [],
"attributeResources": [...]
}
パート 2 で設計したスキーマと比べると、変換したオブジェクトにはいくつかのフィールドが存在しないことがわかります。そこで、属性、フィールド、説明、表示名を表すセクションを追加します。
属性
スキーマの設計を思い出してみると、それぞれのリソースに
attributes
という名前の配列があり、そのリソース自体と任意の
属性付きリソースに存在するすべてのフィールド名が含まれていました。この配列は、
GoogleAdsFieldService
クエリの結果を反復処理し、そのリソースかいずれかの属性付きリソースで始まるエントリ名にドットを追加することで作成できます。
フィールド
このスキーマの
fields
エントリは、(a)先ほど作成した属性配列の項目、(b)リソースの指標、(c)リソースのセグメントのそれぞれがエントリとなるオブジェクトです。各エントリの値は、先ほど作成したオブジェクトのそれぞれのフィールドの値となります。ただし、各フィールドに
incompatible_fields
配列を追加する必要があります。
fields オブジェクトの各エントリの
incompatible_fields
配列を作成するには、トップレベル オブジェクトに存在するフィールド、指標、セグメントのそれぞれが、評価対象のフィールドの
selectable_with
と一致するかどうかを確認します。一致しない場合、そのフィールド、指標、セグメントを
incompatible_fields
配列に追加します。
説明
次に、トップレベルのリソースと
fields
エントリ内の項目のそれぞれに説明を追加します。ここで重要なのは、トップレベルのリソースによって、フィールドの説明が異なる場合があることです。たとえば、
ad_group.id
の説明には「出力のみ。広告グループの ID。」とありますが、
campaign.id
の説明には「出力のみ。キャンペーンの ID。」とあります。
REST ディスカバリー ドキュメントには、ネストした説明が含まれています。これは正規の説明オブジェクトを作るために利用できるので、これを使ってスキーマを設定します。このステップには解析とフォーマット設定が必要ですが、詳細は割愛します。必要になったときのために、
REST ディスカバリー ドキュメントが用意されていることを覚えておいてください。今のところ、この方法が利用できる最適なソリューションですが、
GoogleAdsFieldService
から説明が返されるようになれば、そちらを使う方が簡単でしょう。
表示名
残る作業は、リソース スキーマの表示名フィールドの設定です。この作業は単純で、名前に含まれるアンダースコアをスペースで置換し、各単語の最初の文字を大文字にするだけです。
リソースのフィルタリング
これで、リソース スキーマの内容をすべて設定できました。ただし、これには
GoogleAdsFieldService
クエリが返したすべてのリソース、フィールド、セグメント、指標が含まれています。このスキーマをフィルタリングし、
category
が
RESOURCE
である項目のみを含むようにします。
まとめ
詳細なフィールド情報と、それぞれのフィールドと同時に選択できないフィールドのリストを含む、拡張リソース スキーマが作成できました。Angular アプリケーションでは、このスキーマを利用します。今回の投稿では、以下について説明しました。
GoogleAdsFieldService
を使ってフィールドのメタデータを取得する方法- GAQL でのフィールドの同時使用可否
- REST ディスカバリー API
Google Ads API でできることについての理解が深まれば幸いです。ご質問やさらにサポートが必要なことがありましたら、
フォーラムまたは googleadsapi-support@google.com にご連絡ください。
- Devin Chasanoff(Google Ads API Team)