Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 谷歌驱动和翻译脚本_Html_Google Apps Script_Google Drive Api_Rss - Fatal编程技术网

Html 谷歌驱动和翻译脚本

Html 谷歌驱动和翻译脚本,html,google-apps-script,google-drive-api,rss,Html,Google Apps Script,Google Drive Api,Rss,我正在使用这个脚本,但每次它获取RSS时都会创建一个新的HTML文件 我希望它只是重写以前的文件,而不是创建一个新文件,每天只获取一次。之后,如果有任何方法可以修复此不断变化的mime或任何其他选项,则不会在中验证共享。在此方面的任何帮助都将不胜感激 function doGet() { var fromLang = "en"; var toLang = "es"; var rssFeed = "http://xkcd.com/rss.xml"; v

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

我希望它只是重写以前的文件,而不是创建一个新文件,每天只获取一次。之后,如果有任何方法可以修复此不断变化的mime或任何其他选项,则不会在中验证共享。在此方面的任何帮助都将不胜感激

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;

}
函数doGet(){
var fromLang=“en”;
var toLang=“es”;
变量rssFeed=”http://xkcd.com/rss.xml";  
var feed=parseRSS(rssFeed、fromLang、toLang);
createFile(“rssTest”,提要,MimeType.HTML);
返回ContentService.createTextOutput(提要)
.setMimeType(ContentService.MimeType.RSS);
}
函数parsers(提要、fromLang、toLang){
var id=Utilities.base64Encode(feed+fromLang+toLang);
//将RSS源缓存一小时
var cache=CacheService.getPublicCache();
var rss=cache.get(id);
如果(rss!=null){
返回rss;
}
变量项、日期、标题、链接、说明、guid;
var txt=UrlFetchApp.fetch(feed).getContentText();
var doc=Xml.parse(txt,false);
title=doc.getElement().getElement(“频道”).getElement(“标题”).getText();
//RSS提要使用Google Translate进行翻译
rss='';
rss+=”;
rss+=LanguageApp.translate(标题,fromLang,toLang);
rss+=“(“+title+”)”;
var items=doc.getElement().getElement(“通道”).getElements(“项目”);
//解析RSS提要中的单个项
对于(项目中的var i){
试一试{
项目=项目[i];
title=item.getElement(“title”).getText();
link=item.getElement(“link”).getText();
日期=item.getElement(“pubDate”).getText();
desc=item.getElement(“description”).getText();
guid=Utilities.base64Encode(link+fromLang+toLang);
title=LanguageApp.translate(title,fromLang,toLang);
desc=语言app.translate(desc,fromLang,toLang,
{contentType:“html”});
rss+=”;
rss+=“”+标题+“”;
rss+=“”+链接+“”;
rss+=“”+日期+“”;
rss+=“”+guid+“”;
rss+=”;
rss+=”;
}捕获(e){
Logger.log(e);
}
}
rss+=”;
cache.put(id,rss,3600);
返回rss;
}

只需调用该方法即可更改文件内容。如果你知道这个ID,你就可以把文件传过去

所以这部分代码:

DriveApp.createFile(“rssTest”,提要,MimeType.HTML);
可以更改为:

var file=DriveApp.getFileById(“”);
setContent文件(feed);

我已尝试在中验证此RSS

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

  • guid
    标记中有一个错误,基本上是isPermaLink=“false”

  • 在此之后,请记住
    频道
    元素需要
    描述
    元素和
    链接
    检查

  • 这样做对我来说是一个有效的RSS。因此,您需要更改
    parsers
    以使其正常工作

    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;
    
    }
    
    函数parsers(提要、fromLang、toLang){
    var id=Utilities.base64Encode(feed+fromLang+toLang);
    //将RSS源缓存一小时
    var cache=CacheService.getPublicCache();
    var rss=cache.get(id);
    如果(rss!=null){
    返回rss;
    }
    变量项、日期、标题、链接、说明、guid;
    var txt=UrlFetchApp.fetch(feed).getContentText();
    var doc=Xml.parse(txt,false);
    title=doc.getElement().getElement(“频道”).getElement(“标题”).getText();
    //RSS提要使用Google Translate进行翻译
    rss='';
    rss+=”;
    rss+=LanguageApp.translate(标题,fromLang,toLang);
    rss+=“(“+title+”)”;
    rss+=“您需要填写的说明”;//添加此行
    rss+=“您需要填写的链接”;//添加此行
    var items=doc.getElement().getElement(“通道”).getElements(“项目”);
    //解析RSS提要中的单个项
    对于(项目中的var i){
    试一试{
    项目=项目[i];
    title=item.getElement(“title”).getText();
    link=item.getElement(“link”).getText();
    日期=item.getElement(“pubDate”).getText();
    desc=item.getElement(“description”).getText();
    guid=Utilities.base64Encode(link+fromLang+toLang);
    title=LanguageApp.translate(title,fromLang,toLang);
    desc=语言app.translate(desc,fromLang,toLang,
    {contentType:“html”});
    rss+=”;
    rss+=“”+标题+“”;
    rss+=“”+链接+“”;
    rss+=“”+日期+“”;
    rss+=“”+guid+“”;//修改了此行
    rss+=”;
    rss+=”;
    }捕获(e){
    Logger.log(e);
    }
    }
    rss+=”;
    cache.put(id,rss,3600);
    返回rss;
    }
    
    问题的第二部分有什么想法吗?这是源,它不是验证对不起,我不明白这第二部分,你能试着澄清一下,让我帮你一把吗?基本上,该文件应该在rss验证器中验证,但它给了我这个错误对不起,这个源没有验证。第1行,第0列:XML解析错误::1:6:格式不正确(无效令牌)我更新了我的答案,以尝试回答您提出的RSS问题。感谢您的快速回复。您能否共享如何获得permalink=false的代码,以及我在代码描述/标题/链接/guid上看到的所有元素。我看到他们四个。