program-htmlの日記

つれづれ書いてます

GAS + Twitter adsApi -プログラミング・本のブログ

自身のアウトプットも兼ねてつれづれと書き続けるブログ。

 

久しぶりの更新。

今回は、GASの話題になります。

仕事でGAS+Twitter adsApiの実装指示があり、その記録となります。主に私自身がつまづいた箇所を書き出しています。少しでもご参考にして頂けますと幸いです。

※2023年10月18日付での内容でございます。

 

ドキュメント

Getting Started | Docs | Twitter Developer Platform

developer.twitter.com

 

はじめに

下記の内容が必要になります。

※こちらは公式らしきところから回答がありましたが、自己責任でお願いいたします。

docs.google.com

申請まで終わりますとTwitter開発者アカウントダッシュボードで、トークンなどの取得を行います。認証方法にOAuth 1.1とOAuth 2.0  と2種類方法があります。私は今回OAuth 1.1で行いました。
[OAuth 1.1 ]

[OAuth 2.0 ]

  • Client ID
  • Client Secret

ここまで出来ましたら次はgasでの作業になります。ここまではGoogleに「ツイッター API 使い方」で検索したら、画像ありでの詳細を記載したサイトが出てくると思いますので、そちらを参考にして下さい。ただしtwitter社への申請が公式サイトから確認出来ず、noteでたまたま発見しました。なので申請は本当に自己責任でお願いいたします。

GAS

<<画像>>

[ライブラリー追加]

Twitter adsApiでは認証が必要になります。OAuth 1.1・OAuth 2.0 共にGASのライブラリーで提供されていますので活用して下さい。

[認証]

ライブラリーを使用しての認証です。各ライブラリーのreadmeを参考に実装していきます。個人的に注意した方が良いかなと思ったところはauthorizationUrlをログで見えるようにする事。

私の体験談で実行→実行中断でauthorizationUrlが分からないまま認証できたので、そこが何だかモヤモヤしてしまいます。

function showSidebar() {
  var twitterService = getTwitterService_();
  if (!twitterService.hasAccess()) {
    var authorizationUrl = twitterService.authorize();

    Logger.log(authorizationUrl ); // これ追加
    var template = HtmlService.createTemplate(
        '<a href="<?= authorizationUrl ?>" target="_blank">Authorize</a>. ' +
        'Reopen the sidebar when the authorization is complete.');
    template.authorizationUrl = authorizationUrl;
    var page = template.evaluate();
    DocumentApp.getUi().showSidebar(page);
  } else {
    Logger.log("認証済み");
  }
}

Twitterダッシュボードで下記の設定もお忘れないようにして下さい。

Twitter開発者アカウントサイドメニュー→Overview→画面中央の歯車マーク→画面中央下User authentication settingsのeditをクリック→下にスクロールApp info callback URLに下記を追加

https://script.google.com/macros/d/{SCRIPT ID}/usercallback

 

[data取得]

認証が上手くいきますと下記のコードでAPIを叩けるようになります。urlの箇所は欲しいデータで変わりますので、ドキュメントで確認してください。

const service = getTwitterService_();

const res = service.fetch(url)

developer.twitter.com

postman

documenter.getpostman.com

菅理画面のデータ取得順序(job作成→処理監視→処理完了後データ取得urlでダウンロード)

developer.twitter.com


documenter.getpostman.com

ちなみに私は今回キャンペーンの情報取得でしたので、下記のurlでデータ取得していました。

end_time=${todayDate}&entity_ids=${entityIdsList.join()}&granularity=DAY&
entity=CAMPAIGN&start_time=${twoMouthDate}>&
placement=ALL_ON_TWITTER&metric_groups=BILLING`

urlでの注意点ですがentityで取得したいデータのグループを指定しますが、entity_idsはその指定したグループのIDを入れないといけません。仮にentity=CAMPAIGNならentity_ids=campaing_idです。体験談でLINE_ITEMにentity_idの項目がありCAMPAIGNのデータが取得できないで何時間も調べたハメになりました。

 

またデータ取得期間も注意して下さい。詳しくは分かりませんが、欲しい期間の1日プラスした日を指定して下さい。

例えば2023-10-18〜2023-08-10なら 2023-10-19〜2023-08-11で指定。

仕様だと思いますが、間違えてたらご指摘をお願いいたします。

 

entityの項目など調べる場合、下記を参考にして下さい。

developer.twitter.com

 

[gzip解凍]
Twitter adsApiでデータを取得したファイル形式はgzipです。

したがって解凍が必要です。

const dataRes = UrlFetchApp.fetch(dataUrl) // data受け取り

// gzipの解凍処理

const gzipText = dataRes.getBlob()

gzipText.setContentType("application/x-gzip")

const unGzippedfile = Utilities.ungzip(gzipText)

// オブジェクトに変換

const dataAsString = JSON.parse(unGzippedfile.getDataAsString())

後はオブジェクトに変換したデータを好きなように成型し、スプレットシートに書き出すだけです。

最後に

APIを実装すると

  • 認証処理ができた時
  • 情報のログが表示された時
  • 欲しい情報が取得できた時
  • ドキュメントが何となく理解できた時
  • GASでスプレットシートに記載できた時

このような場面に遭遇すると何だか嬉しくなります。

今回、私自身がつまづいた箇所を抜粋し書き出してみました。Twitter adsApiで悩んでる方に少しでもお役に立てれば幸いです。