У меня есть лист Google, где есть функция сценария приложений под названием get_redirect_url (), и он не работает должным образом. Есть ли способ исправить это? Например, в URL блога VSCODE есть перенаправление Meta обновления, и функция не может ее извлечь, бросая эту ошибку:
ошибка: referenceerr: url не определен. Также некоторые другие URL-адреса либо бросают другую ошибку, либо не могут принести.
Visual Studio Code Blogs
< /code>
Это мой сценарий приложений: < /p>
/**
* Returns the redirect location of a url.
*
* @param {string} input The source URL being redirected.
* @return The destination location/URL.
* @customfunction
*/
function GET_REDIRECT_LOCATION(input) {
// Basic validation
if (!input) return "INVALID_URL";
let url = input.toString().trim();
if (!url || !url.includes(".")) return "INVALID_URL";
// Add https if no protocol
if (!url.startsWith("http")) {
url = "https://" + url;
}
try {
// First try with followRedirects: false to catch HTTP redirects
let response = UrlFetchApp.fetch(url, {
muteHttpExceptions: true,
followRedirects: false
});
let status = response.getResponseCode();
// Check for HTTP redirect (3xx status codes)
if (status >= 300 && status < 400) {
const headers = response.getAllHeaders();
const location = headers.Location || headers.location;
if (location) {
return location;
}
}
// Get the HTML content to check for meta redirects
const content = response.getContentText();
// Check for meta refresh redirect
const metaRefresh = content.match(/content=["']?\d+;\s*url=([^"'\s>]+)["']?/i);
if (metaRefresh && metaRefresh[1]) {
let redirectUrl = metaRefresh[1];
// Handle relative URLs - make them absolute
if (redirectUrl.startsWith('/')) {
const baseUrl = new URL(url);
redirectUrl = baseUrl.protocol + '//' + baseUrl.host + redirectUrl;
}
return redirectUrl;
}
// Check for canonical URL as backup
const canonical = content.match(/]*rel=["']canonical["'][^>]*href=["']([^"']+)["']/i);
if (canonical && canonical[1]) {
let canonicalUrl = canonical[1];
// Handle relative URLs
if (canonicalUrl.startsWith('/')) {
const baseUrl = new URL(url);
canonicalUrl = baseUrl.protocol + '//' + baseUrl.host + canonicalUrl;
}
if (canonicalUrl !== url) {
return canonicalUrl;
}
}
return "NO_REDIRECTS_FOUND";
} catch (error) {
return "ERROR: " + error.toString();
}
}
< /code>
Даже после попытки обработать этот крайний случай, он все равно не будет работать. У кого -нибудь есть решения?>
Подробнее здесь: https://stackoverflow.com/questions/797 ... google-app