Я пытаюсь создать лист Google, который интегрируется с API данных и аналитики YouTube. Однако при попытке реализовать это я столкнулся с известной проблемой, связанной с возможностью аутентификации учетных записей/каналов брендов YouTube с помощью приложения Google, что объясняется здесь. https://issuetracker.google.com/issues/36764531
Чтобы обойти это, в документе упоминаются инструкции по этой ссылке, которые я сейчас пытаюсь реализовать самостоятельно https://mashe.hawksey.info/2017/09/identity-crisis-using-the-youtube-api-with- google-apps-script-and-scheduling-live-трансляции-из-google-листов/
Из инструкции у меня:
Однако в первой ссылке также был добавлен комментарий о том, что хотя инструкции все еще работают, проект сценария теперь должен быть связан с облачным проектом, что я и сделал. В рамках этого он создал свой собственный идентификатор клиента OAuth 2.0, который, я полагаю, теперь использует, а не учетные данные, которые я уже создал сам. Я добавил изображение ниже, чтобы проиллюстрировать, что я имею в виду. Я также не могу редактировать эти новые учетные данные, что означает, что я не могу добавить какой-либо URI перенаправления.
Есть ли способ добавить URI перенаправления к автоматически сгенерированным учетным данным? Теперь проблема заключается в том, что если я затем запускаю функцию настройки из сценария в соответствии с инструкциями, когда я затем пытаюсь открыть эту ссылку, которую она мне дает, я получаю следующее сообщение
Ошибка 400: redirect_uri_mismatch
/**
* Authorizes and makes a request to the YouTube Data API.
*/
function setup() {
var service = getYouTubeService();
YouTube.setTokenService(function(){ return service.getAccessToken(); });
if (service.hasAccess()) {
var result = YouTube.channelsList("snippet", {mine:true});
Logger.log(JSON.stringify(result, null, 2));
throw "Open View > Logs to see result";
} else {
var authorizationUrl = service.getAuthorizationUrl();
Logger.log('Open the following URL and re-run the script: %s',
authorizationUrl);
throw "Open View > Logs to get authentication url";
}
}
/**
* Configures the service.
*/
function getYouTubeService() {
return OAuth2.createService('YouTube')
// Set the endpoint URLs.
.setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
// Set the client ID and secret.
.setClientId(getStaticScriptProperty_('client_id'))
.setClientSecret(getStaticScriptProperty_('client_secret'))
// Set the name of the callback function that should be invoked to complete
// the OAuth flow.
.setCallbackFunction('authCallback')
// Set the property store where authorized tokens should be persisted
// you might want to switch to Script Properties if sharing access
.setPropertyStore(PropertiesService.getUserProperties())
// Set the scope and additional Google-specific parameters.
.setScope(["https://www.googleapis.com/auth/youtube",
"https://www.googleapis.com/auth/youtube.force-ssl",
"https://www.googleapis.com/auth/youtube.readonly",
"https://www.googleapis.com/auth/youtubepartner",
"https://www.googleapis.com/auth/youtubepartner-channel-audit"])
.setParam('access_type', 'offline');
}
/**
* Handles the OAuth callback.
*/
function authCallback(request) {
var service = getYouTubeService();
var authorized = service.handleCallback(request);
if (authorized) {
return HtmlService.createHtmlOutput('Success!');
} else {
return HtmlService.createHtmlOutput('Denied');
}
}
/**
* Logs the redirect URI to register in the Google Developers Console.
*/
function logRedirectUri() {
var service = getYouTubeService();
Logger.log(service.getRedirectUri());
throw "Open View > Logs to get redirect url";
}
/**
* Reset the authorization state, so that it can be re-tested.
*/
function reset() {
var service = getYouTubeService();
service.reset();
}
/**
* Gets a static script property, using long term caching.
* @param {string} key The property key.
* @returns {string} The property value.
*/
function getStaticScriptProperty_(key) {
var value = CacheService.getScriptCache().get(key);
if (!value) {
value = PropertiesService.getScriptProperties().getProperty(key);
CacheService.getScriptCache().put(key, value, 21600);
}
return value;
}
Я надеюсь, что это ясно, но если нет, то я могу ответить на любые дополнительные вопросы. Или, если есть лучший способ аутентификации фирменной учетной записи YouTube с помощью API, сообщите мне об этом.
Да, поэтому, когда я связываю свой скрипт Google Apps с моим проектом Google Cloud Platform, я говорю, что затем он автоматически генерирует идентификатор клиента OAuth 2.0 (тот, который называется Apps Script на рисунке выше). Однако затем появляется желтый восклицательный знак, который сообщает мне, что я не могу редактировать эти учетные данные, что означает, что я не могу добавить какой-либо URI перенаправления. Теперь ясно?
Спасибо за ответ. Из вашего ответа я понял об этом. В таком случае можете ли вы добавить новые учетные данные и протестировать их снова?
Большое спасибо. Попробовали еще раз, и теперь, кажется, это работает. @Tanaike, есть ли причина, по которой это теперь сработает?
Спасибо за ответ. Когда вы добавили новые учетные данные, я думаю, что это можно использовать для вашей ситуации. Я думаю, что учетные данные по умолчанию используются для авторизации с помощью скрипта Google Apps. При этом URL-адрес перенаправления не может быть изменен.
В конце концов мне пришлось сделать новые учетные данные в консоли. Как только я сделал это и связал его со сценарием, он, похоже, работал, как и ожидалось.
У меня также возникла эта проблема, и я думаю, что в настоящее время невозможно добавить URI перенаправления при автоматическом создании ClientID через API, поскольку для редактирования доступны только поля «displayName», «name» и «secret» ( ссылка: cloud.google.com/iap/docs/reference/rest/v1/…).
Я не могу понять насчёт
add the redirect URI to the automatically generated credentials
. Прошу прощения за это. Могу я спросить вас об этом?