#!/usr/bin/env ruby require 'digest/md5' require 'net/http' require 'net/https' require 'uri' require 'rexml/document' BASE_URL = 'www.pivotaltracker.com' BASE_PATH = '/services/v3' USERNAME = 'webmaster@mushroomobserver.org' PASSWORD = 'heCdf#sj' token = nil project_id = nil story_xml = nil # token = 'f8b3cdf5217e0a6367b86f1de9947f70' # project_id = '224629' # story_xml = File.new('/home/jason/x.xml') token ||= begin https = Net::HTTP.new(BASE_URL, 443) req = Net::HTTP::Get.new(BASE_PATH + '/tokens/active') req.basic_auth(USERNAME, PASSWORD) https.use_ssl = true res = https.request(req) doc = REXML::Document.new(res.body) token = doc.root.elements['guid'].first.value puts "Token: #{token}" token end http = Net::HTTP.new(BASE_URL, 80) headers = { 'X-TrackerToken' => token } project_id ||= begin req = Net::HTTP::Get.new(BASE_PATH + '/projects', headers) res = http.request(req) doc = REXML::Document.new(res.body) project_id = doc.root.elements['project/id'].first.value puts "Project: #{project_id}" project_id end project_path = BASE_PATH + "/projects/#{project_id}" story_xml ||= begin req = Net::HTTP::Get.new(project_path + '/stories', headers) http.request(req).body end stories = [] doc = REXML::Document.new(story_xml) doc.root.elements.each('story') do |story| data = { :labels => [], :comments => [], } story.each_element do |elem| case elem.name when 'id' ; data[:id] = elem.text when 'story_type' ; data[:type] = elem.text when 'estimate' ; data[:time] = elem.text when 'current_state' ; data[:state] = elem.text when 'name' ; data[:name] = elem.text when 'description' ; data[:desc] = elem.text when 'labels' ; data[:labels] = elem.text.split(',') when 'notes' ; data[:comments] = elem.elements end end stories << data end puts "Found #{stories.length} stories!"