Google Apps Scriptを使用してRSSフィードを作成します

wiki.tcl.tkのようなすばらしいTcl / Tk wikiリソースがあります。 このリソースには、最近の変更のRSSフィードがあります。 しかし、問題は、変更のテープが最も小さいことです。 誰が、いつ、どのページが編集されたかによってのみ示されます。 フィード要素の完全な変更やGUIDはないため、一部のRSSクライアント(たとえば、Google Reader)は、同じと見なしてほとんどのニュースを表示しません。



テープを独自の便利な形式に変換するには、 Yahoo Pipesなどの専用ツールを選択しました。 しかし、その後失敗しました。 ページの変更を受信するために、wikiはhttpリクエストで「wikit_e」という名前のCookieを厳密に必要とし、Cookieを送信するようにYahoo Pipesに教えることはできませんでした。 HTTP GETリクエストと "?COOKIE ="の形式のパラメータを使用したフォーカスも通過しませんでした。

その結果、より柔軟なツールであるGoogle Apps Scriptを選択しました 。 その結果、次のスクリプトが得られました。

//     ,     - 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); };
      
      





スクリプトを保存した後、アクセスレベルを「リンクを知っているすべてのユーザーがアイテムを表示できる」または「インターネットで一般公開:すべてのユーザーがアイテムを検索して表示できる」ように設定します。 メニュー「ファイル->バージョン...」で、アプリケーションの新しいバージョンを作成します。 次に、メニュー「公開-> Webアプリケーションとしてデプロイ...」で保存済みバージョンを選択し、ドロップダウンリスト「アプリケーションの起動方法」で「代理」を選択し、ドロップダウンリストで「アプリケーションにアクセスできるユーザー」で「すべて、匿名ユーザーを含む。」 リンクは「 script.google.com/macros/s< ID >/exec



script.google.com/macros/s< ID >/exec



"。これは任意のRSSリーダーで使用します。



ボーナス:

  1. Google翻訳使用してGoogle Apps Scriptを使用してフィードを別の言語に自動的に翻訳する例
  2. RSS 2.0 仕様



All Articles