Есть ли способ получить все места перенаправления из данного сценария XML/HTML в Google Apps?Javascript

Форум по Javascript
Ответить
Anonymous
 Есть ли способ получить все места перенаправления из данного сценария XML/HTML в Google Apps?

Сообщение Anonymous »

У меня есть лист 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»