Скрипт переводит RSS ленту, но есть проблема.
Скрипт выдаёт ошибку: сильно высокое значение если есть строка:
cache.put(id, rss, 3600);
.
А если этой строки нет, то всё работает, лента парсится, но очень долго. минут 10 грузится, из за этого не могу прикрутить её к сайту, хостинг не рассчитан на такое долго время ожидания.
Спустя некоторое количество попыток исправления, мне в консоли вообще стало выдавать что превышена квота 1000 на translate в день.
Сам код:
function doGet() {
var fromLang = "ru";
var toLang = "en";
var rssFeed = "https://theins.ru/feed.xml";
var feed = parseRSS(rssFeed, fromLang, toLang);
return ContentService.createTextOutput(feed)
.setMimeType(ContentService.MimeType.TEXT);
}
function parseRSS(feed, fromLang, toLang) {
var id = Utilities.base64Encode(feed + fromLang + toLang);
var cache = CacheService.getPublicCache();
var rss = cache.get(id);
if (rss != null) {
return rss;
}
var item, title, desc;
var txt = UrlFetchApp.fetch(feed).getContentText();
var doc = XmlService.parse(txt);
var content = XmlService.getNamespace("http://purl.org/rss/1.0/modules/content/");
var atom = XmlService.getNamespace("http://www.w3.org/2005/Atom");
var root = doc.getRootElement();
var channel = root.getChild("channel");
channel.getChild("title").setText(channel.getChild("title").getText() + " (" + toLang + ")");
channel.getChild("language").setText(toLang);
var link = channel.getChild("link").getText();
link += (link.split("?")[1] ? "&":"?") + "lang=" + toLang;
channel.getChild("link").setText(link);
var items = channel.getChildren("item");
for (var i in items) {
try {
item = items[i];
channel.removeContent(item);
var title = item.getChild("title").getText();
var desc = item.getChild("description").getText();
var guid = item.getChild("guid").getText();
var cont = item.getChild("encoded", content).getText();
Utilities.sleep(1000)
title = LanguageApp.translate(title, fromLang, toLang);
desc = LanguageApp.translate(desc, fromLang, toLang, {contentType: "html"});
guid += (guid.split("?")[1] ? "&":"?") + "lang=" + toLang;
cont = LanguageApp.translate(cont, fromLang, toLang, {contentType: "html"});
item.getChild("title").setText(title);
item.getChild("description").setText(desc);
item.getChild("guid").setText(guid);
item.getChild("encoded", content).setText(cont);
channel.addContent(item);
} catch (e) {
Logger.log(e);
}
}
var rss = XmlService.getCompactFormat().setEncoding('UTF-8').format(doc);
cache.put(id, rss, 3600); // Cache the feed for an hour
return rss;
}