【GAS】TikTok広告の運用データをスプレッドシートに自動取得する方法|Marketing API対応

2022年1月14日

TikTok広告の運用データをGAS(Google Apps Script)で取得する方法を解説します。TikTok Marketing APIの公式ドキュメントにはPHPやPythonのサンプルはありますが、GASでの実装方法がなかったためまとめました。

前提として、TikTokデベロッパーアカウントの作成が必要です。参考:TikTok Marketing API公式ドキュメント

手順の概要

  1. TikTokデベロッパーでAPP IDを取得
  2. 広告主のauth_codeを取得
  3. 長期アクセストークンを生成
  4. GASで運用データを取得してスプレッドシートに出力

手順1:TikTokデベロッパーでAPP IDを取得する

TikTok Marketing API アプリ管理にアクセスし、必要事項を入力してアプリを作成します。

TikTokアプリ作成画面

手順2:広告主のauth_codeを取得する

auth_codeは10分間有効で、1回のみ使用できます。期限が切れたら最初からやり直す必要があります。

作成したアプリ名をクリックし「Advertiser authorization URL」をコピーしてブラウザでアクセスします。

Advertiser authorization URL

認証画面が表示されるので認証すると、リダイレクトURLにauth_codeパラメータが含まれた形でリダイレクトされます。URLからauth_codeの値をコピーしておきます。

手順3:長期アクセストークンを生成する

GASで以下のコードを実行します。

function getAuthCode() {
  const APP_SECRET = "APP基本情報内のSECRET";
  const APP_ID = "作成したAPPのID";
  const AUTH_CODE = "手順2で取得したauth_code";
  const PATH = "https://business-api.tiktok.com/open_api/v1.2/oauth2/access_token/";

  let params = {
    secret: APP_SECRET,
    app_id: APP_ID,
    auth_code: AUTH_CODE,
  };

  let options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(params)
  };

  let response = UrlFetchApp.fetch(PATH, options).getContentText();
  console.log(response);
}

実行するとログに以下のようなレスポンスが返されます。access_tokenの値をメモしておきます。

{
  "message": "OK",
  "code": 0,
  "data": {
    "access_token": "xxxxxxxxxxxxx",
    "scope": [4],
    "advertiser_ids": [1234, 5678]
  },
  "request_id": "2020042715295501023125104093250"
}

手順4:運用データを取得する

以下のクラスを使って運用データを取得します。

class TikTokADS{
  constructor(op){
    this.PATH           = "https://ads.tiktok.com/open_api/v1.2/reports/campaign/get/";
    this.ACCESS_TOKEN   = op['ACCESS_TOKEN']
    this.getStat        = op['getStat']
    this.advertiser_id  = op['advertiser_id']
  }

  getAdsData() {
    let option = {
      primary_status      : 'STATUS_ALL',
      start_date          : '2021-12-01',
      end_date            : '2021-12-31',
      advertiser_id       : this.advertiser_id,
      fields              : JSON.stringify(this.getStat),
      group_by            : JSON.stringify(['STAT_GROUP_BY_FIELD_STAT_TIME', 'STAT_GROUP_BY_FIELD_ID']),
      time_granularity    : 'STAT_TIME_GRANULARITY_DAILY',
      page                : 1,
      page_size           : 100,
    }

    let params 
    for (let key in option) {
      params += key + "=" + option[key] + "&"
    }
    let url = encodeURI(this.PATH + "?" + params)

    const httpResponse = UrlFetchApp.fetch(url, {
      method: 'get',
      muteHttpExceptions: true,
      headers: {
        'Access-Token': this.ACCESS_TOKEN,
      },
    }).getContentText();

    let res = JSON.parse(httpResponse)
    let adsData = res["data"]["list"]
    let result = [['stat_datetime','campaign_id','campaign_name',...this.getStat]]

    for (let elm of adsData) {
      let temp = []
      temp.push(new Date(elm['stat_datetime']))
      temp.push(String(elm['campaign_id']))
      temp.push(elm['campaign_name'])
      for (let stat of this.getStat) {
        temp.push(elm[stat])
      }
      result.push(temp)
    }
    result = result.sort((a, b) => a[0] - b[0])
    return result
  }
}

function main(){
  let Tk = new TikTokADS({
    ACCESS_TOKEN  : "手順3で取得したアクセストークン",
    getStat       : ['campaign_name', 'stat_cost', 'show_cnt', 'click_cnt', 'convert_cnt'],  // 取得したいデータ
    advertiser_id : "広告アカウントID",
  })
  let result = Tk.getAdsData()

  const setSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('出力シート名')
  setSheet.getRange(1, 1, result.length, result[0].length).setValues(result)
}

取得できる主なデータフィールド

  • stat_cost:広告費用
  • show_cnt:インプレッション数
  • click_cnt:クリック数
  • convert_cnt:コンバージョン数
  • time_attr_view:ビュースルーコンバージョン

その他広告媒体の運用データ取得については、Google広告編Yahoo広告編もご参照ください。

GAS,広告運用

Posted by Next-k