使用Google Apps脚本将Google电子表格导出为RSS格式

时间:2016-11-13 22:13:53

标签: google-apps-script rss

我尝试使用Google Apps脚本将Google电子表格导出到RSS。这是我的谷歌表:

https://docs.google.com/spreadsheets/d/15fwOeR6Jo4UadzOTlryTucgI3ZFZ5IVM16GDSwA0XE0/edit?usp=sharing

这是我的谷歌应用脚​​本代码:

function doGet() {
 var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/15fwOeR6Jo4UadzOTlryTucgI3ZFZ5IVM16GDSwA0XE0/edit#gid=0');
 SpreadsheetApp.setActiveSpreadsheet(ss);
 SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);
 var title = ss.getSheets()[0].getRange("A1:A3").getValues();

var rss='<?xml version="1.0" encoding="utf-8"?>';
  rss+='<feed xmlns="http://www.w3.org/2005/Atom">';
  rss+='<title>testtile </title>';
  rss+='<link href="www.google.com"/>';
  rss+='<id>http://nexcono.appspot.com/frase/</id>';   
  for(var i=1;i<title.length;i++){
    rss+='<entry>';
    rss+='<title>sometitle '+title[i][0]+'</title>';
    rss+='<link rel="alternate" href="http://apple.com"/>';
    rss+='<id>http://nexcono.appspot.com/frase/'+'</id>';
    rss+='</entry>';
  }
   rss+='</feed>';
   return ContentService.createTextOutput(rss).setMimeType(ContentService.MimeType.RSS);
}

但是,当我使用https://validator.w3.org/feed/验证时,它说它不是vlid RSS :(

非常感谢,

2 个答案:

答案 0 :(得分:2)

模板化HTML可用于您的脚本。参考网站为https://developers.google.com/apps-script/guides/html/templates

var title;
function doGet() {
  var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/15fwOeR6Jo4UadzOTlryTucgI3ZFZ5IVM16GDSwA0XE0/edit#gid=0');
  SpreadsheetApp.setActiveSpreadsheet(ss);
  SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);
  title = ss.getSheets()[0].getRange("A1:A2").getValues();
  var template = HtmlService.createTemplateFromFile('template');
  var rss = template.evaluate();
  return ContentService.createTextOutput(rss.getContent()).setMimeType(ContentService.MimeType.XML);
}

模板html如下。文件名是“template.html”。请在包含上述脚本的项目中进行此操作。

<rss version="2.0"
  xmlns:rss="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>testtile </title>
<link href="www.google.com"/>
<id>http://nexcono.appspot.com/frase/</id>
<? for(var i=0;i<title.length;i++){ ?>
<entry>
<title>sometitle '+ <?= title[i][0] ?> +'</title>
<link rel="alternate" href="http://apple.com"/>
<id>http://nexcono.appspot.com/frase/'+'</id>
</entry>
<? } ?>
</channel>
</rss>

答案 1 :(得分:0)

据我所知,这个问题是:

  

出于安全原因,内容服务返回的内容不会从script.google.com提供,而是重定向到script.googleusercontent.com上的一次性网址。这意味着如果您使用Content服务将数据返回到另一个应用程序,则必须确保HTTP客户端配置为遵循重定向。1

该脚本适用于浏览器(Firefox,Opera等),但没有RSS阅读器识别它。所以,那里,不知道如何解决它,但你已经到了一半。