Как я могу разобрать только количество ошибок из API PivotalTracker?

В настоящее время я выполняю запрос GET к API PivotalTracker, чтобы получить все ошибки для данного проекта по степени серьезности ошибок. Все, что мне действительно нужно, - это количество ошибок (т.е. 10 критических ошибок), но в настоящее время я получаю все необработанные данные для каждой ошибки в формате XML. Данные XML имеют счетчик ошибок в верхней части, но мне нужно прокрутить тонны данных, чтобы добраться до этого количества.

Чтобы решить эту проблему, я пытаюсь проанализировать XML, чтобы отобразить только количество ошибок, но я не уверен, как это сделать. Я экспериментировал с Nokogiri и REXML, но кажется, что они могут анализировать только реальные XML-файлы, но не XML из HTTP-запроса GET.

Вот мой код (токен доступа заменен на * в целях безопасности):

require 'net/http'
require 'rexml/document'

prompt = '> '
puts "What is the id of the Project you want to get data from?"
print prompt
project_id = STDIN.gets.chomp()
puts "What type of bugs do you want to get?"
print prompt
type = STDIN.gets.chomp()


def bug(project_id, type)
  net = Net::HTTP.new("www.pivotaltracker.com")
  request = Net::HTTP::Get.new("/services/v3/projects/#{project_id}/stories?filter=label%3Aqa-#{type}")
  request.add_field("X-TrackerToken", "*******************")
  net.read_timeout = 10
  net.open_timeout = 10

  response = net.start do |http|
    http.request(request)
  end
  puts response.code
  print response.read_body
end

bug(project_id, type)

Как я уже сказал, запрос GET успешно печатает счетчик ошибок и все необработанные данные для каждой отдельной ошибки в моем окне терминала, но я хочу, чтобы он только печатал счетчик ошибок.

1 ответ

Решение

Документация API показывает, что общее количество ошибок является атрибутом узла верхнего уровня ответа XML, stories,

Используя Nokogiri в качестве примера, попробуйте заменить print response.read_body с

xml = Nokogiri::XML.parse(response.body)
puts "Bug count: #{xml.xpath('/stories/@total')}"

Естественно, вам нужно будет добавить require 'nokogiri' в верхней части вашего кода, а также.

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