Анализ XML в скрипте Google Apps для API BGG

70
5

В настоящее время я пытаюсь извлечь информацию о Boardgames из BGG xml api. Поток выглядит примерно так:

Пользователь вводит название игры в качестве search->

скрипт проверяет api для игр, соответствующих этому имени, и возвращает results->

Пользователь выбирает правильный result->

скрипт берет идентификатор настольной игры из выбранного результата и снова обзывает api, используя идентификатор, который дает всю необходимую информацию.

Вот код, над которым я работаю:

var Name = "Betrayal at the house on the hill"

// Call BGG API with query to display options for selection
var response = UrlFetchApp.fetch("https://boardgamegeek.com/xmlapi/search?search="+Name)

// Parse the XML reply
var document = XmlService.parse(response);
var root = document.getRootElement();

Вот результат, который я получаю от поиска:

<boardgames termsofuse="[https://boardgamegeek.com/xmlapi/termsofuse](https://boardgamegeek.com/xmlapi/termsofuse)">
<boardgame objectid="238032">

<name primary="true">Betrayal at Baldur\'s Gate and House on the Hill Promo Cards</name>
<yearpublished>2017</yearpublished>
</boardgame>

<boardgame objectid="10547">

<name primary="true">Betrayal at House on the Hill</name>
<yearpublished>2004</yearpublished>
</boardgame>

<boardgame objectid="198452">

<name primary="true">Betrayal at House on the Hill: Widow\'s Walk</name>
<yearpublished>2016</yearpublished>
</boardgame>

</boardgames>\

Я могу справиться со всем остальным. Проблема, с которой я <boardgame objectid="xxxxxx">, заключается в том, что идентификатор boardgame завернут в тег xml <boardgame objectid="xxxxxx">, и я не могу понять, как заставить скрипт получить доступ к этой информации. Я могу видеть ID, когда смотрю на результат в журналах, но я не могу понять, как вывести идентификатор в переменную. У меня в основном нет xml опыта, который, я уверен, почему я не могу понять, что кажется довольно простым. Я использую скрипт Google Apps на листе google (в основном javascript).

Это сообщение, которое я нашел, что помогло мне начать работу, но ему, похоже, не нужен идентификатор для его варианта использования. К сожалению, я знаю.

Любые мысли или предложения будут высоко оценены!

спросил(а) 2018-08-28T16:50:00+03:00 1 год, 3 месяца назад
1
Решение
47

Зелин на reddit смог ответить на мой вопрос. Необходимый код для вытягивания идентификатора приведен ниже:

var document = XmlService.parse(bggXml);
var root = document.getRootElement();
var games = root.getChildren('boardgame');

for (var i = 0; i < games.length; i++) {
var id = games[i].getAttribute('objectid').getValue();
// do something with id
}

ответил(а) 2018-08-28T17:06:00+03:00 1 год, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема