Как исправить "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())
        }
      }
    }
  }
}

Ссылка:

Другие вопросы по тегам