खोज…


परिचय

यह सरल Google ऐप वेब स्क्रिप्ट (स्टैंडअलोन) Google ड्राइव को उपयोगकर्ता के स्थानीय पीसी में डाउनलोड की जाने वाली फ़ाइलों के लिए दोहराया जाने की अनुमति देता है। दिखाता है कि दोनों के फ़ंक्शन प्रदान करने के लिए एक ऐप स्क्रिप्ट का उपयोग कैसे करें: 1. उपयोगकर्ता इंटरफ़ेस (इस उदाहरण में एक सरल) 2. फ़ाइल डाउनलोड पृष्ठ। यह कैसे काम करता है की एक पूरी व्याख्या के लिए उदाहरण पढ़ें "यह कैसे काम करता है"।

टिप्पणियों

वेब स्क्रिप्ट को काम करने के लिए प्रकाशित किया जाना चाहिए।

Https://script.google.com के लिए पॉप अप को सक्षम किया जाना चाहिए

forms.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
    
    setInterval(
    function () 
    { 
      document.getElementById('messages').innerHTML = 'Event Timer Fetching';
      google.script.run
        .withSuccessHandler(onSuccess)
        .withFailureHandler(onFailure)
        .fetchFromGoogleDrive();
    }, 60000);
    
    function callFetchGoogleDrive() {
      document.getElementById('messages').innerHTML = 'Fetching';
      google.script.run
        .withSuccessHandler(onSuccess)
        .withFailureHandler(onFailure)
        .fetchFromGoogleDrive();   
    }
      
    function onSuccess(sHref) 
    {
      if(new String(sHref).valueOf() == new String("").valueOf())
      {
        document.getElementById('messages').innerHTML = 'Nothing to download';
      }
      else
      {
        document.getElementById('messages').innerHTML = 'Success';
        document.getElementById('HiddenClick').href = sHref;
        document.getElementById('HiddenClick').click(); // Must enable Pop Ups for https://script.google.com
      }
    }
    
    function onFailure(error) 
    {
      document.getElementById('messages').innerHTML = error.message;
    }
    
    </script>
  </head>
  <body>
    <div id="messages">Waiting to DownLoad!</div>
    <div>
      <a id="HiddenClick" href="" target="_blank" onclick="google.script.host.close" style="visibility: hidden;">Hidden Click</a>
    </div>
    <div>
      <button type="button" onclick='callFetchGoogleDrive();' id="Fetch">Fetch Now!</button> 
    </div>
  </body>
</html>

code.gs

function doGet(e){
   var serveFile = e.parameter.servefile;
   var id = e.parameter.id;
   
   if(serveFile)
   {
     return downloadFile(id); // and Hyde
   }
   
  return HtmlService.createHtmlOutputFromFile('form.html'); // Jekyll
}

function fetchFromGoogleDrive() { // Jekyll
  var fileslist = DriveApp.searchFiles("your search criteria goes here + and trashed = false"); // the 'and trashed = false' prevents the same file being download more than once
  
  if (fileslist.hasNext()) {
    var afile = fileslist.next();
    var html = ScriptApp.getService().getUrl()+"?servefile=true&id="+afile.getId();
    return html;
  }
  else
  {
    return '';
  }
}
   
function downloadFile(id){ // and Hyde  
  try
  {
    var afile = DriveApp.getFileById(id);
  
    var aname = afile.getName();
    var acontent = afile.getAs('text/plain').getDataAsString();
    
    var output = ContentService.createTextOutput();
    output.setMimeType(ContentService.MimeType.CSV);
    output.setContent(acontent);
    output.downloadAsFile(aname);
    afile.setTrashed(true);
    return output;
  }
  catch (e) {
    return ContentService.createTextOutput('Nothing To Download')
  }
}

यह काम किस प्रकार करता है

Google ड्राइव (स्टैंडअलोन) वेब ऐप ड्राइव को उपयोगकर्ता के स्थानीय पीसी (डाउनलोड फ़ोल्डर) से स्वचालित रूप से डाउनलोड (पोल) करने के लिए।

DriveApp फाइलों को खोजने और डाउनलोड करने के लिए तंत्र प्रदान करता है। हालाँकि क्लाइंट / सर्वर आर्किटेक्चर Google Apps को विरासत में मिला होने के कारण डाउनलोड तंत्र की कुछ गंभीर सीमाएँ हैं। (Google का कोई दोष नहीं)

सर्वर साइड DriveApp स्थानीय पीसी को डाउनलोड करने के लिए एक सीधा फ़ंक्शन प्रदान नहीं करता है क्योंकि सर्वर को इस बात की कोई अवधारणा नहीं है कि क्लाइंट कहाँ है और फ़ाइल को सर्वर पर डाउनलोड करना अपने आप में अर्थहीन होगा।

सर्वर साइड कोड को क्लाइंट साइड कोड फ़ाइल डेटा या फ़ाइल के लिए लिंक प्रदान करने के लिए एक तंत्र की आवश्यकता होती है। इन दोनों तंत्रों को प्रदान किया जाता है लेकिन पूर्व से प्राप्त डेटा क्लाइंट साइड कोड द्वारा सीधे उपयोग किए जाने तक सीमित है। क्लाइंट के पास डेटा को बचाने का कोई तंत्र नहीं है, जिसे एक बार स्थानीय पीसी पर प्राप्त किया जाता है। तो इसका उपयोग वेब पेज पर ही डेटा प्रदर्शित करने के लिए किया जा सकता है।

