Google Apps स्क्रिप्ट का उपयोग करके अपना RSS फ़ीड बनाएं

इस तरह के एक अद्भुत Tcl / Tk विकि संसाधन wiki.tcl.tk है। इस संसाधन में हाल के परिवर्तनों का RSS फ़ीड है। लेकिन परेशानी यह है कि परिवर्तनों का टेप सबसे कम है। यह केवल यह दर्शाता है कि किसके द्वारा, कब और किस पृष्ठ को संपादित किया गया। फ़ीड तत्वों के लिए कोई पूर्ण परिवर्तन नहीं है और कोई GUID नहीं है, इसलिए कुछ RSS क्लाइंट (उदाहरण के लिए, Google रीडर) अधिकांश समाचारों को समान नहीं दिखाते हैं।

टेप को अपने सुविधाजनक प्रारूप में बदलने के लिए, विकल्प याहू पाइप्स जैसे एक विशेष उपकरण पर गिर गया। लेकिन फिर असफल रहे। पृष्ठ परिवर्तन प्राप्त करने के लिए, विकी ने http अनुरोध में "wikit_e" नाम के साथ कड़ाई की आवश्यकता थी, और कुकीज़ भेजने के लिए याहू पाइप को पढ़ाना संभव नहीं था। HTTP GET अनुरोध और "COOKIE =" के रूप में पैरामीटर के साथ फोकस भी पास नहीं हुआ।
नतीजतन, विकल्प अधिक लचीले टूल पर गिर गया - Google Apps स्क्रिप्ट । परिणामस्वरूप, हमें यह स्क्रिप्ट मिली:
//     ,     - function doGet() { //  URL  RSS  var feed = 'http://wiki.tcl.tk/rss.xml'; //  ID     var id = Utilities.base64Encode(feed); //           var cache = CacheService.getPublicCache(); var rss = cache.get(id); //       -     if (rss == null) { //   RSS    XML var data = UrlFetchApp.fetch(feed).getContentText(); var doc = Xml.parse(data); //   var channel = doc.getElement().getElement("channel"); //   , ,   var title = channel.getElement("title").getText(); var link = channel.getElement("link").getText(); var desc = channel.getElement("description").getText(); var guid, date; //    RSS ,  ,    rss = '<rss version="2.0">'; rss += "<channel>" rss += "<title>" + title + "</title>\n"; rss += "<link>" + link + "</link>\n"; rss += "<description>" + desc + "</description>\n"; //          var items = channel.getElements("item"); for (var i in items) { item = items[i]; //    , ,  ,  title = item.getElement("title").getText(); link = item.getElement("link").getText(); //     diff  link = link.replace(/\/(\d+)$/, "/_/diff?N=$1#diff0"); date = item.getElement("pubDate").getText(); desc = item.getElement("description").getText(); //  GUID    guid = Utilities.base64Encode(link + date); //  diff ,    Cookie "wikit_e"  "rss" var fullpage = UrlFetchApp.fetch(link, {"headers":{"Cookie":"wikit_e=rss"}}).getContentText(); //     body var matched = fullpage.match(/<body[^>]*>([\w\W]*)<\/body>/i)[1]; //      matched = matched.replace(/<div id='menu_area'>[\w\W]+$/i, ""); matched = matched.replace(/^[\w\W]+<div id='content'>/i, ""); //        matched = matched.replace(/(href|src)=(["'])\//ig, "$1=$2http://wiki.tcl.tk/"); // .. CSS  RSS  ,      matched = matched.replace(/class='newwikiline'/g, "style='margin:0;background:#80ff80;'"); matched = matched.replace(/class='oldwikiline'/g, "style='margin:0;background:#ffa0a0;'"); matched = matched.replace(/class='whitespacediff'/g, "style='margin:0;background:#f0f0ff;'"); matched = matched.replace(/class='wikit_categories'/g, "style='padding:2px 5px 2px 5px;text-align:left;border:1px solid gray;background-color:#DDD;'"); matched = matched.replace(/<pre>/g, "<pre style='color:#331100;background-color:#eeeeee;font-family:monospace;'>"); //    RSS   rss += "<item>\n"; rss += " <title>" + title + "</title>\n"; rss += " <link>" + link + "</link>\n"; rss += " <pubDate>" + date + "</pubDate>\n"; rss += " <guid isPermaLink='false'>" + guid + "</guid>\n"; rss += " <description><![CDATA[" + desc + "<br>\n" + matched + "]]></description>\n"; rss += "</item>\n"; }; //   RSS rss += "</channel></rss>"; //         30  //    - 100kb //      ,   try { cache.put(id, rss, 1800); } catch (e) { Logger.log(e); }; }; //      return ContentService.createTextOutput(rss).setMimeType(ContentService.MimeType.RSS); }; 

स्क्रिप्ट को सहेजने के बाद, एक्सेस स्तर को कॉन्फ़िगर करें "किसी भी उपयोगकर्ता लिंक के साथ आइटम देख सकता है" या "इंटरनेट पर सार्वजनिक रूप से उपलब्ध है: कोई भी उपयोगकर्ता आइटम को ढूंढ और देख सकता है"। मेनू में "फ़ाइल-> संस्करण ..." एप्लिकेशन का एक नया संस्करण बनाएं। इसके बाद, मेनू में "प्रकाशित करें-> वेब एप्लिकेशन के रूप में कार्य करें ..." हम ड्रॉप-डाउन सूची में "सहेजे गए एप्लिकेशन का चयन कैसे करें" का चयन करें, ड्रॉप-डाउन सूची में "मेरी ओर से" का चयन करें "आवेदन की पहुंच किसके पास है" का चयन करें "सब कुछ, अनाम उपयोगकर्ताओं सहित। " हमें फॉर्म में लिंक मिलता है " script.google.com/macros/s< ID >/exec script.google.com/macros/s< ID >/exec ", जिसे हम किसी भी आरएसएस रीडर में उपयोग करते हैं।

बोनस:
  1. Google अनुवाद का उपयोग करके किसी अन्य भाषा में फ़ीड का स्वचालित रूप से अनुवाद करने के लिए Google Apps स्क्रिप्ट का उपयोग करने का एक उदाहरण है
  2. आरएसएस 2.0 विशिष्टता


Source: https://habr.com/ru/post/In175775/


All Articles