Сценарий отправки формы документов google

Я пытаюсь создать букмарклет, который анализирует страницу и отправляет результаты в таблицу googledocs через форму, которую я определил.

Уместным битом script является:

var form = document.createElement("form");

form.action = "http://spreadsheets.google.com/formResponse?formkey=Fd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA&ifq";
form.method = "POST";
form.id="ss-form";
form.innerHTML = ["<input id='entry_0' name = 'entry.0.single' value = '" + orderDate + "'/>", "<input name = 'entry.2.single' value = '" + email + "'/>", "<input name = 'entry.3.single' value = '" + customerID + "'/>", ].join("");
form.submit();


alert(form.innerHTML);

//возвращает:

Ничего не сохраняется в форме через букмарклет - каким-либо образом можно зафиксировать ответ Google в моем коде букмарклета? (fwiw, я ввел jQuery через jQueryify)

EDIT:

Панель Firebug Net не слышит активность, вызванную букмарклетным записями. Как я подхожу к этому из метода viewle view, а не formresponse.

Форма, которую я пытаюсь отправить, находится по адресу:

http://spreadsheets.google.com/viewform?hl=en&formkey=dFd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA

Как я могу ввести значения script в эту форму и затем передать это - снова... через script в букмарклет, который был бы запущен на странице, которая была проанализирована?

Ответ 1

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

В качестве альтернативы вы должны иметь возможность использовать firebug для просмотра ответа, отправленного Google.

В частности, я думал, что вы можете попробовать что-то вроде следующего:

$.ajax({
  url: "http://spreadsheets.google.com/formResponse",
  data: { formkey: "Fd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA&ifq", "entry.0.single": orderDate, "entry.2.single": email, "entry.3.single": customerID },
  type: "POST",
  dataType: "xml",
  success: function(data, textStatus, XMLHttpRequest) {
    console.log("success");
    console.log(data);
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    console.log("error");
    console.log(textStatus);
  },
})

Ответ 2

Я только что сделал такое. Здесь разбивается мой процесс.

Мне нужно сохранить список котировок с разных веб-страниц и добавить некоторую информацию в каждую цитату.

Мой букмарклет будет динамически создать форму google (я только что просмотрел источник реальной формы google, которую я уже создал), она будет автоматически заполняться > текущий url, заголовок страницы и текущий выбранный текст, чем форма будет отправлена ​​.

Поскольку мне нужно вручную добавить информацию, я намеренно не включил хотя бы одно обязательное поле, поэтому я получаю форму google с сообщением об ошибке (но с уже заполненным URL-адресом, заголовком и цитатой). Теперь я могу вручную добавить всю другую информацию, которая мне нужна, и отправить форму.

Если букмарклет заполняет все необходимые поля, вы получите только ответ на запрос формы Google: "Спасибо! Ваш ответ был записан".

Я использовал следующий сайт для создания букмарклета, использующего jQuery: http://benalman.com/code/test/jquery-run-code-bookmarklet/ (Я использую jQuery, чтобы иметь возможность откладывать дополнительную информацию и контент с веб-страницы)

Чтобы иметь возможность правильно использовать этот сайт, вам придется скрывать ваш однострочный html (вы можете использовать этот escape tool)

Требуемые шаги:

  • Создайте форму/таблицы google
  • Просмотрите источник формы и скопируйте поля, которые хотите, чтобы букмарклет заполнил
  • Сбросьте свой html и используйте this, чтобы написать свой script, который заполнит информацию, этот сайт создаст вам букмарклет

Итак, в моем случае:

1. Я создал форму, которая включает одно текстовое поле для хранения URL-адреса, другое текстовое поле для хранения названия страницы, текст абзаца для удержания цитаты (выделенный текст). Форма также включает некоторые другие обязательные поля, которые я заполняю вручную.

2. Я подготовил следующий html:

    <form method="POST"
        action="https://spreadsheets.google.com/spreadsheet/formResponse?formkey=XYZXYZXYZXYZXYZXYZXYZ&amp;ifq">
    <input type="text" name="entry.0.single" value="" id="entry_0" />
    <input type="text" name="entry.3.single" value="" id="entry_3" />
    <textarea name="entry.2.single" id="entry_2"></textarea>
    <input type="submit" name="submit" value="submit" />
    </form>

(entry_0 - url, entry_3 - название страницы, entry_2 - quote)

3. Поместив его в одну строку и выйдя из него. Я использовал следующий script:

