自身のアウトプットも兼ねてつれづれと書き続けるブログ。
久しぶりの更新。
今回は、GASの話題になります。
仕事でGAS+Twitter adsApiの実装指示があり、その記録となります。主に私自身がつまづいた箇所を書き出しています。少しでもご参考にして頂けますと幸いです。
※2023年10月18日付での内容でございます。
ドキュメント
Getting Started | Docs | Twitter Developer Platform
はじめに
下記の内容が必要になります。
- twitterのアカウント
- Twitter開発者アカウントを作成し開発者アプリを作成
- twitter社への申請 (私の場合、4時間位で返信ありでした)
※こちらは公式らしきところから回答がありましたが、自己責任でお願いいたします。
申請まで終わりますと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に下記を追加
[data取得]
認証が上手くいきますと下記のコードでAPIを叩けるようになります。urlの箇所は欲しいデータで変わりますので、ドキュメントで確認してください。
const service = getTwitterService_();
const res = service.fetch(url)
postman
菅理画面のデータ取得順序(job作成→処理監視→処理完了後データ取得urlでダウンロード)
ちなみに私は今回キャンペーンの情報取得でしたので、下記のurlでデータ取得していました。
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の項目など調べる場合、下記を参考にして下さい。
[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で悩んでる方に少しでもお役に立てれば幸いです。