Javascript: получите перенаправленную ссылку от функции Google «Мне повезет» - PullRequest
0 голосов
/ 16 декабря 2018

Мне нужно написать функцию Javascript, которая берет перенаправленную ссылку с кнопки Google «Мне повезет».

Функция должна принимать:

http://www.google.com/search?q="stackoverflow"&btnI

и возвращать:

https://stackoverflow.com

Я пробовал:

function getRedirect(url) {
  var response = UrlFetchApp.fetch(url, {'followRedirects': true, 'muteHttpExceptions': true});
  var redirectUrl = response.getHeaders()['Location']; // undefined if no redirect, so...
  var responseCode = response.getResponseCode();
  if (redirectUrl) {                                   // ...if redirected...
    var nextRedirectUrl = getRedirect(redirectUrl);    // ...it calls itself recursively...
    Logger.log(url + " is redirecting to " + redirectUrl + ". (" + responseCode + ")");
    return nextRedirectUrl;
  }
  else {                                               // ...until it's not
    Logger.log(url + " is canonical. (" + responseCode + ")");
    return url;
  }
}

Но это не работает, поскольку он обрабатывает только перенаправления http.Полагаю, Google чувствует, что мне повезло, кнопка работает по-другому.

1 Ответ

0 голосов
/ 17 декабря 2018

Если мое понимание верно, как насчет этой модификации?

Точки модификации:

  • В этом случае, пожалуйста, используйте followRedirects: false.
  • Вы можете получить URL как из заголовка, так и из тела ответа.

Измененный сценарий:

var url = 'http://www.google.com/search?q=%22stackoverflow%22&btnI';
var response = UrlFetchApp.fetch(url, {'followRedirects': false, 'muteHttpExceptions': true});
var redirectUrl = response.getHeaders()['Location'];
Logger.log(redirectUrl) // https://stackoverflow.com

Также вы можете получить URL следующим образом.

var redirectUrl = response.getContentText().match(/HREF=\"(\w.+)\"/)[1];
Logger.log(redirectUrl) // https://stackoverflow.com

Примечание:

Ссылка:

Если я не правильно понял ваш вопрос, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...