Как исправить "GetChildText(имя элемента строки, пространство имен строки)" в Google Scripts при анализе RSS-канала?
Я работаю над сценарием Google с помощью редактора сценариев Google Sheets Script, который собирается анализировать RSS-ленту iTunes.
Я использовал службу XML - документацию, представленную здесь, - и это кажется довольно простым, пока я не наткнулся на элементы пространства имен iTunes. Метод для анализа элементов XML вместе с их пространствами имен, как это предусмотрено Google:
getChildText(name, namespace)
Где параметры name и namespace находятся в строке. Поэтому, следуя документации и предоставленным примерам, я попробовал этот код:
function customScraperRSSFeed() {
var xml = UrlFetchApp.fetch('http://feeds.soundcloud.com/users/soundcloud:users:279094703/sounds.rss').getContentText();
var document = XmlService.parse(xml);
var ituneEntries = document.getRootElement().getChildText('email', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
Logger.log(ituneEntries);
}
Снимок моего кода также можно найти здесь.
Но почему-то, если я запускаю этот код, я получаю следующую ошибку:
Cannot find method getChildText(string,string)
Я знаю, что есть другие методы, включая getChild (name, namespace), который следует по тому же пути.
Вот теги с пространством имен iTunes, которые я хочу проанализировать. Платформа не позволяет мне прикреплять изображения напрямую, поэтому, пожалуйста, потерпите меня.
А вот ссылка на полный RSS-канал: http://feeds.soundcloud.com/users/soundcloud:users:279094703/sounds.rss
Теперь я хочу знать, если что-то не так с кодом, который я делаю? Я перепробовал все варианты, и я даже попробовал это:
var xml = UrlFetchApp.fetch('http://feeds.soundcloud.com/users/soundcloud:users:279094703/sounds.rss').getContentText();
var document = XmlService.parse(xml);
var ituneEntries = document.getRootElement().getChildren('channel');
for(var i=0; i<ituneEntries.length; i++)
{
var name = ituneEntries[i].getName();
if(name=='subtitle')
{
Logger.log(ituneEntries[i].getText());
}
else if(name=='owner')
{
var ownerInformation = ituneEntries[i].getChildren();
Logger.log(ownerInformation[0].getText());
Logger.log(ownerInformation[1].getText());
}
}
Что касается приведенного выше кода, у меня был план перебрать все элементы по требуемым именам тегов, а затем получить их значения, и даже тогда я получал значения NULL для некоторых тегов.
Таким образом, на основании приведенного выше объяснения проблемы, любая помощь или любое решение этой проблемы будет высоко оценено.
Спасибо!
1 ответ
- Вы хотите получить все значения, когда префикс пространства имен
itunes
, - Например, когда есть
<itunes:Tag Name>sample value</itunes:Tag Name>
, вы хотите получитьsample value
, - Вы хотите добиться этого с помощью Google Apps Script.
Я мог бы подтвердить, как указано выше. Если мое понимание верно, как насчет этого примера сценария? Пожалуйста, подумайте об этом как один из нескольких ответов.
Пример скрипта:
function myFunction() {
var xml = UrlFetchApp.fetch('http://feeds.soundcloud.com/users/soundcloud:users:279094703/sounds.rss').getContentText();
var document = XmlService.parse(xml);
var c = document.getRootElement().getChild('channel').getChildren();
for (var i = 0; i < c.length; i++) {
if (c[i].getName() == 'item') {
var item = c[i].getChildren();
for (var j = 0; j < item.length; j++) {
if (item[j].getNamespace().getPrefix() == 'itunes') {
Logger.log("%s, %s", item[j].getName(), item[j].getValue())
}
}
}
}
}