Сценарий отправки формы документов 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&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>