Google、Facebook、Bingの分析を取得する

拠点のGoogleとFacebookの日次プロフィール指標、およびBingの週次閲覧数を取得し、時系列データの月間合計を計算して、2つの期間を比較します。

プロフィール分析データは、各掲載先で拠点が表示された頻度や、ユーザーがアクションを実行した頻度を、インプレッション数、経路検索数、通話数、ウェブサイトのクリック数として示します。すべての指標は{ startTime, value }のデータポイントからなる時系列データなので、表示する合計値は自分で計算します。

1. 日付範囲を指定してGoogleの指標を読み取る

GET /locations/{locationId}/google-analytics?fromDate=&toDate=は、指標ごとに1つの日次時系列データを含むdata.googleInsightsを返します。totalはプロフィールのインプレッション数で、searchとmapsの合計です。アクション指標は含まれません。

Google
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/google-analytics?fromDate=2026-08-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "googleInsights": {      "total": [        { "startTime": "2026-08-01T00:00:00+00:00", "value": 412 },        { "startTime": "2026-08-02T00:00:00+00:00", "value": 388 }      ],      "search": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 300 }],      "maps": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 112 }],      "directionsAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 24 }],      "phoneAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 8 }],      "websiteAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 41 }],      "businessBookings": null,      "businessFoodOrders": null,      "businessFoodMenuClicks": null    }  }}
時系列データ意味
totalインプレッション数。searchとmapsの合計です。
search, mapsGoogle SearchとGoogle Mapsでのインプレッション数です。
directionsAction, phoneAction, websiteAction経路検索数、通話のクリック数、ウェブサイトのクリック数です。
businessBookings, businessFoodOrders, businessFoodMenuClicks予約数、料理の注文数、メニューのクリック数です(これらの機能を提供しているプロフィールのみ)。

拠点IDの形式が不正な場合は、googleInsights: nullとerrors配列を含む200が返されるため、プロフィールが未接続であるかのように見えます。まずerrorsを確認してください。

2. Facebookの指標を読み取る

GET .../facebook-analyticsもdata.facebookInsightsの下に同じ構造を持ち、views、ctaAction、directionsAction、phoneAction、websiteActionの5つの日次時系列データを含みます。

Facebook
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/facebook-analytics?fromDate=2026-08-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "facebookInsights": {      "views": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 120 }],      "ctaAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 5 }],      "directionsAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 3 }],      "phoneAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 2 }],      "websiteAction": [{ "startTime": "2026-08-01T00:00:00+00:00", "value": 9 }]    }  }}

ctaActionはページの行動喚起ボタンのクリック数を集計するため、「今すぐ予約」や「今すぐ電話」のキャンペーンの効果測定に使用できます。ページの「いいね!」数の指標はありません。

3. Bingの閲覧数を読み取る

GET .../bing-analyticsは、日単位ではなく週単位で集計された単一の時系列データdata.bingInsights.viewsを返します。毎週月曜日に前週分のデータが更新されるため、傾向を折れ線グラフで表示するには複数月の範囲を取得してください。

Bing
curl "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/bing-analytics?fromDate=2026-06-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "bingInsights": {      "views": [        { "startTime": "2026-06-01T00:00:00+00:00", "value": 73 },        { "startTime": "2026-06-08T00:00:00+00:00", "value": 58 }      ]    }  }}

GoogleやFacebookとは異なり、Bingではデータがない場合、nullではなく空のviews配列が返されます。どちらも「表示するデータなし」として扱ってください。

4. 時系列データを合計して月間合計を求める

対象月のデータを取得し、すべてのデータポイントのvalueを合計します。nullはゼロと区別してください。未接続のプロフィールは、アクセスがなかった月としてではなく、「利用不可」と表示する必要があります。Node SDKの分析ページにも同じsumSeriesヘルパーがあります。

Monthly total
# jq: null when the metric is null, otherwise the sum of valuescurl -s "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/google-analytics?fromDate=2026-08-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY" \| jq '.data.googleInsights | { search: (if .search == null then null else ([.search[].value] | add) end),                               maps: (if .maps == null then null else ([.maps[].value] | add) end) }'

Bingでは追加の確認が1つ必要です。空のviews配列を合計すると0になるため、この場合も「データなし」と表示するにはlength == 0を確認してください。

5. 2つの期間を比較する

長さが等しい2つの期間について同じ指標を取得し、2つの合計値から変化を計算します。APIにはプロフィール分析データの比較機能が組み込まれていません。deltaフィールドはレビュー分析データにのみ存在します。

Two periods
curl -s "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/google-analytics?fromDate=2026-07-01&toDate=2026-07-31" \-H "Authorization: API $LISTINGSAPI_KEY" | jq '[.data.googleInsights.total[].value] | add' curl -s "https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/google-analytics?fromDate=2026-08-01&toDate=2026-08-31" \-H "Authorization: API $LISTINGSAPI_KEY" | jq '[.data.googleInsights.total[].value] | add'

いずれかの期間がnull(未接続)の場合、前の期間が0(ゼロ除算)の場合、対象期間がまだ終了していない場合の3つに対処してください。月の途中までのデータを1か月全体のデータと比較すると、常に減少しているように見えるためです。各呼び出しはレート制限にカウントされるため、描画のたびに再取得するのではなく、前の期間のデータをキャッシュしてください。

次の手順