【GAS】YouTube自動アップロード① Googleの無期限リフレッシュトークンの取得方法

YouTube自動投稿 API

こんにちは!
おでぃーです。

今回から、GASとYouTube Data APIを使用してYouTubeに動画を自動投稿する方法を解説していきます。

以前、同じような記事を公開したのですが、当時はサービスを使用していました。

しかし現在はそのやり方だと、アップロードには成功しても「非公開としてロック」ステータスとなってしまうことが判明しました。

そのため、今回からYouTube Data APIのGASサービスを使用せず、Oauth認証やエンドポイントを使用した方法で実装していきます!

第1回は、YouTube Data APIを使用するための、

  • Oauth2認証方法
  • 無期限リフレッシュトークンの取得方法
  • アクセストークンの取得方法

の解説です!

どれもGoogleサービスのAPIを使う上で必要な要素なので、YouTubeに関係がなくても参考にできる内容になるかと思います!

この記事を書いた人
おでぃー

GASを使った業務自動化に関するテクニックを発信。
本業ではプロダクト開発でエンジニアのディレクションをしながら、副業にてブログ運営やツール・スキルの販売を実施。
ネット広告運用経験からSNS領域の自動化に注力。

おでぃーをフォローする

スクリプト作成

まず、GASプロジェクト・スクリプトファイルを作成し、下記のソースコードをコピペします。

スクリプトファイルにもともと記載されているソースコードは削除してください。

const client_id = 'CLIENT_ID';
const client_secret = 'CLIENT_SECRET';

function getService(){

  return OAuth2.createService('youtube')
      .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
      .setTokenUrl('https://accounts.google.com/o/oauth2/token')
      .setClientId(client_id)
      .setClientSecret(client_secret)
      .setCallbackFunction('authCallback')
      .setPropertyStore(PropertiesService.getUserProperties())
      .setScope('https://www.googleapis.com/auth/youtube')
      .setParam('access_type', 'offline')
      .setParam('approval_prompt' ,'force')
      .setCache(CacheService.getUserCache());
}

// OAuth2認証のコールバック関数
function authCallback(request) {
  var service = getService();
  var isAuthorized = service.handleCallback(request);
  if (isAuthorized) {
    return HtmlService.createHtmlOutput('認証が完了しました。このウィンドウを閉じてください。');
  } else {
    return HtmlService.createHtmlOutput('認証に失敗しました。');
  }
}

// 認証を開始するための関数
function startOAuth2() {
  var service = getService();
  var authorizationUrl = service.getAuthorizationUrl();
  Logger.log('認証URL: ' + authorizationUrl);
}

// リフレッシュトークンを取得する関数
function getRefreshToken() {
  var service = getService();
  if (service.hasAccess()) {
    var refreshToken = service.getToken().refresh_token;
    Logger.log('リフレッシュトークン: ' + refreshToken);

    return refreshToken;
  } else {
    Logger.log('リフレッシュトークンがありません。');
    return null;
  }
}

// アクセストークンを取得する関数
function getAccessToken() {
  var refresh_token = getRefreshToken()
  var payload = {
    "client_id": client_id,
    "client_secret": client_secret,
    "refresh_token": refresh_token,
    "grant_type":"refresh_token"
  };
  
  var options = {
    method: "post",
    contentType: "application/x-www-form-urlencoded",
    payload: payload
  };
  
  var url = "https://oauth2.googleapis.com/token";
  var response = UrlFetchApp.fetch(url, options);
  var json = JSON.parse(response.getContentText());
  var access_token = json['access_token'];
  Logger.log(access_token);
  return access_token;
  
  // Do something with the access_token
}

GASプロジェクトの作成方法についてはこちらで詳しく解説しています。

GCP設定

プロジェクト作成

GCPにアクセスし、「プロジェクトを作成または選択」をクリック。

「新しいプロジェクト」をクリック。

好きなプロジェクト名をつけて作成。

YouTube Data APIの有効化

左上のドロップダウンで、作成したプロジェクトを選択し、「APIとサービス」をクリック。

「APIとサービスの有効化」をクリック。

検索欄にYouTubeといれ、ヒットした「YouTube Data API v3」をクリック。

「有効にする」をクリック。

OAuth同意画面の設定

左メニューから「OAuth同意画面」選択。
その後、OAuth同意画面のページになったら、User Type「外部」を選択し「作成」。

アプリ名:好きな名前を記載
ユーザーサポートメール:自分のメールアドレスを選択

下のほうへスクロールし、
メールアドレス:自分のメールアドレスを記入

その後、「保存して次へ」を選択。
※他の項目は空欄でOK。

スコープのページになりますが、そのまま「保存して次へ」。

テストユーザーのページになりますが、こちらもそのまま「保存して次へ」。

OAuth同意画面のトップに戻り、公開ステータスで「アプリを公開」を選択。

「確認」を選択。

公開ステータスが「本番環境」になっていることを確認できたらOK。

ちなみに「本番環境」にするステップを忘れると、リフレッシュトークンは無期限はなく有限になってしまいます。

認証情報の作成

左メニューから「認証情報」を選択。
認証情報のページになったら、「認証情報を作成」を選択。

「OAuthクライアントID」を選択。

アプリケーションの種類」:「ウェブアプリケーション」を選択し、
名前」:好きな名前を記入。

承認済みのリダイレクトURIで「URIを追加」を選択し、リダイレクトURIを記入。
リダイレクトURIには下記を記入してください。

https://script.google.com/macros/d/GASプロジェクトID/usercallback

GASプロジェクトIDは、先ほど開いたGASエディタのURLに含まれているIDを使用します。

https://script.google.com/u/0/home/projects/ここがGASプロジェクトID/edit

最後に「作成」を選択。

その後、作成したOAuthクライアントIDの名前を選択。

クライアントID、クライアントシークレットをそれぞれコピーしておきます。

GAS設定

APIキー設定

GASに戻ります。

最初に準備したスクリプトの1,2行目に、いまコピーしたクライアントIDとクライアントシークレットを記入します。

const client_id = 'CLIENT_ID';
const client_secret = 'CLIENT_SECRET';

Oauth2ライブラリ追加

GAS左にあるライブラリの横の「+」を選択し、出てきたダイアログに下記のスクリプトIDを入力し、追加します。

バージョンは最新、IDは「OAuth2」にしておいてください。

GASライブラリ追加

スクリプトID:1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF

ちなみにこれはOauth2認証用のGASライブラリです。

Oauth2ライブラリの公式ドキュメントはこちらです。

スクリプト実行

Oauth2認証

function 「startOAuth2」を実行します。

GASスクリプトの実行については、こちらの記事にて詳しく解説しています。

実行が成功すると、ログに認証用URLが表示されるので、それを別のブラウザタブで開き案内に沿って進めます。

「認証が完了しました。このウィンドウを閉じてください。」と表示がでれば認証完了です。

無期限リフレッシュトークン取得

function 「getRefreshToken」を実行します。

ログにリフレッシュトークンが表示されれば成功です!

アクセストークン取得

function 「getAccessToken」を実行します。

リフレッシュトークンと同じく、ログにアクセストークンが表示されれば成功です!

まとめ

今回は、GASとYouTube Data APIを使用して動画アップロードするためのOauth認証やトークン取得について解説しました。

第2回では、実際に動画をアップロードする処理のソースコードを紹介します。

ぜひご期待ください!

コメント