frm = $(unescape('%3Cform%20action%3D%22https%3A//spreadsheets.google.com/spreadsheet/formResponse%3Fformkey%3DXYZXYZXYZXYZXYZXYZXYZ%26amp%3Bifq%22%20method%3D%22POST%22%3E%0A%3Cinput%20type%3D%22text%22%20name%3D%22entry.0.single%22%20value%3D%22%22%20id%3D%22entry_0%22%20/%3E%0A%3Cinput%20type%3D%22text%22%20name%3D%22entry.3.single%22%20value%3D%22%22%20id%3D%22entry_3%22%20/%3E%0A%3Ctextarea%20name%3D%22entry.2.single%22%20id%3D%22entry_2%22%3E%3C/textarea%3E%0A%3Cinput%20type%3D%22submit%22%20name%3D%22submit%22%20value%3D%22submit%22%20/%3E%0A%3C/form%3E'));
$(frm).children('#entry_0').attr('value',location.href);
$(frm).children('#entry_3').attr('value',$('title')[0].innerHTML);
$(frm).children('#entry_2').html(window.getSelection().toString());
$(frm).children('input[type=submit]').click()

Этот метод был протестирован с хромом. Удачи!

Ответ 3

Для всех в будущем убедитесь, что URL-адрес, который вы отправляете, имеет & ifq в конце, я обнаружил, что это легко устранило большинство моих проблем с 405 результатами.

Ответ 4

На сегодняшний день я не мог получить ответ, помеченный как право на работу. Я считаю, Google изменил несколько вещей.

Я мог бы заставить его работать, выполнив HTTP POST на https://docs.google.com/forms/d/<form_id>/formResponse

с данными формы как entry.645136839=<somevalue>, где большое число получено из поля формы.

Ответ 5

У меня нет полного ответа, но я смог заставить его работать с помощью Curl:

curl http://spreadsheets.google.com/formResponse?formkey=dFpVLTVFY2t5dWdoNTZpNERwWDRxX2c6MQ&ifq --data entry.0.single=eric --data entry.1.single=pugh

Кроме того, я могу заставить его работать через Ajax с использованием прототипа, но ТОЛЬКО на Safari.

Я тоже получаю тот же 405-метод, который не разрешен в Firefox. Вот мой script:

function vote_for_synonym(word1, word2){
word1 = encodeURIComponent(word1);
word2 = encodeURIComponent(word2);

$req = new Ajax.Request("http://spreadsheets.google.com/formResponse?formkey=dFpVLTVFY2t5dWdoNTZpNERwWDRxX2c6MQ", {
  method: 'post',
  contentType: 'application/x-www-form-urlencoded',
  onCreate: function(){
   Element.show('systemWorking');
  },
  onSuccess: function() {
    Element.show('thanks');
    Element.hide('systemWorking')
  },
  onFailure: function() {
    Element.show('error');
  }
});           

}

Кроме того, мой onFailure никогда не вызывается, просто onSuccess.

Ответ 6

Я думал, что у меня есть несколько лакомых кусочков, чтобы добавить к этому, но они не решат проблему.

  • определенно используйте ввод 'name' (not id)
  • один из других параметров - "ifq", не уверен, как он работает, чтобы связать это с "formkey" (строка - это просто строка, не так ли?)
  • чтобы полностью издеваться над формой Google, добавьте дополнительные поля: pageNumber = 0; backupCache = ''; представить = Submit

Я получаю ту же ошибку "405 Method not allowed", хотя...

Ответ 7

Из вашего образца кода - я изменил пару вещей - во-первых, конечная точка представления формы /no & ifq. Google, вероятно, обновил все. Просмотрите источник своей формы и используйте URL-адрес формы. во-вторых, критически типы ввода формы не включали идентификаторы (кроме первого). С этими вещами - форма отправлена ​​успешно.

введите описание изображения здесь

<html>
<body>
<script type="text/javascript">
var form = document.createElement("form");

form.action = "https://docs.google.com/a/yourdomain.com/forms/d/XXXXXXXXXXXXXXXXXXXX/formResponse";
form.method = "POST";
form.id="ss-form";
var repo = "https://github.com/fredericcormier/WesternMusicElements";
var branch = "master";
var email = "";

form.innerHTML = ["<input id='entry_639106242' name = 'entry.639106242' value = '" + repo + "'/>","<input id='entry_1546762025' name = 'entry.1546762025' value = '" + branch + "'/>","<input id='entry_1509161732' name = 'entry.1509161732' value = '" + email + "'/>", ].join("");
form.submit();

alert(form.innerHTML);

</script>

</body>
</html>