2010-01-24 21 views
10

स्क्रिप्टिंग मैं एक बुकमार्कलेट बनाने की कोशिश कर रहा हूं जो एक पृष्ठ को पार करता है और परिणामों को एक फ़ॉर्म के माध्यम से एक गूगलेक्स स्प्रेडशीट में भेजता है जिसे मैंने परिभाषित किया है।एक Google डॉक्स फॉर्म सबमिशन

स्क्रिप्ट के प्रासंगिक सा है:

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

फ़ायरफ़ॉक्स, उपयोग libcurl साथ 405 समस्या को हल करने। PHP और पायथन में ऐसा करने में सक्षम होना चाहिए। – razorsniper

+0

उपयोगी लिंक: http://eureka.ykyuen.info/2014/07/30/submit-google-forms-by-curl-command/ –

उत्तर

7

यदि आप पहले से ही jquery का उपयोग कर रहे हैं, तो AJAX ($ .ajax) के माध्यम से फ़ॉर्म सबमिट करने का प्रयास करें। आप एक सफल फ़ंक्शन सेट कर सकते हैं जिसे Google ने उनकी प्रतिक्रिया वापस भेजते समय बुलाया जाएगा।

वैकल्पिक रूप से आप प्रतिक्रिया भेजकर 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

अतिरिक्त विस्तार के लिए धन्यवाद ... मैंने कुछ बदलावों की कोशिश की है अपने कोड - जो भी कारण के लिए - 'सांत्वना अपरिभाषित है' तो मैं सिर्फ एक चेतावनी बॉक्स करने के लिए सामान घालना हूँ: शायद यह स्क्रीन टोपी में मदद मिलेगी: http://screencast.com/t/ZDZhNDVmM फिर ... मदद के लिए thx – justSteve

+1

आपने शायद इसे अभी तक समझ लिया है, लेकिन कंसोल फ़ायरबग प्लगइन के लिए अद्वितीय है। – buckley

+1

console.log() क्रोम – dvb

0

मैंने सोचा कि मैं इस में जोड़ने के लिए कुछ छोटी-मोटी बातें की थी, लेकिन वे बाहर बारी करने नहीं समस्या का समाधान।

  • निश्चित रूप से इनपुट 'नाम' (नहीं आईडी)
  • अन्य मापदंडों में से एक 'ifq' है, यकीन नहीं है कि यह कैसे 'formkey' के साथ इस बंडल करने से काम करता है का उपयोग करें (एक स्ट्रिंग सिर्फ एक स्ट्रिंग है, सही?)
  • पूरी तरह से Google फॉर्म का नकल करने के लिए, इन अतिरिक्त फ़ील्ड को जोड़ें: pageNumber = 0; backupCache = ''; प्रस्तुत = सबमिट करें

मैं एक ही मिलता है '405 पद्धति की अनुमति नहीं' त्रुटि हालांकि ...

1

मैं एक पूरा जवाब नहीं है, लेकिन मैं इसे कर्ल का उपयोग कर काम करने के लिए सक्षम किया गया है:

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

इसके अलावा, मैं प्रोटोटाइप का उपयोग करके अजाक्स के माध्यम से काम कर सकता हूं, लेकिन केवल सफारी पर।

मुझे भी फ़ायरफ़ॉक्स में एक ही 405 विधि की अनुमति नहीं है।यहाँ मेरी स्क्रिप्ट है:

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

मैंने अभी ऐसी चीज बनाई है। यहां मेरी प्रक्रिया का एक ब्रेक डाउन है।

मुझे विभिन्न वेब पृष्ठों से उद्धरणों की एक सूची रखने और प्रत्येक उद्धरण में कुछ जानकारी जोड़ने की आवश्यकता है।

मेरे बुकमार्कलेट गतिशील एक गूगल प्रपत्र उत्पन्न होगा (मैं सिर्फ इतना है कि मैं पहले से बनाए गए वास्तविक गूगल प्रपत्र के स्रोत देखा है), यह स्वचालित रूप से वर्तमान यूआरएल भर देंगे, पृष्ठ शीर्षक, और से वर्तमान में चयनित टेक्स्ट सबमिट किया जाएगा।

