我正在尝试在谷歌脚本中使用以下脚本来获取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);
}