【GAS自動化】GoogleドライブからTikTokへ!動画投稿を完全自動化する方法
「毎日決まった時間にTikTokへ動画を投稿したい」
「複数のTikTokアカウントへの投稿作業をもっと効率化したい」
もしあなたがマーケティング担当者やコンテンツクリエイターとして、こうした悩みを抱えているなら、この記事はきっと役に立つでしょう。手作業での投稿作業は、時間も労力もかかり、他の重要な業務を圧迫しがちです。特に、複数のアカウントを運用している場合や、毎日欠かさず投稿したい場合には、その負担は計り知れません。
そこで本記事では、Googleの無料ツールであるGoogle Apps Script (GAS) と TikTok Content Posting API を連携させ、Googleドライブに保存した動画ファイルを全自動でTikTokに投稿するシステムを構築する方法を、手順を追って徹底的に解説します。一度このシステムを構築すれば、あなたのTikTok運用は劇的に効率化されるはずです。
この自動投稿システムを導入することで、主に以下のことが実現可能になります。
これにより、あなたは動画コンテンツの企画・制作といったクリエイティブな作業に集中できるようになり、投稿作業にかかっていた時間を大幅に削減できるでしょう。
この自動投稿システムがどのように機能するのか、まずはその全体像を把握しましょう。仕組みは非常にシンプルです。
このシステムは、Googleドライブを「投稿予約ボックス」のように利用するイメージです。ドライブに動画を入れるだけで、あとはGASが指定時間に自動で処理してくれる、というわけです。
この自動投稿システムを構築する上で、最も重要かつ、もしかすると最大のハードルとなるのが、TikTok側の事前準備です。Content Posting APIを利用するためには、いくつかの必須条件を満たし、TikTokによる審査を通過する必要があります。
このステップをクリアしなければ、APIを利用した自動投稿は実現できません。しっかりと手順を確認しましょう。
Content Posting APIは、個人のTikTokアカウントでは利用できません。必ず「ビジネスアカウント」である必要があります。まだビジネスアカウントをお持ちでない場合は、お使いのスマートフォンアプリから簡単に切り替えられます。
TikTokアプリでのビジネスアカウントへの切り替え手順は以下の通りです。
ビジネスアカウントに切り替えると、アプリ内で動画を作成・編集する際に使用できる音源が「商用楽曲ライブラリ」に含まれるものに限定されます。これは、ビジネス利用における著作権の問題をクリアするためです。ただし、今回のようにAPIを使って外部から動画ファイルを直接アップロードする場合、動画ファイルに含まれるオリジナルの音声がそのまま使用されるため、アプリ内の音源ライブラリの制限は直接的な影響は少ないと考えられます。
ビジネスアカウントに切り替えたら、次にTikTokのAPIを利用するための申請を行います。これがこのシステムの構築における最大の関門と言えるでしょう。Content Posting APIは誰でもすぐに利用できるわけではなく、TikTokによる厳しい審査と承認が必要です。
まず、ウェブブラウザで「TikTok for Developers」にアクセスします。
https://developers.tiktok.com/
アクセスしたら、APIを利用したいTikTokアカウントでログインしてください。
ログイン後、以下の手順で新しいアプリを作成し、Content Posting APIの利用申請を行います。
申請提出後、TikTokによる審査が行われます。この審査には時間がかかる場合があります。審査基準は公開されていませんが、アプリの説明や利用目的が明確であること、TikTokの利用規約やAPIポリシーに準拠していることなどが重要と考えられます。審査に無事通過しなければ、この先のステップには進むことができません。 焦らず、結果を待ちましょう。
審査に無事通過すると、作成したアプリの「App details」ページで、以下の非常に重要な情報が取得できるようになります。
これらは、あなたのGASスクリプトがTikTok APIに接続する際に必要となる、いわば「鍵」のようなものです。これらの情報は後ほどGASのコード内で使用しますので、安全な場所に控えておいてください。
TikTok側の準備が整い、Client KeyとClient Secretを取得できたら、いよいよGoogle Apps Script (GAS) でのシステム構築に取り掛かります。
まずはGASのプロジェクトを作成します。
ウェブブラウザでGoogle Apps Scriptにアクセスします。
https://script.google.com/
2. アクセスしたら、左上の「新しいプロジェクト」ボタンをクリックして、新しいGASプロジェクトを作成します。
3. 作成されたプロジェクトに、後から見て分かりやすい名前をつけましょう。例えば「TikTok自動投稿システム」などが良いでしょう。
TikTok APIとの連携には、OAuth2.0という認証プロトコルを使用します。このOAuth2.0の処理はやや複雑ですが、幸いなことにGASにはOAuth2認証を簡単に実装できる便利なライブラリが存在します。このライブラリをプロジェクトに追加しましょう。
GASエディタの左側メニューを見てください。下の方に「ライブラリ」という項目があります。
「スクリプト ID」の欄に、以下のOAuth2ライブラリのIDを入力し、「検索」ボタンをクリックします。
1B7FSrk57A1B_rTR362_bJSPbSr2aR6-OseVd822zdokNIZ__sJ_gX0_p
4. 検索結果に「OAuth2」というライブラリが表示されるはずです。バージョンを選択するドロップダウンメニューがありますので、最新版を選択してください。
5. 「識別子」はデフォルトの「OAuth2」のままで構いません。
6. 右下の「追加」ボタンをクリックします。
これで、あなたのGASプロジェクトでOAuth2ライブラリが利用可能になりました。
いよいよ、自動投稿処理の中核となるGASコードを記述します。GASエディタに以下のコードを貼り付けてください。
// 【★★要設定★★】 自身の環境に合わせて以下の値を設定してください
const CLIENT_KEY = 'YOUR_CLIENT_KEY'; // TikTok for Developersで取得したClient Key
const CLIENT_SECRET = 'YOUR_CLIENT_SECRET'; // TikTok for Developersで取得したClient Secret
const DRIVE_FOLDER_ID = 'YOUR_GOOGLE_DRIVE_FOLDER_ID'; // 動画を格納するGoogleドライブのフォルダID
// --- OAuth2認証サービスを作成 ---
function getTiktokService() {
// OAuth2ライブラリを使ってTikTok用の認証サービスを構築
return OAuth2.createService('TikTok')
// TikTokの認証エンドポイントURLを設定
.setAuthorizationBaseUrl('https://www.tiktok.com/v2/auth/authorize/')
// TikTokのトークン取得エンドポイントURLを設定
.setTokenUrl('https://open.tiktokapis.com/v2/oauth/token/')
// TikTok for Developersで取得したクライアントIDを設定
.setClientId(CLIENT_KEY)
// TikTok for Developersで取得したクライアントシークレットを設定
.setClientSecret(CLIENT_SECRET)
// 認証後のリダイレクト先としてGAS内のコールバック関数を指定
.setCallbackFunction('authCallback')
// 認証情報をGASのユーザープロパティに保存するためのストアを設定
.setPropertyStore(PropertiesService.getUserProperties())
// 必要なAPIスコープ(権限)を指定 - 動画投稿には 'video.publish' が必須
.setScope('video.publish')
// 認証リクエストに追加するパラメータとしてclient_keyを含める
.setParam('client_key', CLIENT_KEY)
// トークンリクエストに追加するパラメータとしてgrant_typeを指定
.setAdditionalParams({ 'grant_type': 'authorization_code' });
}
// --- 認証コールバック関数 ---
// TikTokでの認証完了後にTikTokサーバーから呼び出される関数
function authCallback(request) {
const tiktokService = getTiktokService();
// 認証リクエストを処理し、アクセストークンを取得・保存
const isAuthorized = tiktokService.handleCallback(request);
if (isAuthorized) {
// 認証成功時のメッセージをHTMLで返す
return HtmlService.createHtmlOutput('認証に成功しました。このタブを閉じてください。');
} else {
// 認証失敗時のメッセージをHTMLで返す
return HtmlService.createHtmlOutput('認証に失敗しました。');
}
}
// --- 初回認証用のURLをログに出力する関数 ---
// この関数を実行して得られるURLをブラウザで開き、TikTokと連携を承認する
function logAuthorizationUrl() {
const tiktokService = getTiktokService();
if (!tiktokService.hasAccess()) {
// アクセス権がない場合、認証URLをログに出力
Logger.log('以下のURLにアクセスして認証してください:');
Logger.log(tiktokService.getAuthorizationUrl());
} else {
// 既に認証済みの場合のメッセージ
Logger.log('既にTikTokへのアクセス権があります。');
}
}
// --- メインの自動投稿関数 ---
// 指定したGoogleドライブフォルダから動画を取得し、TikTokへ投稿する処理
function postVideoToTiktok() {
const tiktokService = getTiktokService();
// TikTokへのアクセス権があるか確認
if (!tiktokService.hasAccess()) {
Logger.log('TikTokへのアクセス権がありません。logAuthorizationUrl()を実行して認証してください。');
return; // アクセス権がない場合は処理を中断
}
// 1. Googleドライブから動画ファイルを取得
try {
const folder = DriveApp.getFolderById(DRIVE_FOLDER_ID); // 設定したフォルダIDからフォルダを取得
const files = folder.getFiles(); // フォルダ内のファイル一覧を取得
// 投稿対象のファイルがあるか確認
if (!files.hasNext()) {
Logger.log('投稿する動画ファイルが見つかりません。指定フォルダに動画ファイルをアップロードしてください。');
return; // ファイルがない場合は処理を中断
}
// 最初に見つかったファイル(最も古いファイルなど、運用に合わせて変更可能)を取得
const videoFile = files.next();
const videoBlob = videoFile.getBlob(); // ファイルの内容をBlob形式で取得
Logger.log(`動画ファイル「${videoFile.getName()}」のアップロード処理を開始します。`);
// 2. TikTokへ動画をアップロード (初期化)
// 動画アップロードのための初期化処理を行い、アップロードURLなどを取得
const accessToken = tiktokService.getAccessToken(); // 保存されているアクセストークンを取得
const uploadInitOptions = {
method: 'post', // POSTメソッドでリクエスト
headers: {
'Authorization': 'Bearer ' + accessToken, // 認証情報(アクセストークン)をヘッダーに含める
'Content-Type': 'application/json' // リクエストボディの形式を指定
},
payload: JSON.stringify({ // リクエストボディ(JSON形式)
'post_info': {
'title': videoFile.getName(), // 動画ファイル名を投稿のタイトルに設定(任意)
'privacy_level': 'PUBLIC_TO_EVERYONE', // 公開範囲を設定 (PUBLIC_TO_EVERYONE, FRIEND_TO_FRIEND, SELF_ONLY)
'disable_comment': false, // コメントを有効にするか
'disable_duet': false, // デュエットを有効にするか
'disable_stitch': false // ステッチを有効にするか
},
'source_info': {
'source': 'FILE_UPLOAD', // アップロード方法を指定 (ファイルアップロード)
'video_size': videoBlob.getBytes().length, // 動画ファイルのサイズ(バイト)
'chunk_size': videoBlob.getBytes().length, // チャンクサイズ(今回はファイルを分割せず一括アップロード)
'total_chunk_count': 1 // チャンクの総数(一括アップロードなので1)
}
}),
muteHttpExceptions: true // HTTPエラーが発生しても例外を投げずにレスポンスを返す
};
// TikTok APIの初期化エンドポイントへリクエストを送信
const uploadInitResponse = UrlFetchApp.fetch('https://open.tiktokapis.com/v2/post/publish/video/init/', uploadInitOptions);
const uploadInitResult = JSON.parse(uploadInitResponse.getContentText()); // レスポンスをJSONとしてパース
// 初期化が成功したか確認
if (uploadInitResult.error.code !== 'ok') {
Logger.log('動画アップロードの初期化に失敗しました: ' + uploadInitResult.error.message);
Logger.log('レスポンス詳細: ' + JSON.stringify(uploadInitResult)); // デバッグ用にレスポンス全体もログに出力
return; // 失敗した場合は処理を中断
}
// 3. 取得したURLに動画データをアップロード
// 初期化レスポンスから取得したアップロードURLに動画データを送信
const uploadUrl = uploadInitResult.data.upload_url; // アップロードURLを取得
const uploadOptions = {
method: 'put', // PUTメソッドでリクエスト(ファイルアップロード)
contentType: videoBlob.getContentType() || 'video/mp4', // ファイルのMIMEタイプを指定 (取得できない場合はvideo/mp4)
payload: videoBlob, // アップロードする動画データ (Blob形式)
muteHttpExceptions: true // HTTPエラーが発生しても例外を投げずにレスポンスを返す
};
Logger.log(`取得したアップロードURLへ動画データの送信を開始します。`);
const uploadResponse = UrlFetchApp.fetch(uploadUrl, uploadOptions); // アップロードURLへリクエストを送信
// アップロードが成功したか確認 (HTTPステータスコード200番台)
if (uploadResponse.getResponseCode() < 200 || uploadResponse.getResponseCode() >= 300) {
Logger.log('TikTokサーバーへの動画データアップロードに失敗しました。ステータスコード: ' + uploadResponse.getResponseCode());
Logger.log('レスポンス詳細: ' + uploadResponse.getContentText()); // デバッグ用にレスポンス全体もログに出力
return; // 失敗した場合は処理を中断
}
Logger.log(`動画データのアップロードが完了しました。`);
// 4. 動画の公開ステータスを確認・完了
// 動画データのアップロードが完了したら、投稿処理を完了させる
const publishId = uploadInitResult.data.publish_id; // 初期化レスポンスから取得したpublish_id
const publishStatusOptions = {
method: 'post', // POSTメソッドでリクエスト
headers: {
'Authorization': 'Bearer ' + accessToken, // 認証情報(アクセストークン)
'Content-Type': 'application/json', // リクエストボディの形式
},
payload: JSON.stringify({ 'publish_id': publishId }), // リクエストボディ(publish_idを指定)
muteHttpExceptions: true // HTTPエラーが発生しても例外を投げずにレスポンスを返す
};
// TikTok側での処理に時間がかかる場合があるため、少し待機してからステータスを確認する
Logger.log('TikTokサーバーでの処理を待機中 (10秒)...');
Utilities.sleep(10000); // 10秒 (10000ミリ秒) 待機
Logger.log(`動画の公開ステータスを確認します。Publish ID: ${publishId}`);
const statusResponse = UrlFetchApp.fetch('https://open.tiktokapis.com/v2/post/publish/status/fetch/', publishStatusOptions); // ステータス確認エンドポイントへリクエスト送信
const statusResult = JSON.parse(statusResponse.getContentText()); // レスポンスをJSONとしてパース
// 投稿処理が成功したか確認
if (statusResult.error.code === 'ok' && statusResult.data.status === 'STATE_SUCCESS') {
Logger.log(`動画の投稿が完了しました! 公開ステータス: ${statusResult.data.status}`);
// 投稿が完了したら、重複投稿を防ぐために処理済みファイルを別のフォルダに移動するなどの処理を追加することを強く推奨します。
// 例: 投稿完了後にファイルを移動する場合
// const doneFolderId = 'YOUR_DONE_FOLDER_ID'; // 処理済みファイルを移動するフォルダのID
// const doneFolder = DriveApp.getFolderById(doneFolderId);
// videoFile.moveTo(doneFolder);
// Logger.log(`処理済み動画ファイル「${videoFile.getName()}」を別のフォルダに移動しました。`);
} else if (statusResult.error.code === 'ok' && statusResult.data.status === 'STATE_IN_PROGRESS') {
Logger.log(`動画の投稿処理は進行中です。しばらくしてからTikTokアカウントを確認してください。公開ステータス: ${statusResult.data.status}`);
}
else {
Logger.log('動画の公開に失敗しました、または処理が完了していません。エラーメッセージ: ' + statusResult.error.message);
Logger.log('レスポンス詳細: ' + JSON.stringify(statusResult)); // デバッグ用にレスポンス全体もログに出力
}
} catch (e) {
// 予期せぬエラーが発生した場合のログ出力
Logger.log('スクリプト実行中にエラーが発生しました: ' + e.toString());
Logger.log('エラーが発生したファイル: ' + e.fileName);
Logger.log('エラーが発生した行番号: ' + e.lineNumber);
}
}
このコードは、以下の主要な関数で構成されています。
* `getTiktokService()`: OAuth2ライブラリを使用して、TikTok APIへの認証に必要なサービスオブジェクトを生成します。APIのエンドポイントURL、クライアント情報、必要な権限(スコープ)、コールバック関数などを設定しています。
* `authCallback(request)`: TikTokでの認証プロセス完了後にTikTokサーバーから呼び出される関数です。認証コードを受け取り、アクセストークンを取得してGASのプロパティストアに保存します。
* `logAuthorizationUrl()`: 初回認証を行うために、ユーザーがブラウザでアクセスすべき認証URLをログに出力します。このURLを開いてTikTokとの連携を承認する必要があります。
* `postVideoToTiktok()`: 自動投稿処理のメイン関数です。Googleドライブから動画ファイルを取得し、TikTok Content Posting APIを呼び出して動画のアップロード、そして投稿の完了処理を行います。
コード内のコメントで、各行の処理内容やAPIリクエストの詳細を補足していますので、合わせてご確認ください。
貼り付けたコードを利用するために、いくつかの初期設定とTikTokとの連携(認証)が必要です。
コードの編集(設定値の変更):
貼り付けたコードの冒頭部分にある以下の3つの定数を、あなたの環境に合わせて書き換えてください。
javascript
const CLIENT_KEY = 'YOUR_CLIENT_KEY'; // TikTok for Developersで取得したClient Key
const CLIENT_SECRET = 'YOUR_CLIENT_SECRET'; // TikTok for Developersで取得したClient Secret
const DRIVE_FOLDER_ID = 'YOUR_GOOGLE_DRIVE_FOLDER_ID'; // 動画を格納するGoogleドライブのフォルダID
YOUR_CLIENT_KEY
: STEP 1-2でTikTok for Developersから取得したClient Keyに置き換えます。YOUR_CLIENT_SECRET
: STEP 1-2でTikTok for Developersから取得したClient Secretに置き換えます。YOUR_GOOGLE_DRIVE_FOLDER_ID
: 投稿したい動画を格納するGoogleドライブのフォルダIDに置き換えます。フォルダIDは、そのフォルダをブラウザで開いたときのURLに含まれる「folders/」の後ろの文字列です。設定項目 | 説明 | 取得場所/設定方法 |
---|---|---|
CLIENT_KEY | TikTok APIにアクセスするためのクライアント識別子 | TikTok for Developers で作成したアプリの詳細ページ |
CLIENT_SECRET | CLIENT_KEY と対になる秘密鍵 | TikTok for Developers で作成したアプリの詳細ページ |
DRIVE_FOLDER_ID | 自動投稿したい動画ファイルを置くGoogleドライブのフォルダの固有ID | 対象のGoogleドライブフォルダをブラウザで開き、URLの folders/ 以降をコピー |
初回認証の実行:
GASスクリプトがあなたの代わりにTikTokへ投稿するには、あなたのTikTokアカウントからの「許可」が必要です。OAuth2認証フローを通じて、この許可を行います。
logAuthorizationUrl
を選択します。以下のURLにアクセスして認証してください:
https://www.tiktok.com/v2/auth/authorize/?client_key=YOUR_CLIENT_KEY&scope=video.publish&response_type=code&redirect_uri=https%3A%2F%2Fscript.google.com%2Fmacros%2Fd%2F...%2Fusercallback&state=...
* 表示されたURLをコピーし、ウェブブラウザのアドレスバーに貼り付けて開きます。
* TikTokの認証画面が表示されます。投稿を許可したいTikTokアカウントでログインし、連携を承認するボタンをクリックします。
* 認証が成功すると、「認証に成功しました。このタブを閉じてください。」というメッセージが表示されたページにリダイレクトされます。これで、GASがあなたの代わりにTikTok APIを操作するためのアクセストークンがGASのプロパティストアに安全に保存されました。
発行された認証URLは一度しか有効ではありません。認証に失敗したり、再度認証が必要になった場合は、再度 `logAuthorizationUrl()` 関数を実行して新しいURLを発行してください。
コードの設定と認証が完了したら、実際に動画が自動投稿されるかテストしてみましょう。そして、問題なく動作することを確認できたら、いよいよ自動実行のトリガーを設定します。
本番運用を開始する前に、必ずテストを行ってください。
postVideoToTiktok
を選択します。実行ログには、スクリプトが正常に動作しているか、あるいはエラーが発生しているかなどの重要な情報が表示されます。何か問題が起きた場合は、必ずログを確認して原因を探りましょう。エラーメッセージが具体的な解決のヒントになります。
テスト実行が成功したら、実際にあなたのTikTokアカウントに動画が投稿されているか確認してみましょう。タイトルが動画ファイル名になっているか、公開範囲は設定通りかなども合わせて確認してください。
無料版のGoogle Apps Scriptには、いくつかの実行制限があります。その一つに、1回のスクリプト実行につき最大6分間という時間制限があります。
動画ファイルのサイズが大きい場合や、インターネット接続が不安定な場合など、動画のアップロード処理がこの6分を超えてしまう可能性があります。6分を超えるとスクリプトは強制的に終了され、エラーとなります。
このため、このシステムで投稿する動画は、尺を短くする、あるいはファイルサイズを小さくするなどの工夫が必要です。もし長尺の動画を投稿したい場合は、別途、動画ファイルを分割してアップロードするなどのより高度な処理が必要になります(今回のコードでは一括アップロードを想定しています)。
手動でのテスト実行が成功し、問題なく動作することを確認できたら、いよいよこのスクリプトを毎日自動で実行するように設定します。GASのトリガー機能を使います。
トリガーの設定:
表示されたダイアログで、以下のように設定を行います。
postVideoToTiktok
を選択します。保存:
設定が完了したら、右下の「保存」ボタンをクリックします。Googleからの承認を再度求められる場合がありますので、その際は許可してください。
これで、毎日指定した時間になるとGASが自動的に postVideoToTiktok
関数を実行し、Googleドライブの指定フォルダにある動画ファイルがTikTokに自動投稿されるようになりました!
現在のコードでは、投稿が完了してもGoogleドライブのファイルはそのまま残ります。同じファイルが翌日も投稿されてしまうのを防ぐために、投稿が成功した動画ファイルは別のフォルダに移動したり、ファイル名を変更したりする処理を postVideoToTiktok
関数の末尾(投稿成功のログ出力後)に追加することを強く推奨します。コード内のコメントアウトされた部分を参考に、運用に合わせて実装してみてください。
// 投稿が完了したら、重複投稿を防ぐために処理済みファイルを別のフォルダに移動するなどの処理を追加することを強く推奨します。
// 例: 投稿完了後にファイルを移動する場合
// const doneFolderId = 'YOUR_DONE_FOLDER_ID'; // 処理済みファイルを移動するフォルダのID
// const doneFolder = DriveApp.getFolderById(doneFolderId);
// videoFile.moveTo(doneFolder);
// Logger.log(`処理済み動画ファイル「${videoFile.getName()}」を別のフォルダに移動しました。`);
上記のコメントアウトを外し、YOUR_DONE_FOLDER_ID
を実際に移動先のフォルダIDに書き換えることで、処理済みファイルを自動で移動させることができます。あらかじめGoogleドライブに「投稿済みTikTok動画」のようなフォルダを作成しておくと良いでしょう。
このGASとTikTok Content Posting APIを連携させた自動投稿システムは非常に強力ですが、メリットだけでなく、いくつかのデメリットや考慮すべき点も存在します。導入を検討する上で、これらを理解しておくことは重要です。
項目 | メリット | デメリット/考慮事項 |
---|---|---|
投稿作業 | 自動化による時間短縮・効率化、投稿忘れ防止 | 初期設定の手間、エラー対応の必要性 |
運用 | スケジュール投稿、一元管理(応用) | GASの実行時間制限(6分)、API仕様変更リスク |
機能 | Googleドライブ連携、動画ファイル名をタイトルに利用(基本形) | 音源選択不可(API仕様)、アプリの全機能は利用不可 |
コスト | 基本的に無料で利用可能 | なし |
この自動投稿システムをより効果的に運用し、さらに発展させるための実践的なアドバイスと今後の展望について触れておきましょう。
このシステムは、あくまでGoogleドライブから単一アカウントへの自動投稿の基本形です。これをベースに、様々な応用が考えられます。
[日付]_[タイトル]_[ハッシュタグ]
) を持たせることで、GASスクリプトがファイル名を解析し、投稿タイトルやキャプション、ハッシュタグを自動で生成するような処理を追加できます。これらの応用を実現するためには、GASのコードをさらに書き加える必要がありますが、一度基本形を構築できれば、これらの拡張も比較的容易に行えるはずです。あなたの運用ニーズに合わせて、ぜひカスタマイズに挑戦してみてください。
応用アイデア | 実現方法のヒント |
---|---|
スプレッドシート連携 | GASでSpreadsheetAppサービスを使用し、スプレッドシートのデータを読み書きする |
複数アカウント投稿 | アカウントごとにOAuth2認証プロセスを行い、アクセストークンを管理する。投稿時に適切なアクセストークンを使用する |
自動キャプション生成 | 正規表現などを使ってファイル名から情報を抽出し、APIリクエストのペイロードに含める |
投稿完了通知 | GASでMailAppまたはGmailAppサービスを使用してメールを送信する。Slack連携の場合はUrlFetchAppでIncoming Webhooksを呼び出す |
本記事では、Google Apps Script (GAS) と TikTok Content Posting API を連携させ、Googleドライブに保存した動画をTikTokへ自動投稿するシステムの構築方法を詳しく解説しました。
1. **TikTok側の準備**: ビジネスアカウントへの切り替えと、TikTok for DevelopersでのAPI利用申請・審査通過が必須です。ここで取得するClient KeyとClient Secretは非常に重要です。
2. **GASプロジェクト準備**: 新しいGASプロジェクトを作成し、OAuth2ライブラリを追加します。
3. **コード記述と認証**: 提供したGASコードを貼り付け、設定値を変更します。`logAuthorizationUrl()`を実行して初回認証を行い、GASにTikTokへのアクセス権を付与します。
4. **テストと自動実行設定**: Googleドライブにテスト動画を置いて`postVideoToTiktok()`を手動実行して動作確認を行います。問題なければ、時間主導型トリガーを設定して自動実行を開始します。
APIの利用申請という最初のハードルは存在しますが、一度このシステムを構築してしまえば、日々のTikTok投稿作業にかかる時間と労力を大幅に削減し、あなたのコンテンツ運用を劇的に効率化できる非常に強力なツールとなります。
GASの実行時間制限やAPIの仕様変更リスクといった考慮事項はありますが、それらを理解し、適切な対策を講じることで、安定した運用が可能です。
今回ご紹介した基本形を参考に、ぜひあなたの具体的な運用ニーズに合わせてコードをカスタマイズし、さらなる効率化や機能拡張を目指してみてください。Google Apps ScriptとTikTok APIの組み合わせは、あなたのクリエイティブな活動やマーケティング戦略に、きっと新たな可能性をもたらしてくれるはずです。