चूंकि मुझे मैन्युअल रूप से जानकारी जोड़ने की आवश्यकता है, इसलिए मुझे जानबूझकर कम से कम एक आवश्यक फ़ील्ड शामिल नहीं किया गया है, इसलिए मुझे एक त्रुटि संदेश के साथ Google फॉर्म प्राप्त होता है (लेकिन यूआरएल के साथ, शीर्षक & उद्धरण पहले से भर चुका है)। अब मैं मैन्युअल रूप से अन्य सभी जानकारी जोड़ सकता हूं जो मुझे चाहिए और फॉर्म जमा करें।

यदि बुकमार्कलेट सभी आवश्यक फ़ील्ड भरता है तो आपको केवल Google फॉर्म सफलता प्रतिक्रिया प्राप्त होगी "धन्यवाद! आपकी प्रतिक्रिया दर्ज की गई है।"

मैं निम्नलिखित साइट का उपयोग किया है एक बुकमार्कलेट कि jQuery का उपयोग उत्पन्न करने के लिए: http://benalman.com/code/test/jquery-run-code-bookmarklet/ (मैं jQuery का उपयोग कर रहा अतिरिक्त जानकारी वेबपेज से & सामग्री स्क्रैप करने के लिए सक्षम होने के लिए)

उपयोग करने के लिए सक्षम होने के लिए कि साइट सही, आप अपने एक लाइनर एचटीएमएल से बचने के लिए होगा (आप उपयोग कर सकते हैं इस escape tool)

आवश्यक कदम हैं:

  1. प्रपत्र का स्रोत एक Google फ़ॉर्म बनाएं/स्प्रेडशीट
  2. देखें और क्षेत्रों आप बुकमार्कलेट
  3. अपने html एस्केप भरने और अपनी स्क्रिप्ट है कि जानकारी को भरने लिखने के this उपयोग करना चाहते हैं कॉपी, इस साइट का निर्माण करेगा बुकमार्कलेट के लिए आप
मेरे मामले में

तो:

1. मैं एक रूप है कि एक पाठ क्षेत्र में शामिल uRL रखने के लिए बनाने के बाद, एक और पाठ क्षेत्र पृष्ठ के शीर्षक धारण करने के लिए, एक उद्धरण रखने के लिए अनुच्छेद पाठ (चयन करें एड टेक्स्ट)। फ़ॉर्म में कुछ अन्य आवश्यक फ़ील्ड भी शामिल हैं जिन्हें मैं मैन्युअल रूप से भरता हूं।

2. मैं निम्नलिखित एचटीएमएल तैयार:

 
    <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 - यूआरएल, entry_3 - पृष्ठ शीर्षक, entry_2 - उद्धरण)

3. एक पंक्ति में डालने के बाद और इसे से बचमैंने निम्नलिखित स्क्रिप्ट का उपयोग किया है:

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

इस विधि का क्रोम के साथ परीक्षण किया गया है। शुभकामनाएँ!

+0

धन्यवाद !!!! यह बहुत बढ़िया बात है! – xun

4

भविष्य में किसी के लिए, सुनिश्चित करें कि आप जिस URL को पोस्ट कर रहे हैं, उसके पास & ifq है, तो मुझे पता चला है कि इसने 405 रिटर्न के साथ अपने अधिकांश मुद्दों को आसानी से ठीक कर दिया है।

2

आज तक मुझे काम करने का अधिकार सही नहीं मिला। मेरा मानना ​​है कि Google ने कुछ चीजें बदल दी हैं।

मैं इसे entry.645136839=<somevalue> जहां बड़ी संख्या प्रपत्र क्षेत्र से प्राप्त होता है के रूप में प्रपत्र डेटा के साथ https://docs.google.com/forms/d/<form_id>/formResponse

करने के लिए एक HTTP POST करने से काम करने के लिए मिल सकता है।

0

अपने नमूना कोड से - मैंने कुछ चीजें बदल दी हैं - सबसे पहले फॉर्म सबमिशन एंड पॉइंट/ifq की आवश्यकता है। Google ने शायद चीजों को अपडेट किया है। अपने फॉर्म का स्रोत देखें और फॉर्म एक्शन यूआरएल का प्रयोग करें। दूसरी बार & गंभीर रूप से आपके फॉर्म इनपुट प्रकारों में आईडी शामिल नहीं थे (पहले को छोड़कर)। इन चीजों के साथ - फॉर्म सफलतापूर्वक पोस्ट किया गया।

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> 
संबंधित मुद्दे