我目前正在向PivotalTracker API发出GET请求,以根据错误严重程度获取给定项目的所有错误。我真正需要的是一个bug的计数(即10个关键bug),但我目前正在以XML格式获取每个bug的所有原始数据。XML数据的顶部有一个bug计数,但是我必须向上滚动大量的数据才能得到这个计数。
为了解决这个问题,我试图解析XML以只显示错误计数,但我不确定如何做到这一点。我尝试过Nokogiri和REXML,但它们似乎只能解析实际的XML文件,而不能解析来自HTTP GET请求的XML。
以下是我的代码(出于安全原因,访问令牌已被*'s替换):
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请求成功地将错误计数和每个单独错误的所有原始数据打印到我的终端窗口,但我只希望它打印错误计数。
API文档显示bug总数是XML响应的顶级节点stories
的一个属性。
以Nokogiri为例,尝试将print response.read_body
替换为
xml = Nokogiri::XML.parse(response.body)
puts "Bug count: #{xml.xpath('/stories/@total')}"
当然你也需要在你的代码的顶部添加require 'nokogiri'