दूसरा तंत्र स्क्रिप्ट (स्वयं) या ड्राइव फ़ाइल के यूआरएल को वापस पारित करने की अनुमति देता है। ड्राइव फ़ाइल url बहुत उपयोगी नहीं है क्योंकि यह फ़ाइल को डाउनलोड करने के लिए सीधे क्लाइंट ब्राउज़र में उपयोग नहीं किया जा सकता है। इस url को लंगर में रखने (और इसे क्लिक करने) के परिणामस्वरूप केवल एक वेब पेज खुलता है लेकिन वास्तव में कुछ भी नहीं करता है (संभवतः फ़ाइल को ऑनलाइन देखें)।

वह स्क्रिप्ट url छोड़ देता है। हालाँकि स्क्रिप्ट url केवल स्क्रिप्ट प्रदान करती है न कि फ़ाइल।

डाउनलोड को आरंभ करने के लिए ड्राइव सेवा से फाइल को सर्वर साइड स्क्रिप्ट के doGet / doPost फ़ंक्शन से वापस लौटना चाहिए जैसे कि ContentService createTextOutput का उपयोग करके बिल्कुल वैसा ही जैसा कि Google ऑनलाइन गाइड में दिखाया गया है। हालांकि इसका तात्पर्य यह है कि doGet / doPost द्वारा लौटाए गए परिणामों से उत्पन्न वेब पेज पर कोई अन्य UI तत्व नहीं हो सकता है।

यह हमें बहुत अनाकर्षक समाधान के साथ छोड़ देता है। एक खाली वेब पेज जिसमें कोई उपयोगकर्ता यूआई तत्व नहीं है, जो एक पेज को डाउनलोड करता है, बंद हो जाता है और जब किसी अन्य डाउनलोड की आवश्यकता होती है तो मैन्युअल रूप से खोलने की आवश्यकता होती है।

जाहिर है कि एक और होस्टिंग वेब पेज यूआई और इस समस्या को हल करने के लिए वेब ऐप डाउनलोड स्क्रिप्ट का लिंक प्रदान कर सकता है।

यह स्क्रिप्ट इस समस्या को हल करने के लिए एक डॉ। जेकेल और श्री हाइड दृष्टिकोण का उपयोग करती है।

अगर स्क्रिप्ट को GET (DoGet) के लिए कोई पैरामीटर नहीं मिला है, तो यह एक फॉर्म प्रदर्शित करने में चूक करता है। यह वह स्थिति होगी जब किसी उपयोगकर्ता द्वारा प्रकाशित ऐप पहली बार खोला जाता है। इस उदाहरण में प्रदान किया गया फ़ॉर्म अत्यंत सरल है।

यदि स्क्रिप्ट पैरामीटर के साथ खोली जाती है तो सर्वफ़ाइल = सही है और स्क्रिप्ट ड्राइव फ़ाइल डाउनलोड के रूप में व्यवहार करती है।

क्लाइंट साइड जावास्क्रिप्ट में एक मतदान तंत्र (इवेंट टाइमर सेटइंटरवल) होता है जो समय-समय पर सर्वर साइड स्क्रिप्ट को डाउनलोड करने के लिए किसी अन्य फ़ाइल की उपलब्धता की जांच करने के लिए कहता है।

जब सर्वर साइड स्क्रिप्ट निष्पादित की जाती है, तो यह किसी भी ड्राइव फ़ाइल को खोज मानदंड से मेल खाती है * यह स्क्रिप्ट के यूआरएल को मापदंडों के साथ संलग्न करता है:

? Servefile = सच और आईडी = the_id_of_the_google_drive_file

(* इस सरल उदाहरण में खोज मापदंड हार्ड सर्वर साइड स्क्रिप्ट में कोडित है। इसे क्लाइंट से सर्वर पर आसानी से पारित किया जा सकता है।)

यह जानकारी क्लाइंट के लिए मान्यता प्राप्त withSuccessHandler तंत्र के माध्यम से एक स्ट्रिंग के रूप में दी जाती है।

क्लाइंट जावा स्क्रिप्ट तब इस जानकारी के साथ एक छिपे हुए एंकर के HREF को अपडेट करती है और फिर एंकर को स्वचालित रूप से क्लिक करती है।

इसके कारण ऐप / स्क्रिप्ट का एक और मंगलाचरण शुरू किया जाता है। जब ऐप का नया इनवॉइस लॉन्च होता है तो doGet सर्फ़ाइल पैरामीटर का पता लगाएगा और उपयोगकर्ता इंटरफ़ेस को वापस करने के बजाय यह फ़ाइल को ब्राउज़र में वापस करेगा। लौटाई गई फ़ाइल को पहचान की गई आईडी पैरामीटर द्वारा पहचाना जाएगा जो पहले ऊपर बताई गई खोज द्वारा लौटाया गया था।

यह देखते हुए कि प्रदान की गई आईडी के साथ फाइल अभी भी मौजूद है, इसे डाउनलोड किया जाएगा और इस प्रक्रिया को दोहराने के लिए ऐप का नया आह्वान पहले मंगलाचरण को छोड़ देगा।

यदि उपयोगकर्ता / परीक्षक टाइमर के इंतजार के साथ अधीर हो जाता है, लेकिन यह आवश्यक नहीं है और अन्यथा इसे हटाया जा सकता है, तो एक बटन को सरल इंटरफ़ेस पर प्रदान किया जाता है।

यदि आवश्यक हो तो एक सरल उपयोगकर्ता इंटरफ़ेस प्रदान करने के लिए सरल रूप को बढ़ाया जा सकता है। जैसे कि फ़ाइल खोज मापदंड प्रदान करना।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow