Как я могу разобрать только количество ошибок из 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'
в верхней части вашего кода, а также.