Формы Google - автозаполнение опроса с несколькими вариантами ответов

Я создал этот психологический опрос в форме Google. В нем около 20 вопросов с несколькими вариантами ответов, помимо обычного адреса электронной почты, имени и т. д. Таким образом, вы видите, что правильных/неправильных ответов как таковых нет.

Как подделать результаты или создать, скажем, 50 форм? Простите мое невежество, но будут ли результаты в электронной таблице Google? Должен ли я тогда просто заполнить 50 деталей в электронной таблице Google?


person esh    schedule 22.10.2014    source источник


Ответы (2)


@Mogsdad answer ссылается на решение на основе URL-адреса, в котором ваш скрипт понятия не имеет, какие ответы могут быть сделаны для данный вопрос (или сколько вопросов и т. д.), что может быть проблематичным в определенных случаях использования.

Вы можете программно создавать ответы для формы Google, используя службу форм, который позволяет вам случайным образом выбирать возможные ответы из доступных вариантов, среди прочего (например, ссылаясь на предопределенную библиотеку «письменных» ответов, например, для текстовых / абзацных ответов).

Пример, который предполагает, что у вас есть тест только с множественным выбором, с непостоянным количеством вариантов для каждого вопроса:

function foo() {
  const form = FormApp.openById("some form id");

  const randomSubs = [], nSubs = 50;
  while (randomSubs.length < nSubs)
    randomSubs.push(createRandomSubmission_(form).submit());

  // doAwesomeAnalysis(randomSubs); // etc.
}

// Constructs a random response for the given form, and returns it to the caller (e.g. for submission, etc).
function createRandomSubmission_(form) {
  const resp = form.createResponse();
  const questions = form.getItems().filter(isAnswerable_);
  questions.forEach(function (question) {
    var answer = getRandomAnswer_(question);
    resp.withItemResponse(answer);
  });
  return resp;
}

var iTypes = FormApp.ItemType;
function isAnswerable_(item, index, allItems) {
  const iType = item.getType();
  switch (iType) {
    case iTypes.MULTIPLE_CHOICE:
    case iTypes.CHECKBOX:
    /** add more type cases here as you implement the relevant answer generator */
      return true;
    default:
      return false;
  }
}

// Uses the item type to call the appropriate answer generator.
function getRandomAnswer_(q) {
  const qType = q.getType();
  switch (qType) {
    case iTypes.MULTIPLE_CHOICE:
      return getRandomMultipleChoiceAnswer_(q.asMultipleChoiceItem());
    /** add more type cases + handlers here as you implement the relevant answer generator */
    default:
      throw new TypeError("Answering questions of type '" + qType + "' is not yet implemented");
  }
}

// Uniformly samples possible choices (including the "other" option, if enabled).
// Returns the item's ItemResponse
function getRandomMultipleChoiceAnswer_(mcItem) {
  const choices = mcItem.getChoices();
  const i = Math.floor( Math.random() * (choices.length + mcItem.hasOtherOption()) );
  return mcItem.createResponse( (i < choices.length) ?
      choices[i] : getRandomMCOtherOption_(mcItem) 
  );
}
function getRandomMCOtherOption_(mcItem) {
  // This function will be highly dependent on your situation.
  // It's your choice how you identify the MC item to determine what an "other" option could
  // be for a given question. getTitle() and getIndex() may be useful too.
  switch (mcItem.getId()) { 
    default:
      throw new Error("Not Implemented Yet");
  }
}
person tehhowch    schedule 18.09.2018

Как подделать результаты или создать, скажем, 50 форм?

См. раздел Использование сценариев приложений для открытия формы и сделать выбор.

Простите мое невежество, но будут ли результаты в электронной таблице Google? Должен ли я тогда просто заполнить 50 деталей в электронной таблице Google?

Ответы будут записаны в двух местах; в самой форме (где вы можете просмотреть сводку ответов), а также в электронной таблице. Если вы намерены проверить процесс отправки ответов, вам следует имитировать отправку.

person Mogsdad    schedule 26.11.2014