Html 谷歌驱动和翻译脚本
我正在使用这个脚本,但每次它获取RSS时都会创建一个新的HTML文件 我希望它只是重写以前的文件,而不是创建一个新文件,每天只获取一次。之后,如果有任何方法可以修复此不断变化的mime或任何其他选项,则不会在中验证共享。在此方面的任何帮助都将不胜感激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
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”频道
元素需要描述
元素和链接
检查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上看到的所有元素。我看到他们四个。