繁体   English   中英

Google 云端硬盘和翻译脚本

[英]Google Drive and Translation Script

我正在使用这个脚本,但每次它获取 RSS 时都会创建一个新的 HTML 文件。

我希望它只是重写以前的文件,而不是创建一个新文件并且每天只获取一次。 之后,如果有任何方法可以修复此更改的 mime 或任何其他选项,则一旦我共享该文件,则不会在RSS 验证器中进行验证 对此的任何帮助将不胜感激。

function doGet() {

  var fromLang = "en";    
  var toLang   = "es";    
  var rssFeed  = "http://xkcd.com/rss.xml";  

  var feed = parseRSS(rssFeed, fromLang, toLang);   
  DriveApp.createFile("rssTest", feed, MimeType.HTML);
  return ContentService.createTextOutput(feed)
           .setMimeType(ContentService.MimeType.RSS);    
}

function parseRSS(feed, fromLang, toLang) {

  var id = Utilities.base64Encode(feed + fromLang + toLang);

  // Cache the RSS feeds for an hour
  var cache = CacheService.getPublicCache();
  var rss   = cache.get(id);

  if (rss != null) {
    return rss;
  }

  var item, date, title, link, desc, guid; 

  var txt = UrlFetchApp.fetch(feed).getContentText();
  var doc = Xml.parse(txt, false);  

  title = doc.getElement().getElement("channel").getElement("title").getText();

  // The RSS Feed is translated using Google Translate
  rss = '<rss version="2.0">';
  rss += "<channel><title>";
  rss += LanguageApp.translate(title, fromLang, toLang);
  rss += " (" + title + ")</title>";

  var items = doc.getElement().getElement("channel").getElements("item");   

  // Parsing single items in the RSS Feed
  for (var i in items) {

    try {

      item  = items[i];

      title = item.getElement("title").getText();
      link  = item.getElement("link").getText();
      date  = item.getElement("pubDate").getText();
      desc  = item.getElement("description").getText();

      guid  = Utilities.base64Encode(link + fromLang + toLang);

      title = LanguageApp.translate(title, fromLang, toLang);
      desc  = LanguageApp.translate(desc,  fromLang, toLang, 
                                       {contentType: "html"});

      rss += "<item>";
      rss += "  <title>"   + title + "</title>";
      rss += "  <link>"    + link  + "</link>";
      rss += "  <pubDate>" + date  + "</pubDate>";
      rss += "  <guid>"    + guid  + "</guid>";
      rss += "  <description><![CDATA[" + desc + "]]></description>";
      rss += "</item>";

    } catch (e) {
      Logger.log(e);
    }
  }

  rss += "</channel></rss>";

  cache.put(id, rss, 3600);
  return rss;

}

您可以通过调用方法setContent()来更改文件的内容。 如果您知道 ID,则可以通过DriveApp.getFileById()获取文件。

所以这部分代码:

DriveApp.createFile("rssTest", feed, MimeType.HTML);

可以改成这样:

var file = DriveApp.getFileById("<your file ID>");
file.setContent(feed);

我已尝试在您发送验证器中验证此 RSS。

为了验证,我需要做一些事情。

  1. guid标签中有错误,基本上,你 需要添加isPermaLink="false"。

  2. 之后记住channel元素需要description元素并在w3schools link检查它。

这样做使它成为我的有效 RSS。 因此,您需要更改parseRSS以使其正常工作。

function parseRSS(feed, fromLang, toLang) {

  var id = Utilities.base64Encode(feed + fromLang + toLang);

  // Cache the RSS feeds for an hour
  var cache = CacheService.getPublicCache();
  var rss   = cache.get(id);

  if (rss != null) {
    return rss;
  }

  var item, date, title, link, desc, guid; 

  var txt = UrlFetchApp.fetch(feed).getContentText();
  var doc = Xml.parse(txt, false);  

  title = doc.getElement().getElement("channel").getElement("title").getText();

  // The RSS Feed is translated using Google Translate
  rss = '<rss version="2.0">';
  rss += "<channel><title>";
  rss += LanguageApp.translate(title, fromLang, toLang);
  rss += " (" + title + ")</title>";
  rss += "<description>Description you need to fill</description>"; // Add this line
  rss += "<link>Link you need to fill</link>"; // Add this line 

  var items = doc.getElement().getElement("channel").getElements("item");   

  // Parsing single items in the RSS Feed
  for (var i in items) {

    try {

      item  = items[i];

      title = item.getElement("title").getText();
      link  = item.getElement("link").getText();
      date  = item.getElement("pubDate").getText();
      desc  = item.getElement("description").getText();

      guid  = Utilities.base64Encode(link + fromLang + toLang);

      title = LanguageApp.translate(title, fromLang, toLang);
      desc  = LanguageApp.translate(desc,  fromLang, toLang, 
                                       {contentType: "html"});

      rss += "<item>";
      rss += "  <title>"   + title + "</title>";
      rss += "  <link>"    + link  + "</link>";
      rss += "  <pubDate>" + date  + "</pubDate>";
      rss += "  <guid isPermaLink="false">"    + guid  + "</guid>"; // Modified this line
      rss += "  <description><![CDATA[" + desc + "]]></description>";
      rss += "</item>";

    } catch (e) {
      Logger.log(e);
    }
  }

  rss += "</channel></rss>";

  cache.put(id, rss, 3600);
  return rss;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM