0

スクリプト IT のこのエピソードから変更された Youtube アナリティクス スプレッドシートがあります。

http://www.youtube.com/watch?v=VVhsK5jH6u8

スプレッドシートが永続的にアクセスできるように、アクセス トークンの代わりに更新トークンを保存する方法はありますか? OAuth Playground からリフレッシュ トークンを取得しましたが、アクセス トークンをリフレッシュ トークンに置き換えるだけでは機能しないようです。多くの人がこのスプレッドシートを使用しているため、1 時間ごとの認証はできれば避けたいと考えています。

ありがとう!

4

1 に答える 1

1

こちらのコード サンプルをご覧ください - https://github.com/entaq/GoogleAppsScript/blob/master/IO2013/YouTubeAnalytics/oauth2.gs

有効期限が切れたときにトークンを自動更新するように OAuth ライブラリを改善しました。この方法は非常にスケーラブルであり、「ブートストラップ」して何かを保存する必要はありません。

重要なビット -

function attemptTokenRefresh_() {
  var refreshToken = UserProperties.getProperty(refreshTokenPropertyName);
  if (!refreshToken) {
    Logger.log('No refresh token available to refresh with ' + tokenKey);
    return false;
  }
  var requestData = {
    method: 'post',
    payload: {
      client_id: CLIENT_ID,
      client_secret: CLIENT_SECRET,
      refresh_token: refreshToken,
      grant_type: 'refresh_token'
    }
  };
  Logger.log('Attempting token refresh');
  var response = UrlFetchApp.fetch(TOKEN_URL, requestData).getContentText();
  storeOAuthValues_(response);
  return true;
}

function storeOAuthValues_(response){
  var tokenResponse = JSON.parse(response);

  var accessToken = tokenResponse.access_token;
  // expires_in is in seconds and Date.now is ms
  var endMs = Date.now() + tokenResponse.expires_in * 1000;
  var refreshToken = tokenResponse.refresh_token;


  //store the token for later retrival
  UserProperties.setProperty(oauthTokenPropertyName, accessToken);
  if (refreshToken) { //on a refresh call we wont get a new refresh token, lets not wipe prev one out
    UserProperties.setProperty(refreshTokenPropertyName, refreshToken);
  }
  UserProperties.setProperty(oauthTokenExpiresPropertyName, endMs);
}
于 2013-10-08T14:48:42.317 に答える