使用 Google 脚本解析 RSS 翻译



我正在尝试在谷歌脚本中使用以下脚本来获取RSS翻译服务。

code.gs 如下:

function doGet() {
var fromLang = "en";    
var toLang   = "es";    
var rssFeed  = "https://XXXXXX.com/XXXX/feed/";  
var feed = parseRSS(rssFeed, fromLang, toLang);      
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;
}

这个脚本有效,给了我一个指向"https://script.googleusercontent.com"的链接。 某些网站无法正确识别这是 RSS 源。如何让它作为 XML 或 HTML 和 W3 有效的 RSS 源工作?

使用应用程序脚本提供的内容服务时。 请记住文档中提到的重定向条件:

出于安全原因,内容服务返回的内容不是 从 script.google.com 开始服务,但重定向到一次性 网址在 script.googleusercontent.com。这意味着,如果您使用 要向另一个应用程序返回内容服务,必须确保 HTTP 客户端配置为遵循重定向。例如 在 cURL 命令行实用程序中,添加标志 -L。 有关 HTTP 客户端的文档,以获取有关如何 启用此行为。

因此,在测试它时,HERE会抛出该错误,因为您正在尝试从不遵循重定向的外部源获取信息。

在您的rssFeed变量中,您可以使用文档中提供的 URL 对其进行测试:http://xkcd.com/rss.xml

要尝试不同的 MYME 类型,请更改以下代码行:

return ContentService.createTextOutput(feed)
.setMimeType(ContentService.MimeType.RSS);   

return ContentService.createTextOutput(feed)
.setMimeType(ContentService.MimeType.XML);   

编辑

如果要将文件保存在驱动器中,doGet()函数现在应如下所示

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.XML);    
}

最新更新