Как получить один URL, который отправляет один из трех URL Google Forms? - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно получить равные группы населения в каждом из трех опросов.Три опроса идентичны, за исключением одного изменения - оно содержит разные картинки.

Я хотел бы раздать один URL-адрес респондентам опроса.

Я хотел бы подсчитать количество предыдущих ответовУ меня есть, и добавить один.Я хотел бы перенаправить сеанс на один из трех (Google Forms) URL-адресов на основе расчета

(Responses.Count + 1) MOD 3 .

Я думаю, мне нужен скрипт Google Apps для этого?

Вот какой-то псевдокод:

var form0 = FormApp.openByUrl( 
   'htttps://docs.google.com/forms/d/e/2342f23f1mg/viewform' 
);

var form1 = FormApp.openByUrl( 
   'htttps://docs.google.com/forms/d/e/23422333g/viewform' 
);

var form2 = FormApp.openByUrl( 
   'htttps://docs.google.com/forms/d/e/2342wfeijqeovig/viewform' 
);

var form0Responses = form0.getResponses();
var form1Responses = form1.getResponses();
var form2Responses = form2.getResponses();

var whichURL = (
   form0Responses.length +
   form1Responses.length +
   form2Responses.length + 1
  ) % 3;                     // modulo three

// var goToForm =  switch ( whichURL ) blah blah;
// redirect to goToForm;
// How do I redirect now?

Спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Возможно, возможно более простое решение, но я не думаю, что знаю об этом:)

Общая ссылка, которую вы выдаете, может быть ссылкой на "прокси" страницу, которая ничего не содержитно просто перенаправляет пользователей на правильную страницу.Или это может быть ссылка на реальную страницу с необходимой формой.Давайте рассмотрим варианты.

0) Опубликуйте свой код как веб-приложение

В любом случае вам нужно будет опубликовать свой код в виде веб-приложения.В GAS это намного проще, чем кажется, вы найдете всю информацию здесь: https://developers.google.com/apps-script/guides/web

Убедитесь, что вы установили, что Anyone, even anonymous может обращаться к приложению, и оно всегда работает как вы (если вы выберете User accessing the app, им придется пройти через процесс аутентификации, который вам здесь не нужен).

1) Перенаправление через веб-приложение GAS.

Ваш код вэтот случай будет выглядеть так:

// I changed your function a bit so that it could be easier to work with 
// in case the number of your forms changes later on
function getForm() {

  var forms = [
    {
      // I'm using openById instead of openByUrl 'cause I've run into issues with 
      // the latter
      form: FormApp.openById('1')
    },
    {
      form: FormApp.openById('2')
    },
    {
      form: FormApp.openById('3')
    }    
  ];

  var whichURL = 0;
  for (var i in forms) {
    forms[i].responses = forms[i].form.getResponses().length; 
    whichURL += forms[i].responses;
  }
  whichURL++;

  // we're returning the actual URL to which we should redirect the visitors
  return forms[whichURL % forms.length].form.getPublishedUrl();
}

// doGet is Google's reserved name for functions that 
// take care of http get requests to your web app
function doGet() {
  // we're creating an html template from which getForm function is called
  // as the template is evaluated, the returned result 
  // of the function is inserted into it
  // window.open function is a client-side function 
  // that will open the URL passed to it as attribute
  return HtmlService.createTemplate('<script>window.open("<?= getForm() ?>", "_top");</script>').evaluate();
}

Итак, после публикации вашего приложения вы получите ссылку открытия, по которой будет работать функция doGet - и вы будете перенаправленык вашей форме.

Дело в том, что URL, который вы получаете таким образом, не очень красивый, например, https://script.google.com/macros/s/1234567890abcdefghijklmnopqrstuvwxyz/exec, и он также покажет сообщение в верхней части страницы.«Приложение не было разработано Google» в течение этих 1-2 секунд до того, как произойдет перенаправление.

2) Вставьте вашу форму на другую веб-страницу

Идея в том, чтоиначе: вместо того, чтобы давать вашим пользователям ссылку «прокси», вы предоставите им страницу, которая будетпопросите скрипт Google найти правильную ссылку на форму и отобразит эту форму на странице в iframe.

Итак, есть несколько шагов:

2.1) Измените свою функцию doGet (getForm останется прежней):

function doGet() {
  return ContentService.createTextOutput(getForm());
}

В этом случае doGet не вернет HTML-код, отображаемый браузером, а просто ссылку на вашу форму.

Sidenote: после изменения кода вам нужно будет опубликовать новую версию кода, чтобы изменения вступили в силу.

2.2) Создатьсайт Google по адресу sites.google.com

2.3) Вставьте на свою страницу блок «Встроить» со следующим кодом:

<script>
function reqListener(response) {
  // change height and width as needed
  document.body.insertAdjacentHTML('beforeend', '<iframe src="' + response.target.response + '" width="400" height="400"></iframe>'); 
}
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", reqListener);
oReq.open("GET", "INSERT-YOUR-SCRIPT-URL");
oReq.send();
</script>

Что он делаетКод javascript отправляет запрос http в ваш сценарий, получает URL-адрес формы и передает его в функцию обратного вызова reqListener, которая, в свою очередь, вставляет его в тело документа в элементе iframe.

ХорошийДело в том, что ваш URL будет гораздо более удобным для пользователя (вы можете использовать этот подход самостоятельноe тоже).

В результате у вас будет что-то вроде этого: enter image description here

...