2010-01-24 143 views
10

我正在尝试创建一个书签,解析一个页面并通过我定义的表单将结果发送到一个googledocs电子表格。脚本编写谷歌文档表单提交

脚本的培训相关位:

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); 

//返回:

没有被通过书签保存到形式 - 任何方式获取谷歌在我的书签代码回应? (FWIW,我已经通过jQueryify注入的jQuery)

编辑:

Firebug的网络面板未听到任何由书签触发的活动 - 如何我走近这个从goolgle的viewform方法,而不是formresponse

形式我试图提交位于:

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

我怎么能去注入脚本值成表格,然后提交一个 - 内通过脚本再次...小书签在页面被解析时会被触发?

+0

要与Firefox,使用的libcurl解决405问题。应该可以在Php和Python中这样做。 – razorsniper 2010-08-25 01:08:13

+0

有用的链接:http://eureka.ykyuen.info/2014/07/30/submit-google-forms-by-curl-command/ – 2015-03-31 00:01:50

回答

7

如果您已经使用jquery,请尝试通过ajax($ .ajax)提交表单。你可以设置一个成功的功能,当谷歌发回他们的回应时会被调用。

或者您应该可以使用萤火虫查看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); 
    }, 
}) 
+0

Thankx很多为增加的细节...我已经尝试了几个变化你的代码 - 无论出于何种原因 - “控制台未定义”所以我只是扔东西给一个警告框: 也许这屏幕帽将帮助: http://screencast.com/t/ZDZhNDVmM 再次... thx的帮助 – justSteve 2010-01-25 03:53:46

+1

你可能现在想通了,但控制台是独特的萤火虫插件。 – buckley 2010-01-25 15:37:14

+1

console.log()也可用于Chrome – dvb 2011-05-30 21:06:45

0

我想我有几个花絮添加到这一点,但他们变成无法解决的问题。

  • 肯定使用输入“姓名”(未标识)
  • 其他参数之一是“IFQ”,不知道它是如何工作与“formkey”捆绑这个(字符串只是一个字符串,对吗?)
  • 要完全模仿Google表单,添加这些附加字段:pageNumber = 0; backupCache = '';提交=提交

我得到同样的“405不允许的方法”,虽然错误...

1

我没有一个完整的答案,但我已经能够使其工作使用curl:

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

此外,我能够通过使用原型的Ajax工作,但只能用于Safari。

我也是一样的405方法不允许在Firefox中使用。这里是我的脚本:

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。

4

我刚刚做了这样的事情。这是我的过程的一个细分。

我需要保留来自不同网页的引用列表,并为每个引用添加一些信息。

我的书签将动态产生一个谷歌的形式(我刚刚看到我已经创建了真正的谷歌表单的源代码),它会自动填充当前的URL,网页标题,和当前选中的文字相比,表格将提交

由于我需要手动添加信息,我故意没有至少包含一个必填字段,因此我收到带有错误消息的Google表单(但是网址为标题&的报价已填充)。现在我可以手动添加我需要的所有其他信息并提交表单。

如果小书签填写所有必填字段,您只会收到谷歌表格成功响应“谢谢!您的回复已记录。”

我用下面的站点生成使用jQuery一个书签: http://benalman.com/code/test/jquery-run-code-bookmarklet/ (我使用jQuery能够放弃额外的信息从网页内容&)

为了能够使用该网站正常,你将不得不逃避你一个班轮 HTML(你可以使用这个escape tool

所需的步骤是:

  1. 创建一个谷歌的形式/电子表格
  2. 查看表单的源代码,并复制你想要的书签,以填补
  3. 让您远离html和使用this写你的脚本,填补了信息领域,本网站将创建你

所以在我的情况书签:

我创建了一个表格,其中包括一个文本字段来保存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 - 报价)

把它在一个行之后和逃避它。我已使用以下脚本:

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() 

此方法已使用chrome进行了测试。 祝你好运!

+0

谢谢!!!!太棒了! – xun 2011-06-28 23:25:15

4

对于将来的任何人,请确保您发布的URL有& ifq在最后,我发现这很容易地解决了大部分405回报的问题。

2

截至今日,我无法得到标示正确工作的答案。我相信谷歌已经改变了一些东西。

我能得到它做一个HTTP POST表单数据作为entry.645136839=<somevalue>其中从表单域取得了较大数量的工作https://docs.google.com/forms/d/<form_id>/formResponse

0

从你的示例代码 - 我已经改变了几件事情 - 首先表单提交结束点/没有& ifq需要。 Google可能已更新了一些内容。查看表单的来源并使用表单操作网址。第二&批判地说,你的表单输入类型不包括id(除了第一个)。有了这些东西 - 表格成功发布。

enter image description here

<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>